web-dev-qa-db-ja.com

netstat出力の::: 80は、ipv6またはipv6 + ipv4のみを意味しますか?

:::80をリッスンしている場合、すべてのipv6またはすべてのipv6 + ipv4をリッスンしていますか?

これは私のnetstat -tlnです:

tcp        0      0 :::8080                     :::*
1
Akhil Jalagam

::にバインドされているリスニングソケット、つまり任意のアドレスIPv6アドレス(INADDR6_ANY)は、IPv4を使用した接続をリッスンする場合としない場合があります。これはいくつかのことに依存します:

  • 一部のオペレーティングシステムはデュアルスタックと呼ばれるものであり、これらのオペレーティングシステムでは、これはIPV6_V6ONLYソケットオプションが設定されているかどうかによって異なります。リスニングソケット(ソケットを作成したプログラムによる)。 LinuxベースのオペレーティングシステムとFreeBSDは、そのようなオペレーティングシステムの例です。

    オプションがプログラムによって明示的に設定されていない場合のデフォルトの動作は、OSに依存します。たとえば、Linuxベースのオペレーティングシステムでは、/proc/sys/net/ipv6/bindv6onlyに0または1を書き込むことでこのデフォルトを変更できます。

  • 他のいくつかのオペレーティングシステムはデュアルスタックではなく、それらのオペレーティングシステムでは、単一のソケットでIPv6とIPv4の両方をリッスンすることはできません。 OpenBSDはそのようなオペレーティングシステムの1つです。

一部のオペレーティングシステムでは、netstatの出力により、ソケットがデュアルスタックであるかどうかがわかります。 FreeBSDのnetstatは、たとえば、出力の最初の列でデュアルスタックソケットをtcp46およびudp46として報告します。

回答ありがとうございます@JohanMyreen例を挙げてこの回答を改善したいと思います。

両方の値を使用してipv6_onlyの動作をテストしています。

1。

cat /proc/sys/net/ipv6/bindv6only
0
nc -6 -l 80
#server started
# netstat
tcp6       0      0 :::80                   :::*                    LISTEN     
# nc client
nc localhost 80
test
# server response 
nc -6 -l 80
test
# from ipv6 now
 nc ::1 80
test ipv6
# server response
nc -6 -l 80
test ipv6

2。

cat /proc/sys/net/ipv6/bindv6only
1
# server started
nc -6 -l 80
# connect to ipv4
nc localhost 80
nc: connect to localhost port 80 (tcp) failed: Connection refused
# connect to ipv6 
nc ::1 80 
test ipv6 
# server respose
nc -6 -l 80
test ipv6 

上記の結果から、/ proc/sys/net/ipv6/bindv6onlyの値がipv6のみまたはipv6 + ipv4の動作を決定していることがわかります

6
Johan Myréen