Infelizmente, isso varia dependendo do sistema operacional que você está usando.
No Microsoft Windows, a ligação de um soquete ::
só se vincula às portas IPv6. Portanto, para ouvir todos os endereços no IPv4 e no IPv6, é necessário vincular-se a ele 0.0.0.0
também ::
. O seguinte extrato é de uma caixa do Vista:
C:\>netstat -an | find "445"
TCP 0.0.0.0:445 0.0.0.0:0 LISTENING
TCP [::]:445 [::]:0 LISTENING
O exemplo que dou é a porta 445, usada para tráfego SMB quando o NetBIOS não é usado. Como você pode ver, ele é obrigatório para os dois 0.0.0.0
e ::
para fazer, respectivamente, os clientes IPv4 e IPv6 funcionarem.
No Linux, ::
inclui os endereços compatíveis com IPv4, como você adivinhou corretamente, portanto, a ligação 0.0.0.0
também é desnecessária. Eu escrevi um programa Python simples que só se liga a um AF_INET6
soquete ::
. Embora eu também não tenha se vinculado a um AF_INET
soquete (IPv4), ele ainda aceita conexões de clientes IPv4. Se, digamos, se 10.1.1.3
conectar a ele, ele aparecerá como se conectando ::ffff:10.1.1.3
.
Exceto que fica peludo. O item acima não se aplica ao Linux se /proc/sys/net/ipv6/bindv6only
estiver definido como 1
; nesse caso, o comportamento é exatamente o mesmo que o do Windows - a ligação ::
só atenderá solicitações IPv6. Se você quiser escutar solicitações IPv4 também, precisará criar um AF_INET
soquete e escutar 0.0.0.0
também. Felizmente, o padrão para bindv6only
é 0
, então há uma chance muito pequena de você lidar com isso (exceto se você usar o Debian, que na verdade é o padrão bindv6only = 1
).
Tudo isso é útil para verificar se um serviço está habilitado para IPv6 e se também está habilitado para IPv4. Aqui está o meu servidor SSH:
$ netstat -64ln | grep 22
tcp6 0 0 :::22 :::* LISTEN
Como você pode ver, o SSH está apenas ouvindo na ::
porta 22. No entanto, não está apenas ouvindo clientes IPv6 - funciona bem nos clientes IPv4, devido à ligação compatível com IPv4. Para provar isso, se você olhar para isso:
$ cat /proc/sys/net/ipv6/bindv6only
0
bindv6only
está desativado (o padrão). Se isso fosse definido 1
, eu teria que incentivar o SSH a ouvir 0.0.0.0
também (ou melhor).
Desculpas por não ter informações sobre o lado do Mac OS X. Eu o usei no passado, mas prefiro a estética do GNOME, por isso não o uso há muito tempo. No entanto, eu acho que o comportamento é o mesmo do Linux.
Espero que isto ajude.