【发布时间】:2020-12-21 23:14:52
【问题描述】:
我正在尝试编写一个 Python 脚本来将两个 IP 地址之间的范围转换为 CIDR,
# cidr.py
import argparse
import netaddr
import sys
parser = argparse.ArgumentParser()
parser.add_argument('start_addr')
parser.add_argument('end_addr')
args = parser.parse_args()
start_addr = netaddr.IPAddress(args.start_addr)
end_addr = netaddr.IPAddress(args.end_addr)
if end_addr < start_addr:
print('start address is larger than end address. check arguments.')
sys.exit()
ip_cidr = netaddr.iprange_to_cidrs(start_addr, end_addr)
print(str(ip_cidr))
例如,使用Salesforce's IP address range 作为参数执行此脚本, 它返回正确的 CIDR 表达式。
$ python cidr.py 13.108.0.0 13.111.255.255
[IPNetwork('13.108.0.0/14')]
但是当我修改第二个参数时,它会返回几个 CIDR。
$ python hoge.py 13.108.0.0 13.211.255.255
[IPNetwork('13.108.0.0/14'), IPNetwork('13.112.0.0/12'), IPNetwork('13.128.0.0/10'), IPNetwork('13.192.0.0/12'), IPNetwork('13.208.0.0/14')]
我想知道 2 个 IP 地址的地址范围只包含 1 个 CIDR 表达式。 如何查看?
【问题讨论】:
-
您在问列表的长度是否为 1?您可能需要
len函数... -
@alani 是的,我可以使用
len检查列表的长度,但我不确定ip_cidr[0]总是返回带有第一个参数的IP 地址的CIDR。在这种情况下,13.108.0.0/14.
标签: python network-programming ip-address cidr