如何使用python-netaddr获取子网和IPv4地址时的IP前缀?

时间:2012-05-30 09:24:09

标签: python ip python-2.7 ip-address inetaddress

我正在使用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

4 个答案:

答案 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