蛮力方法:
from ipaddr import IPv4Network
n = IPv4Network('10.10.128.0/17')
all = list(n.iterhosts()) # will give me all hosts in network
first,last = all[0],all[-1] # first and last IP
我想知道如何从CIDR获取第一个和最后一个IP地址,而不必遍历可能非常大的列表来获取第一个和最后一个元素?
我想要这个,然后可以使用以下内容在此范围内生成一个随机IP地址:
socket.inet_ntoa(struct.pack('>I', random.randint(int(first),int(last))))
也许改为尝试netaddr,尤其是索引部分。
https://pythonhosted.org/netaddr/tutorial_01.html#indexing
from netaddr import *
import pprint
ip = IPNetwork('10.10.128.0/17')
print "ip.cidr = %s" % ip.cidr
print "ip.first.ip = %s" % ip[0]
print "ip.last.ip = %s" % ip[-1]
糟糕...看起来ipaddr模块也支持此方法!我应该尝试过的。我使用ipaddr而不是netaddr,因为我发现前者在检查重叠的CIDR方面具有更可靠的操作。