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 : 0100 : 0000 => :: 100 : 0
전체 16 진수 표현을 생성하기 위해 일부 코드를 통해 :: 1을 실행하면 다음과 같은 결과를 얻습니다.
import binascii
import socket
print binascii.hexlify(socket.inet_pton(socket.AF_INET6, '::1'))
00000000000000000000000000000001
이 두 값이 (명확하게) 일치하지 않기 때문에 프로그래밍 방식 으로이 두 값을 정렬 할 수 없습니다. 왜 일치하지 않습니까? 커널이 :: 100 : 0이 :: 1이라고 생각하는 이유는 무엇입니까?