Thật không may, điều này khác nhau tùy thuộc vào hệ điều hành bạn đang sử dụng.
Trên Microsoft Windows, liên kết một ổ cắm ::
chỉ liên kết với các cổng IPv6. Vì vậy, để lắng nghe trên tất cả các địa chỉ trên cả IPv4 và IPv6, bạn cần phải bám vào 0.0.0.0
cũng như ::
. Các trích xuất sau đây là từ một hộp Vista:
C:\>netstat -an | find "445"
TCP 0.0.0.0:445 0.0.0.0:0 LISTENING
TCP [::]:445 [::]:0 LISTENING
Ví dụ tôi đưa ra là cổng 445, được sử dụng cho lưu lượng SMB khi NetBIOS không được sử dụng. Như bạn có thể thấy, nó liên kết với cả hai 0.0.0.0
và ::
để thực hiện, tương ứng, cả máy khách IPv4 và IPv6 đều hoạt động.
Trên Linux, đã ::
bao gồm các địa chỉ tương thích với IPv4, như bạn đã đoán chính xác, do đó, việc ràng buộc 0.0.0.0
cũng là không cần thiết. Tôi đã viết một chương trình Python đơn giản chỉ liên kết với một AF_INET6
socket trên ::
. Mặc dù tôi cũng không liên kết với một AF_INET
ổ cắm (IPv4), nó vẫn chấp nhận các kết nối từ các máy khách IPv4. Nếu, nói, 10.1.1.3
kết nối với nó, nó sẽ hiển thị như kết nối từ ::ffff:10.1.1.3
.
Ngoại trừ việc nó có lông. Ở trên không áp dụng trên Linux nếu /proc/sys/net/ipv6/bindv6only
được đặt thành 1
, trong trường hợp đó, hành vi hoàn toàn giống với Windows - ràng buộc ::
sẽ chỉ lắng nghe các yêu cầu IPv6. Nếu bạn cũng muốn nghe các yêu cầu IPv4, bạn sẽ cần phải tạo một AF_INET
ổ cắm và cũng nghe 0.0.0.0
theo. May mắn thay, mặc định bindv6only
là 0
, vì vậy có một cơ hội rất nhỏ bạn sẽ phải đối phó với điều này (trừ khi bạn sử dụng Debian, thứ thực sự mặc định bindv6only = 1
).
Tất cả điều này rất hữu ích để biết trong việc kiểm tra xem liệu một dịch vụ có hỗ trợ IPv6 hay không và liệu nó cũng có hỗ trợ IPv4 hay không. Đây là máy chủ SSH của tôi:
$ netstat -64ln | grep 22
tcp6 0 0 :::22 :::* LISTEN
Như bạn có thể thấy, SSH chỉ nghe trên ::
cổng 22. Tuy nhiên, nó không chỉ lắng nghe các máy khách IPv6 - nó hoạt động tốt từ các máy khách IPv4, vì liên kết tương thích với IPv4. Để chứng minh điều này, nếu bạn nhìn vào điều này:
$ cat /proc/sys/net/ipv6/bindv6only
0
bindv6only
bị vô hiệu hóa (mặc định). Nếu điều đó được đặt thành 1
, thì tôi cũng sẽ phải khuyến khích SSH lắng nghe 0.0.0.0
(hoặc thay vào đó).
Xin lỗi vì không có thông tin về phía Mac OS X. Tôi đã sử dụng nó trong quá khứ, nhưng tôi thích tính thẩm mỹ của Gnome, vì vậy tôi đã không sử dụng nó trong một thời gian rất dài. Tuy nhiên, tôi đoán rằng hành vi này giống như của Linux.
Hi vọng điêu nay co ich.