Sayangnya, ini berbeda tergantung pada sistem operasi apa yang Anda gunakan.
Di Microsoft Windows, mengikat soket ::
hanya mengikat ke port IPv6. Jadi untuk mendengarkan semua alamat di kedua IPv4 dan IPv6, Anda harus mengikat 0.0.0.0
juga ::
. Ekstrak berikut ini dari kotak Vista:
C:\>netstat -an | find "445"
TCP 0.0.0.0:445 0.0.0.0:0 LISTENING
TCP [::]:445 [::]:0 LISTENING
Contoh yang saya berikan adalah port 445, digunakan untuk lalu lintas SMB ketika NetBIOS tidak digunakan. Seperti yang Anda lihat, itu mengikat keduanya 0.0.0.0
dan ::
membuat, masing-masing, baik klien IPv4 dan IPv6 bekerja.
Di Linux, ::
sudah termasuk alamat yang kompatibel dengan IPv4, seperti yang sudah Anda tebak, sehingga mengikat 0.0.0.0
juga tidak perlu. Saya menulis program Python sederhana yang hanya mengikat ke AF_INET6
soket ::
. Meskipun saya juga tidak mengikat ke AF_INET
soket (IPv4), ia masih menerima koneksi dari klien IPv4. Jika, katakanlah, 10.1.1.3
terhubung ke sana, itu akan muncul sebagai terhubung dari ::ffff:10.1.1.3
.
Kecuali bahwa itu menjadi berbulu. Di atas tidak berlaku di Linux jika /proc/sys/net/ipv6/bindv6only
diatur ke 1
, dalam hal perilaku persis sama dengan Windows - mengikat ::
hanya akan mendengarkan permintaan IPv6. Jika Anda ingin mendengarkan permintaan IPv4 juga, Anda harus membuat AF_INET
soket dan mendengarkan 0.0.0.0
juga. Untungnya, default untuk bindv6only
adalah 0
, jadi ada kemungkinan sangat kecil Anda harus berurusan dengan ini (kecuali jika Anda menggunakan Debian, yang sebenarnya default untuk bindv6only = 1
).
Semua ini berguna untuk diketahui dalam memeriksa untuk melihat apakah suatu layanan diaktifkan IPv6, dan apakah itu juga mendukung IPv4. Ini server SSH saya:
$ netstat -64ln | grep 22
tcp6 0 0 :::22 :::* LISTEN
Seperti yang Anda lihat, SSH hanya mendengarkan pada ::
port 22. Namun, ini bukan hanya mendengarkan klien IPv6 - ini berfungsi dengan baik dari klien IPv4, karena pengikatan yang kompatibel dengan IPv4. Untuk membuktikan ini, jika Anda melihat ini:
$ cat /proc/sys/net/ipv6/bindv6only
0
bindv6only
dinonaktifkan (default). Jika itu diatur 1
, maka saya harus mendorong SSH untuk mendengarkan 0.0.0.0
juga (atau sebaliknya).
Permintaan maaf karena tidak memiliki informasi tentang sisi Mac OS X. Saya telah menggunakannya di masa lalu, tetapi saya lebih suka estetika GNOME, jadi saya belum menggunakannya dalam waktu yang sangat lama. Namun, saya kira perilaku itu sama dengan Linux.
Semoga ini membantu.