ฉันเขียนยูทิลิตี้เพื่อตรวจสอบ / 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 -
รายการ 0-3 จาก tcp6 สอดคล้องกับ :: (ipv6 ทั้งหมด) แต่รายการ 4 เป็นรายการที่สอดคล้องกันสำหรับ :: 1
ที่นี่ฉันสับสน ...
000000000000000000000000000001000000 => 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