我正在使用python-netaddr库来处理IP地址和子网。我阅读了netaddrd的完整文档:Netaddr documentation。但没有找到解决我问题的方法。我有一个IP地址和子网我想通过使用它们获得该IP的前缀。这样我就可以打印所有进入子网的ip。
例如:
Ip Address: 192.0.2.0
Subnet Network: 255.255.255.0
It should return the prefix which is : 24
答案 0 :(得分:6)
要获得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)
答案 1 :(得分:3)
使用给定的Netmask,我们可以使用以下函数获取前缀:
def getPrefix(mask):
prefix = sum([bin(int(x)).count('1') for x in mask.split('.')])
return prefix
答案 2 :(得分:0)
def getPrefix(binary):
prefixCount=0
for i in (str(binary)):
if(i == '1'):
prefixCount+=1
return prefixCount
如果将子网转换为二进制格式并在输入中给出,则会返回“Prefixcount”。
答案 3 :(得分:0)
子网掩码是:255.255.255.0 这就是我的意思:1。 1。 1. 0
255是所有8位都打开。即。所有1。并且0表示所有8位都被关闭。 如果你看一下这个子网掩码[255.255.255.0],前3个八位字节全部被打开' ON'而最后一个八位字节被关闭'关闭' 因此,计算在这种情况下为ON的所有八位字节,3个八位字节 我们可以说:255.255.255.0 1。 1。 1.0 8 + 8 + 8 + 0 = 24