Pisałem narzędzie do sprawdzania / proc / net / tcp i tcp6 pod kątem aktywnych połączeń, ponieważ jest szybsze niż parsowanie danych wyjściowych netstat.
Ponieważ tak naprawdę nie mam włączonej obsługi IPv6, użyłem głównie hosta lokalnego jako punktu odniesienia. Oto kopia mojego / 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
Oto pasujący 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 -
Wpisy 0-3 z tcp6 odpowiadają :: :: (wszystkie ipv6), ale pozycja 4 jest podobno odpowiednim wpisem dla :: 1.
Tutaj jestem zdezorientowany ...
00000000000000000000000001000000 => 0000: 0000: 0000: 0000: 0000: 0000: 0100: 0000 => :: 100: 0
Kiedy uruchamiam :: 1 przez jakiś kod, aby wygenerować pełną reprezentację szesnastkową, otrzymuję:
import binascii
import socket
print binascii.hexlify(socket.inet_pton(socket.AF_INET6, '::1'))
00000000000000000000000000000001
Nie mogę programowo wyrównać tych dwóch wartości, ponieważ nie pasują one (oczywiście). Dlaczego się nie zgadzają? Dlaczego jądro myśli :: 100: 0 to :: 1?