Tôi đã viết một tiện ích để kiểm tra / Proc / net / tcp và tcp6 cho các kết nối hoạt động vì nó nhanh hơn so với phân tích đầu ra netstat.
Vì tôi không thực sự kích hoạt ipv6 nên tôi chủ yếu sử dụng localhost làm điểm tham chiếu. Đây là bản sao của tôi / 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
Đây là netstat phù hợp -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 -
Các mục nhập 0-3 từ tcp6 tương ứng với :: (tất cả ipv6), nhưng mục 4 được cho là mục tương ứng cho :: 1.
Đây là nơi tôi bối rối ...
00000000000000000000000001000000 => 0000: 0000: 0000: 0000: 0000: 0000: 0100: 0000 => :: 100: 0
Khi tôi chạy :: 1 thông qua một số mã để tạo đại diện hex đầy đủ, tôi nhận được:
import binascii
import socket
print binascii.hexlify(socket.inet_pton(socket.AF_INET6, '::1'))
00000000000000000000000000000001
Tôi không thể lập trình hai giá trị này theo cách lập trình, vì chúng không khớp (rõ ràng). Tại sao chúng không khớp? Tại sao kernel nghĩ :: 100: 0 là :: 1?