2016-06-28 46 views

回答

10

使用netaddr

>>> from netaddr import IPAddress 
>>> IPAddress("255.255.255.0").netmask_bits() 
24 

你也可以做到不使用任何庫,只是在網絡掩碼的二進制表示計數1位:

>>> netmask = "255.255.255.0" 
>>> sum([bin(int(x)).count("1") for x in netmask.split(".")]) 
24 
+0

是否可以在一個班輪中完成反向即cidr到網絡掩碼? –

+1

@Bilal檢查這個[post](https://stackoverflow.com/q/23352028/244297)。 TLDR:'netmask ='。'。join([str((0xffffffff <<(32-prefix)>> i)&0xff)for [24,16,8,0]])'' –

2
>>> IPNetwork('0.0.0.0/255.255.255.0').prefixlen 
24 
0

使用以下功能。它速度快,可靠,而且不使用任何庫。

# code to convert netmask ip to cidr number 
def netmask_to_cidr(netmask): 
    ''' 
    :param netmask: netmask ip addr (eg: 255.255.255.0) 
    :return: equivalent cidr number to given netmask ip (eg: 24) 
    ''' 
    return sum([bin(int(x)).count('1') for x in netmask.split('.')])