Estaba escribiendo una utilidad para verificar / proc / net / tcp y tcp6 para conexiones activas, ya que es más rápido que analizar la salida de netstat.
Como en realidad no tengo habilitado ipv6, estaba utilizando principalmente localhost como mi punto de referencia. Aquí hay una copia de mi / proc / net / tcp6
sl local_address remote_address st tx_queue rx_queue tr tm->when retrnsmt uid timeout inode
0: 00000000000000000000000000000000:006F 00000000000000000000000000000000:0000 0A 00000000:00000000 00:00000000 00000000 0 0 19587 1 ffff880262630000 100 0 0 10 -1
1: 00000000000000000000000000000000:0050 00000000000000000000000000000000:0000 0A 00000000:00000000 00:00000000 00000000 0 0 22011 1 ffff880261c887c0 100 0 0 10 -1
2: 00000000000000000000000000000000:0016 00000000000000000000000000000000:0000 0A 00000000:00000000 00:00000000 00000000 0 0 21958 1 ffff880261c88000 100 0 0 10 -1
3: 00000000000000000000000001000000:0277 00000000000000000000000000000000:0000 0A 00000000:00000000 00:00000000 00000000 0 0 28592 1 ffff88024eea0000 100 0 0 10 -1
Aquí está el correspondiente netstat -6 -pant
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp6 0 0 :::111 :::* LISTEN -
tcp6 0 0 :::80 :::* LISTEN -
tcp6 0 0 :::22 :::* LISTEN -
tcp6 0 0 ::1:631 :::* LISTEN -
Las entradas 0-3 de tcp6 corresponden con los :: 's (todos ipv6), pero la entrada 4 es supuestamente la entrada correspondiente para :: 1.
Aquí es donde estoy confundido ...
00000000000000000000000001000000 => 0000: 0000: 0000: 0000: 0000: 0000: 0100: 0000 => :: 100: 0
Cuando ejecuto :: 1 a través de algún código para generar la representación hexadecimal completa obtengo:
import binascii
import socket
print binascii.hexlify(socket.inet_pton(socket.AF_INET6, '::1'))
00000000000000000000000000000001
No puedo alinear programáticamente estos dos valores, porque no coinciden (obviamente). ¿Por qué no coinciden? ¿Por qué piensa el núcleo :: 100: 0 es :: 1?