netstat出力を解析するよりも高速であるため、アクティブな接続について/ proc / net / tcpおよびtcp6をチェックするユーティリティを作成していました。
実際には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:0000:0100:0000 => :: 100:0
完全な16進表現を生成するためにコードを介して:: 1を実行すると、次のようになります。
import binascii
import socket
print binascii.hexlify(socket.inet_pton(socket.AF_INET6, '::1'))
00000000000000000000000000000001
(明らかに)一致しないため、これら2つの値をプログラムで並べることはできません。なぜ一致しないのですか?なぜカーネルは:: 100:0が:: 1であると考えるのですか?