2012-05-30 88 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