2012-05-30 21 views
5

Sto usando la libreria python-netaddr per lavorare su indirizzi IP e sottoreti. Ho letto la documentazione completa di netaddrd fornita: Netaddr documentation. Ma non ho trovato alcuna soluzione al mio problema. Ho un indirizzo IP e subnet voglio ottenere il prefisso per quell'ip utilizzando entrambi. In modo che io possa stampare tutti gli IP che entrano nella sottorete.Come ottenere il prefisso IP mentre abbiamo subnet e indirizzo IPv4 usando python-netaddr?

Ad esempio:

Ip Address: 192.0.2.0 
Subnet Network: 255.255.255.0 

It should return the prefix which is : 24 
+0

Da dove viene 24? – Oliver

+0

Hai provato ad es. 'IPAddress ('192.0.2.0/255.255.255.0')'? È possibile ottenere un elenco di tutti gli indirizzi in quella sottorete, con un esempio nella documentazione a cui si è collegati. –

+0

'/ 24' è un modo di rappresentare la maschera' 255.255.255.0' che è anche '11111111.11111111.11111111.00000000' –

risposta

6

Per ottenere 24 è possibile utilizzare il seguente frammento

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

Ma se si desidera l'elenco di tutti gli indirizzi nella sottorete è più facile da usare:

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 

Ciò restituirebbe il "Prefixcount" se la subnet viene convertita in formato binario e data in input.

2

Con un dato Netmask possiamo ottenere il prefisso con la funzione di seguito:

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

La maschera di sottorete è: 255.255.255.0 Questo è come i c è: 1. 1. 1. 0

255 è TUTTI gli 8 bit sono attivati. vale a dire. TUTTI I 1. E 0 è TUTTI gli 8 bit sono disattivati. se si guarda questa subnet mask [255.255.255.0], i primi 3 ottetti sono TUTTI su "ON" mentre l'ultimo ottetto è su "OFF".
Quindi, contando tutti gli ottetti che sono ON in questo caso, 3 ottetti possiamo dire: 255.255.255.0 1. 1. 1 .0 8 + 8 + 8 + 0 = 24

+0

Sembra che tu possa dividerlo, 'bitwise-and' esso e unirlo indietro. – woot

Problemi correlati