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

标签 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 地址,而不必遍历一个可能非常大的列表来获取第一个和最后一个元素?

我想要这个,这样我就可以使用这样的东西在这个范围内生成一个随机的 ip 地址:

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

最佳答案

从 Python 3.3 开始,您可以使用 ipaddress module

你可以这样使用它:

import ipaddress

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

__getitem__ 已实现,因此不会生成任何大列表。

https://github.com/python/cpython/blob/3.6/Lib/ipaddress.py#L634

关于python - 如何使用 ipaddr 模块获取 CIDR 的第一个/最后一个 IP 地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40368816/

相关文章:

python - 生成有效 IP 地址列表并在 Python Selenium 循环中随机使用

Cidr 阻止 AWS 解释

python - 在 Pandas 中合并两个数据帧时如何 'fuzzy'匹配字符串

python - 我如何证明某些数据来 self 的应用程序?

python - in line.split ('+' )[-1] 方括号中的-1在Python中表示什么

c - 在C语言中将IP地址截断为/24的最简单方法是什么?

php - 查找通过代理连接的客户端的 IP 地址

python - 您可以使用 Python-docx 在同一运行中的段落部分下划线吗?

java - CIDR 表示法和 IP 范围 validator 模式

ruby-on-rails - Ruby/Rails 中 CIDR 的 IP 范围?