Sfortunatamente, questo differisce a seconda del sistema operativo in uso.
Su Microsoft Windows, l'associazione di un socket ::
si lega solo alle porte IPv6. Così in ascolto su tutti gli indirizzi in IPv4 e IPv6, è necessario legano al 0.0.0.0
così come ::
. Il seguente estratto proviene da una scatola di Vista:
C:\>netstat -an | find "445"
TCP 0.0.0.0:445 0.0.0.0:0 LISTENING
TCP [::]:445 [::]:0 LISTENING
L'esempio che do è la porta 445, utilizzata per il traffico SMB quando NetBIOS non viene utilizzato. Come puoi vedere, è vincolante per entrambi 0.0.0.0
e ::
per far funzionare rispettivamente i client IPv4 e IPv6.
Su Linux, ::
è comprensivo degli indirizzi compatibili con IPv4, come hai indovinato, quindi 0.0.0.0
non è necessario eseguire il binding . Ho scritto un semplice programma Python che si lega solo a un AF_INET6
socket ::
. Anche se non mi sono nemmeno associato a un AF_INET
socket (IPv4), accetta comunque connessioni dai client IPv4. Se, diciamo, si 10.1.1.3
connette ad esso, verrà visualizzato come connessione da ::ffff:10.1.1.3
.
Solo che diventa peloso. Quanto sopra non si applica su Linux se /proc/sys/net/ipv6/bindv6only
è impostato su 1
, nel qual caso il comportamento è esattamente lo stesso di Windows - il binding a ::
ascolterà solo le richieste IPv6. Se vuoi ascoltare anche le richieste IPv4, dovrai creare un AF_INET
socket e anche ascoltare 0.0.0.0
. Fortunatamente, il valore predefinito bindv6only
è 0
, quindi c'è una probabilità molto ridotta che tu abbia mai a che fare con questo (tranne se usi Debian, che in realtà è predefinito bindv6only = 1
).
Tutto ciò è utile da sapere per verificare se un servizio è abilitato per IPv6 e se è abilitato anche per IPv4. Ecco il mio server SSH:
$ netstat -64ln | grep 22
tcp6 0 0 :::22 :::* LISTEN
Come puoi vedere, SSH è in ascolto solo sulla ::
porta 22. Tuttavia, non sta solo ascoltando i client IPv6, ma funziona bene dai client IPv4, a causa dell'associazione compatibile IPv4. Per dimostrarlo, se guardi questo:
$ cat /proc/sys/net/ipv6/bindv6only
0
bindv6only
è disabilitato (impostazione predefinita). Se fosse impostato su 1
, allora dovrei incoraggiare SSH ad ascoltare 0.0.0.0
anche (o invece).
Ci scusiamo per non avere informazioni sul lato Mac OS X delle cose. L'ho usato in passato, ma preferisco l'estetica di GNOME, quindi non lo uso da molto tempo. Tuttavia, immagino che il comportamento sia lo stesso di quello di Linux.
Spero che sia di aiuto.