我知道如何获得范围内的所有IP
from netaddr import iter_iprange
generator = iter_iprange('192.168.1.1', '192.168.255.255', step=1)
我想要的是用某个IP获取所有修复了子网掩码的IP。
例如,我得到了IP 2.2.2.2和掩码255:255:255:0,所以我希望获得255个IP地址2.2.2.2-2.2.2.255,但是如果子网掩码是255.255.255.254,则没有解决该问题的IP对此
如何在python中得到它?
答案 0 :(得分:0)
您可以使用IPNetwork:
from netaddr import IPNetwork
ip_addr = '2.2.2.2'
mask = '255.255.255.0'
network = IPNetwork('/'.join([ip_addr, mask]))
generator = network.iter_hosts()
注意:2.2.2.2/255.255.255.0
等效于CIDR 2.2.2.0/24
,两者都适用于IPNetwork
。
转换为您得到的列表:
In []:
list(generator)
Out[]:
[IPAddress('2.2.2.1'),
IPAddress('2.2.2.2'),
IPAddress('2.2.2.3'),
...
IPAddress('2.2.2.252'),
IPAddress('2.2.2.253'),
IPAddress('2.2.2.254')]
根据netaddr.iter_host
文档:
- 对于IPv4,始终排除网络和广播地址。对于包含少于4个IP地址/ 31和/ 32的子网,按照RFC 3021的方式报告
RFC 3021说:
在与 一个31位的子网掩码,必须将上述两个地址解释为 主机地址。
因此,报告了两个掩码为255.255.255.254
的IP地址:
In []:
mask = '255.255.255.254'
list(IPNetwork('/'.join([ip_addr, mask])).iter_hosts())
Out[]:
[IPAddress('2.2.2.2'), IPAddress('2.2.2.3')]