所有ip都在子网掩码范围内

问题描述 投票:0回答:1

我知道如何获得范围内的所有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中得到它?

python ip range subnet
1个回答
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')]
© www.soinside.com 2019 - 2024. All rights reserved.