2012-05-30 28 views
5

我正在使用python-netaddr库来处理IP地址和子网。我读了netaddrd的完整文档:Netaddr documentation。但没有找到任何解决我的问题。我有一个IP地址和子网,我想通过使用它们来获得该IP的前缀。这样我可以打印所有进入子网的IP。如何获取IP前缀,而我们有子网和IPv4地址使用python-netaddr?

例如:

Ip Address: 192.0.2.0 
Subnet Network: 255.255.255.0 

It should return the prefix which is : 24 
+0

24从哪里来? – Oliver

+0

您是否尝试过'ip地址( '192.0.2.0/255.255.255.0')'?您可以获取该子网中所有地址的列表,并在链接到的文档中提供一个示例。 –

+0

'/ 24'是代表掩码'255.255.255.0'的一种方式,它也是'11111111.11111111.11111111.00000000' –

回答

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) 
0
def getPrefix(binary): 
    prefixCount=0 
    for i in (str(binary)): 
     if(i == '1'): 
      prefixCount+=1 
    return prefixCount 

如果子网被转换成二进制格式并在输入中给出,这将返回你的“Prefixcount”。

2

对于给定的掩码,我们可以与下面的功能得到了前缀:

def getPrefix(mask): 
    prefix = sum([bin(int(x)).count('1') for x in mask.split('.')]) 
    return prefix 
0

的子网掩码为:255.255.255.0 这是我如何C时:1。 1。 1. 0

255是所有的8位打开。即。 ALL 1的。并且0是所有的8位被关闭。 如果你看这个子网掩码[255.255.255.0],前3个字节全部变为'ON',而最后一个字节变为'OFF'。
因此,在这种情况下,计算所有在这种情况下ON的八位组,3个八位组 ,我们可以这样说:255.255.255.0 1。 1。 1.0 8 + 8 + 8 + 0 = 24

+0

似乎你可以将它分开,“按位加法”并加入它。 – woot