我正在编写一个实用程序来检查/ proc / net / tcp和tcp6是否有活动连接,因为它比解析netstat输出更快。
因为我实际上没有启用ipv6,所以我主要是使用localhost作为参考点。这是我的/ 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
这是匹配的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 -
tcp6的条目0-3与::对应(所有ipv6),但是条目4应该是:: 1的对应条目。
这是我很困惑的地方...
00000000000000000000000001000000 => 0000:0000:0000:0000:0000:0000:0100:0000 => :: 100:0
当我通过一些代码运行:: 1以生成完整的十六进制表示时,我得到:
import binascii
import socket
print binascii.hexlify(socket.inet_pton(socket.AF_INET6, '::1'))
00000000000000000000000000000001
我无法以编程方式将这两个值对齐,因为它们不匹配(很明显)。他们为什么不匹配?为什么内核认为:: 100:0是:: 1?