Python - ip <-> 子网匹配?

标签 python ip subnet

<分区>

Possible Duplicate:
How can I check if an ip is in a network in python

在 python 中将子网与 ip 地址匹配的简单方法是什么,以便如果 ip 地址在子网中我可以选择它?

提前致谢。

最佳答案

在 Python 3.3+ 中,您可以使用 ipaddress模块:

>>> import ipaddress
>>> ipaddress.ip_address('192.0.43.10') in ipaddress.ip_network('192.0.0.0/16')
True

如果您的 Python 安装版本早于 3.3,您可以使用 this backport .


如果您想以这种方式评估很多 IP 地址,您可能需要预先计算网络掩码,例如

n = ipaddress.ip_network('192.0.0.0/16')
netw = int(n.network_address)
mask = int(n.netmask)

然后,对于每个地址,用其中之一计算二进制表示

a = int(ipaddress.ip_address('192.0.43.10'))
a = struct.unpack('!I', socket.inet_pton(socket.AF_INET, '192.0.43.10'))[0]
a = struct.unpack('!I', socket.inet_aton('192.0.43.10'))[0]  # IPv4 only

最后,您可以简单地检查一下:

in_network = (a & mask) == netw

关于Python - ip <-> 子网匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9717089/

相关文章:

python - 在python多处理中查找异常

python - 用 pickle 加密

linux - IP添加路由不起作用

bash - 在两个 IPv4 地址之间以 CIDR 表示法查找 IPv4 网络的算法

python - 为什么在 Python 包中使用绝对导入而不是相对导入?

Python 标记化 : token position

networking - 将 L2TP 与 IPSec 一起使用有什么意义?

javascript - UrlFetchApp 请求在菜单功能中失败,但在自定义功能中没有(连接到外部 REST API)

amazon-web-services - AWS - 使用 EIP 访问私有(private)子网中的实例