我正在使用 python-netaddr 库来处理 IP 地址和子网。我阅读了完整的 netaddrd 文档:Netaddr 文档。但没有找到任何解决我的问题的方法。我有一个 IP 地址和子网,我想通过使用它们来获取该 IP 的前缀。这样我就可以打印所有进入子网的 ip。
例如:
Ip Address: 192.0.2.0
Subnet Network: 255.255.255.0
It should return the prefix which is : 24
我正在使用 python-netaddr 库来处理 IP 地址和子网。我阅读了完整的 netaddrd 文档:Netaddr 文档。但没有找到任何解决我的问题的方法。我有一个 IP 地址和子网,我想通过使用它们来获取该 IP 的前缀。这样我就可以打印所有进入子网的 ip。
例如:
Ip Address: 192.0.2.0
Subnet Network: 255.255.255.0
It should return the prefix which is : 24
要获得 24,您可以使用以下代码段
ip = IPNetwork('192.0.2.0/255.255.255.0')
print ip.prefixlen
但是,如果您想要子网中所有地址的列表,则使用起来更容易:
ip = IPNetwork('192.0.2.0/255.255.255.0')
list(ip)
使用给定的网络掩码,我们可以使用以下函数获取前缀:
def getPrefix(mask):
prefix = sum([bin(int(x)).count('1') for x in mask.split('.')])
return prefix
def getPrefix(binary):
prefixCount=0
for i in (str(binary)):
if(i == '1'):
prefixCount+=1
return prefixCount
如果子网转换为二进制格式并在输入中给出,这将返回您的“前缀计数”。
子网掩码是:255.255.255.0 这就是 ic it:1。1. 1. 0
255 是所有 8 位都打开。IE。全部为 1。0 是所有 8 位都关闭。如果您查看此子网掩码 [255.255.255.0],前 3 个八位字节全部变为“开启”,而最后一个八位字节变为“关闭”。
因此,计算在这种情况下为 ON 的所有八位字节,我们可以说 3 个八位字节: 255.255.255.0 1 。1. 1 .0 8 + 8 + 8 + 0 =24