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 (将#修改为@)