python determina IPv6 o IPv4 inet
Cómo convertir direcciones ipv4 e ipv6 en la solución Python.
Cómo convertir direcciones ipv4 e ipv6 en la solución Python. Para comprender la traducción de direcciones ipv4 e ipv6, primero debe comprender su concepto.
En pocas palabras, ¿qué son las direcciones IPv4 e IPv6?
IPv4: es la cuarta versión del Protocolo de Internet y el primer protocolo ampliamente utilizado y es la base de la Internet actual. tecnología;
IPv6: Es el protocolo IP de próxima generación, diseñado por Internet Engineering Task Force para reemplazar la versión actual de IPv4;
El número de versión actual del protocolo IP es IPv4. La próxima versión es IPv6.
Una solución de Python sobre cómo convertir direcciones IPv4 e IPv6, el código fuente es el siguiente: (requiere twisted.python.compat y struct y el método de socket de python)
import struct, socket
#import twisted.python.compat ?#import twisted.python.compat es más simple
# dirección numérica ipv4
def ipv4_too_string(ipv4):
ipv4_n = socket.htonl(ipv4)
data = struct.pack( 'I', ipv4_n)
ipv4_string = socket.inet_ntop(ipv4_n) p>
data = struct.pack( 'I', ipv4_n)
ipv4_string = socket.inet_ntop(ipv4_n)
devuelve ipv4
def ipv4_readable2int (ipv4):
return int(ipv4)
def ipv4_int2readable(ipv4):
return str(ipv4)
# ipv6 se expresa como cuatro números enteros (tupla o cadena separada por,)
def ipv6_to_string(ipv6):
ipv6_n = (socket.
socket.htonl( ipv6 [2]),
socket.htonl(ipv6[3]))
data = struct.pack('IIII', ipv6_n[0], ipv6_n[1], ipv6_n [2], ipv6_n[3])
ipv6_string = socket.inet_ntop(socket.AF_INET6, datos).
AF_INET6, datos)
return ipv6_string
def ipv6_from_string(ipv6_string):
datos = socket.inet_pton(socket.AF_INET6, ipv6_string)
ipv6_n = struct.ntohl(ipv6_n[3]))
return ipv6
def ipv6_ tuple2readable(ipv6):
return str(ipv6[0 ]) + ',' + str(ipv6[1]) + ',' + str(ipv6[2]) + ',' + str(ipv6[3])
def ipv6_readable2tuple( ipv6) :
return tuple(ipv6.split(','))
#Implementación de inet_pton e inet_ntop en Win32
def inet_ntop(family, ipstr):
if family== socket.AF_INET:
devolver socket.inet_ntoa(ipstr)
elif family== socket.AF_INET6:
v6addr = ':'.join((('%02X%02X' % (ord(i), ord(j)))
para i,j en zip(ipstr[::2] , ipstr[1::2]))
return v6addr
#www.iplaypy.com
def inet_pton(familia, dirección):
if familia== socket.AF_INET:
return socket.inet_aton(addr)
elif familia== socket.AF_INET6:
if ' .' en dirección: # una dirección v4
v4addr = addr[addr.rindex(':')+1:]
v4addr = socket.inet_aton(v4addr)
v4addr = map(lambda x: ('%02X' % ord( x)), v4addr)
v4addr.insert(2, ':')
newaddr = addr[:addr.rindex(':')+1] + ''.join(v4addr)
return inet_pton(family, newaddr)
dbyts = [0]* 8 # 8 grupos
grps = addr.split(':')
para i,v en enumerate(grps):
si v:< / p>
dbyts[i] = int(v, 16)
else:
para j, w en enumerate(grps[::-1]):
si w:
dbyts[7-j] = int(w, 16)
si no:
romper
romper
return ''.join( (chr(i//256) + chr(
i%256)) para i en dbyts)
else:
raise RuntimeError("¿Qué familia?").