如何解决Python3.9 将 CIDR 转换为子网:空间导致问题
数据在某些 20x CIDR 中有空格,例如“136.226.68.0/23”与“136.226.68.0/23”,我似乎不知道如何忽略空格。
如果我在 https://ips.zscloud.net/cenr/jsonip 中加载 URL https://codebeautify.org/jsonviewer,您将看到 281 个条目中的 20 个条目的空间。
由于空间原因,此代码在第二个区域为 Atlanta II 136.226.68.0/23 之前可以正常工作:
import requests
import pprint
from ipaddress import IPv4Network
# Site to get data from in json format
url = 'https://ips.zscloud.net/cenr/jsonip'
# Get the data
response = requests.get(url)
data = response.json()
# Separate the data and print city and networks
regions = data['Geo_regions']
for name,region in regions.items():
for city_name,city_data in region.items():
for network_data in city_data:
print (city_name,network_data.get('cidr'))
net = IPv4Network(network_data.get('cidr'))
print (net.network_address,net.netmask,'\n')
它得到前 143 个条目就好了,然后得到以下错误:
.
.
Atlanta II 104.129.204.0/23
104.129.204.0 255.255.254.0
Atlanta II 136.226.68.0/23
Traceback (most recent call last):
File "/Users/sergiogomez/Downloads/zscaler-Json/get-cidrv4.py",line 18,in <module>
net = IPv4Network(network_data.get('cidr'))
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/ipaddress.py",line 1505,in __init__
self.netmask,self._prefixlen = self._make_netmask(mask)
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/ipaddress.py",line 1170,in _make_netmask
prefixlen = cls._prefix_from_ip_string(arg)
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/ipaddress.py",line 518,in _prefix_from_ip_string
cls._report_invalid_netmask(ip_str)
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/ipaddress.py",line 474,in _report_invalid_netmask
raise NetmaskValueError(msg) from None
ipaddress.NetmaskValueError: '23 ' is not a valid netmask
注释掉最后两行,它会列出所有281个城市和网络
#net = IPv4Network(network_data.get('cidr'))
#print (net.network_address,'\n')
但需要将CIDR转换为子网
大家有什么建议吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。