Python 如何使用ipaddr模块获取CIDR的第一个/最后一个IP地址

Python 如何使用ipaddr模块获取CIDR的第一个/最后一个IP地址,python,ip-address,cidr,Python,Ip Address,Cidr,暴力方法: 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地址,而不必迭代一个可能非常大的列表来获取第一个和最后一个元素 我想要这个,这样我就可以

暴力方法:

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))))
import ipaddress

n = ipaddress.IPv4Network('10.10.128.0/17')
first, last = n[0], n[-1]

也许可以试试NetAddress,尤其是索引部分


在Python3.3中,您可以使用

您可以这样使用它:

socket.inet_ntoa(struct.pack('>I', random.randint(int(first),int(last))))
import ipaddress

n = ipaddress.IPv4Network('10.10.128.0/17')
first, last = n[0], n[-1]
\uuuu getitem\uuuu
已实现,因此它不会生成任何大型列表


python 3 ipaddress模块是更优雅的解决方案,imho。顺便说一句,它工作正常,但ipaddress模块并没有返回索引[0,-1]处的第一个和最后一个空闲ip地址,而是分别返回网络地址和广播地址

第一个和最后一个自由和可分配的地址是

导入IP地址
n=ipaddress.ipv4网络('10.10.128.0/17')
第一,最后=n[1],n[-2]

将返回10.10.128.1作为第一个和10.10.255.254而不是10.10.128.0和10.10.255.255

Oops…看起来ipaddr模块也支持此方法!我应该试试看。我使用IPADR而不是NetADR,因为我发现前者在检查重叠的CIDR时有更可靠的操作。