Red de conocimiento informático - Problemas con los teléfonos móviles - python determina IPv6 o IPv4 inet

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)

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?").