2012-05-30 21 views
5

Używam biblioteki python-netaddr do pracy na adresach IP i podsieciach. Przeczytałem pełną dokumentację netaddrd podaną: Netaddr documentation. Ale nie znalazłem żadnego rozwiązania mojego problemu. Mam adres IP i podsieć, chcę uzyskać prefiks dla tego adresu IP, używając obu. Tak, że mogę wydrukować wszystkie IP przychodzące do podsieci.Jak uzyskać prefiks IP, gdy mamy podsieci i adres IPv4 przy użyciu python-netaddr?

Na przykład:

Ip Address: 192.0.2.0 
Subnet Network: 255.255.255.0 

It should return the prefix which is : 24 
+0

Skąd się bierze 24? – Oliver

+0

Czy próbowałeś np. 'IPAddress ('192.0.2.0/255.255.255.0')'? Możesz uzyskać listę wszystkich adresów w tej podsieci, na przykład w dokumentacji, z którą łączyłeś się. –

+0

Czy '/ 24' jest sposobem reprezentowania maski' 255.255.255.0', która jest także '11111111.11111111.11111111.00000000' –

Odpowiedz

6

dostać 24 można użyć poniższy urywek

ip = IPNetwork('192.0.2.0/255.255.255.0') 
print ip.prefixlen 

Ale jeśli chcesz listę wszystkich adresów w podsieci jest to łatwiejsze w użyciu:

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 

Zwróci to twoją "Prefixcount", jeśli podsieć zostanie przekształcona na format binarny i podana na wejściu.

2

Dzięki danym maskę sieci możemy uzyskać prefiks z funkcji poniżej:

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

SubnetMask to: 255.255.255.0 ten sposób I C to: 1. 1. 1. 0

255 jest WSZYSTKIE 8-bitowe są włączone. to znaczy. WSZYSTKIE 1. A 0 oznacza WSZYSTKIE 8-bitowe są wyłączone. jeśli spojrzysz na tę podsieć maski [255.255.255.0], pierwsze 3 oktety są WSZYSTKIE włączone, a ostatni oktet jest wyłączony.
Tak więc, licząc wszystkie oktety, które są w tym przypadku włączone, 3 oktety możemy powiedzieć: 255.255.255.0 1. 1. 1 .0 8 + 8 + 8 + 0 = 24

+0

Wygląda na to, że można go podzielić, "bitwise" i "dołączyć". – woot