Niestety różni się to w zależności od używanego systemu operacyjnego.
W systemie Microsoft Windows powiązanie gniazda ::
tylko z portami IPv6. Tak więc, aby wysłuchać wszystkich adresów na IPv4 i IPv6, trzeba wiązać się 0.0.0.0
jak ::
. Poniższy fragment pochodzi z systemu Vista:
C:\>netstat -an | find "445"
TCP 0.0.0.0:445 0.0.0.0:0 LISTENING
TCP [::]:445 [::]:0 LISTENING
Podany przykład to port 445, używany dla ruchu SMB, gdy NetBIOS nie jest używany. Jak widać, jest on wiążący dla obu 0.0.0.0
i ::
sprawia, że odpowiednio działają zarówno klienci IPv4, jak i IPv6.
W systemie Linux ::
zawiera adresy zgodne z IPv4, jak poprawnie zgadłeś, więc powiązanie z nimi 0.0.0.0
również nie jest konieczne. Napisałem prosty program w języku Python, który wiąże się tylko z AF_INET6
gniazdem ::
. Mimo że nie powiązałem również z AF_INET
gniazdem (IPv4), nadal przyjmuje połączenia od klientów IPv4. Jeśli, powiedzmy, 10.1.1.3
łączy się z nim, pojawi się jako połączenie z ::ffff:10.1.1.3
.
Tyle że robi się owłosiony. Powyższe nie dotyczy Linuksa, jeśli /proc/sys/net/ipv6/bindv6only
jest ustawione na 1
, w takim przypadku zachowanie jest dokładnie takie samo jak Windows - powiązanie z ::
nasłuchuje tylko żądań IPv6. Jeśli chcesz nasłuchiwać również żądań IPv4, musisz utworzyć AF_INET
gniazdo i nasłuchiwać 0.0.0.0
. Na szczęście domyślną wartością bindv6only
jest 0
, więc istnieje bardzo niewielka szansa, że kiedykolwiek będziesz musiał sobie z tym poradzić (z wyjątkiem sytuacji, gdy używasz Debiana, który tak naprawdę jest domyślnie ustawiony bindv6only = 1
).
Wszystko to jest przydatne przy sprawdzaniu, czy usługa obsługuje IPv6 i czy obsługuje również IPv4. Oto mój serwer SSH:
$ netstat -64ln | grep 22
tcp6 0 0 :::22 :::* LISTEN
Jak widać, SSH nasłuchuje tylko na ::
porcie 22. Jednak nie tylko nasłuchuje klientów IPv6 - działa dobrze z klientami IPv4, ze względu na powiązanie kompatybilne z IPv4. Aby to udowodnić, jeśli spojrzysz na to:
$ cat /proc/sys/net/ipv6/bindv6only
0
bindv6only
jest wyłączone (domyślne). Gdyby to było ustawione 1
, musiałbym zachęcić SSH również do słuchania 0.0.0.0
(lub zamiast tego).
Przepraszamy za brak informacji po stronie Mac OS X. Używałem go w przeszłości, ale wolę estetykę GNOME, więc nie używałem go od bardzo dawna. Jednak zgaduję, że zachowanie jest takie samo jak w Linuksie.
Mam nadzieję że to pomoże.