Dies hängt leider davon ab, welches Betriebssystem Sie verwenden.
Unter Microsoft Windows wird das Binden eines Sockets ::
nur an die IPv6-Ports gebunden . Um also alle Adressen auf IPv4 und IPv6 abzuhören, müssen Sie sich sowohl an 0.0.0.0
als auch an binden ::
. Der folgende Auszug stammt aus einer Vista-Box:
C:\>netstat -an | find "445"
TCP 0.0.0.0:445 0.0.0.0:0 LISTENING
TCP [::]:445 [::]:0 LISTENING
Das Beispiel, das ich gebe, ist Port 445, der für SMB-Verkehr verwendet wird, wenn NetBIOS nicht verwendet wird. Wie Sie sehen, ist es für beide verbindlich 0.0.0.0
und ::
bewirkt, dass sowohl IPv4- als auch IPv6-Clients funktionieren.
Unter Linux sind ::
die IPv4-kompatiblen Adressen enthalten, wie Sie richtig erraten haben, sodass eine Bindung 0.0.0.0
auch nicht erforderlich ist. Ich habe ein einfaches Python-Programm geschrieben, das nur an einen AF_INET6
Socket gebunden ist ::
. Obwohl ich nicht auch an einen AF_INET
(IPv4) -Socket gebunden habe, werden weiterhin Verbindungen von IPv4-Clients akzeptiert. Wenn 10.1.1.3
beispielsweise eine Verbindung hergestellt wird, wird diese als Verbindung von angezeigt ::ffff:10.1.1.3
.
Nur dass es haarig wird. Das oben Gesagte gilt nicht für Linux, wenn /proc/sys/net/ipv6/bindv6only
eingestellt 1
ist. In diesem Fall ist das Verhalten genau das gleiche wie bei Windows. Bei der Bindung an ::
werden nur IPv6-Anforderungen abgehört. Wenn Sie auch auf IPv4-Anforderungen warten möchten, müssen Sie einen AF_INET
Socket erstellen und ebenfalls abhören 0.0.0.0
. Zum Glück für den Standard bindv6only
ist 0
, so ist es eine sehr geringe Chance , Sie überhaupt damit umgehen werden (außer wenn Sie verwenden Debian, die eigentlich standardmäßig bindv6only = 1
).
All dies ist hilfreich, um zu überprüfen, ob ein Dienst IPv6-fähig ist und ob er auch IPv4-fähig ist. Hier ist mein SSH-Server:
$ netstat -64ln | grep 22
tcp6 0 0 :::22 :::* LISTEN
Wie Sie sehen, überwacht SSH nur ::
Port 22. Es überwacht jedoch nicht nur IPv6-Clients, sondern funktioniert aufgrund der IPv4-kompatiblen Bindung auch problemlos von IPv4-Clients. Um dies zu beweisen, wenn Sie sich das ansehen:
$ cat /proc/sys/net/ipv6/bindv6only
0
bindv6only
ist deaktiviert (Standardeinstellung). Wenn das so eingestellt 1
wäre, müsste ich SSH ermutigen, auch zuzuhören 0.0.0.0
(oder stattdessen).
Entschuldigung, dass Sie keine Informationen auf der Mac OS X-Seite haben. Ich habe es in der Vergangenheit benutzt, aber ich bevorzuge die Ästhetik von GNOME, deshalb habe ich es lange nicht mehr benutzt. Ich würde jedoch vermuten, dass das Verhalten das gleiche ist wie das von Linux.
Hoffe das hilft.