web-dev-qa-db-ja.com

netstat出力のローカルアドレスの:::とは何ですか?

これは私が得るnetstat -tulpnの出力です:

tcp        0      0 127.0.0.1:2208              0.0.0.0:*                   LISTEN      2055/hpiod
tcp        0      0 127.0.0.1:631               0.0.0.0:*                   LISTEN      2077/cupsd
tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      2138/sendmail: acce
tcp        0      0 127.0.0.1:2207              0.0.0.0:*                   LISTEN      2060/python
tcp        0      0 0.0.0.0:735                 0.0.0.0:*                   LISTEN      1825/rpc.statd
tcp        0      0 :::111                      :::*                        LISTEN      1781/rpcbind
tcp        0      0 :::80                       :::*                        LISTEN      2624/httpd
tcp        0      0 :::22                       :::*                        LISTEN      2096/sshd
udp        0      0 0.0.0.0:32768               0.0.0.0:*                               2398/avahi-daemon:
udp        0      0 0.0.0.0:68                  0.0.0.0:*                               1581/dhclient
udp        0      0 0.0.0.0:729                 0.0.0.0:*                               1825/rpc.statd
udp        0      0 0.0.0.0:732                 0.0.0.0:*                               1825/rpc.statd
udp        0      0 0.0.0.0:5353                0.0.0.0:*                               2398/avahi-daemon:
udp        0      0 0.0.0.0:631                 0.0.0.0:*                               2077/cupsd
udp        0      0 :::32769                    :::*                                    2398/avahi-daemon:
udp        0      0 :::684                      :::*                                    1781/rpcbind
udp        0      0 :::5353                     :::*                                    2398/avahi-daemon:
udp        0      0 :::111                      :::*                                    1781/rpcbind

知りたいのですが、ローカルアドレスの:::はどういう意味ですか?そして、外国住所の0.0.0.0:*:::*は何ですか?

39
Pradipta

他の回答の多くが言及しているように、::はすべてゼロを表し、netstatはアドレスの後にコロンを表示する場合があるため、3つのコロンが得られます。

これらの回答のどれにも見当たらないのは、それが実際に何を意味するのかという質問に対する回答です(この場合)。

Netstatの場合、::(IPv6の場合)または0.0.0.0(IPv4の場合)は基本的に「任意」を意味します。
したがって、ソフトウェアは、任意のアドレスでTCPポート80(HTTPポート))をリッスンしています。

複数のネットワークカードインターフェイスがある場合(これについては、後で説明します)、特定のアドレスだけをリッスンすることができます。たとえば、一部のソフトウェアでは、有線イーサネットを使用するネットワークカードでHTTPサーバーをリッスンするが、ワイヤレスネットワークを使用するネットワークカードには応答しないようにすることができます。それを行った場合、コンピューターはIPv4 192.0.2.100:80(またはIPv6 2001:db8:abcd :: 1234:80)でリッスンするような動作をする可能性があります。

ただし、「::: 80」をリッスンしているため、コンピュータは1つの着信IPアドレスでポート80トラフィックをリッスンしていないため、ポート80トラフィックをリッスンしています anyIPv6アドレス。

なぜあなたが聞いているインターフェースについてうるさくなりたがるのでしょうか?まあ、私がこの機能を使用した1つの方法は、コンピューターにループバックインターフェイスをリッスンさせることです。 (複数のネットワークカードインターフェイスがあると言ったときを思い出してください...これが、私が言った1つの理由です。実際の物理ネットワーク接続があり、ループバックインターフェイスもあると思います。これが、最近のほとんどのタイプのコンピューター。)私はSSHトンネリングを使用してそれを行います。次に、ローカルVNCビューアをSSHトンネルのローカルエンドに接続するなどの操作を実行できます。 SSHトンネルにループバックインターフェイスをリッスンさせることで、SSHトンネルが物理ネットワークインターフェイスの1つから着信するトラフィックをリッスンすることを心配する必要はありません。そのため、SSHトンネルは私のコンピューターからのネットワークトラフィックのみを認識します。

場合によっては、0.0.0.0または::は基本的に、「アドレスが存在しないことを示します」という RFC 4291セクション2.5.2 で指定されている「指定されていない」アドレスを意味します。ソフトウェアが「無効な」アドレス(コンピューターに割り当てられたアドレスがない場合など)を参照しようとすると、特定のアドレスが表示されない場合に、これが発生することがあります。ただし、この場合、::または0.0.0.0は「不明な」アドレスを参照します。そのため、すべてのLISTENINGポートが「不明」と表示されます。確立された接続では、リモートエンドと通信しているため、リモートエンドが誰であるかがわかります。 「リスニング」接続の場合は、まったく新しい会話を聞いています。そのトラフィックは、おそらく世界中のどこからでも発生する可能性があります。着信トラフィックは任意のアドレスから来る可能性があります。そして、nestatが表示する方法は、すべてゼロのアドレスを指定することです。使用する特定のアドレスがないため、「指定されていない」アドレスは非常に適切なようです。

まとめとして、すべてのネットワークインターフェイスでソフトウェアがリッスンすることは非常に一般的なことであることに注意してください。一部のソフトウェアは、特定のインターネットアドレスまたは特定のネットワークカードのみをリッスンするように設定できます。また、有効なトラフィックが予想されない場所でソフトウェアがリッスンしていないため、これはもう少し安全です。それは攻撃する能力を制限するかもしれません。ただし、多くのソフトウェアにはそのようなオプションがないか、そのようなオプションはいくぶん埋もれている/隠されています。したがって、すべてのネットワークカードでリッスンすることは、それほどひどいことではありません。それはかなり一般的です。また、ソフトウェアが特定のネットワークポートでトラフィックを受信しないようにする場合は、ファイアウォールで不要なトラフィックをブロックするなど、他の方法でそれを実現できます。これを行うと、ファイアウォールがトラフィックをブロックする可能性がありますが、(Web)サーバーはそのネットワークインターフェイスでトラフィックをリッスンする可能性があります。その場合、サーバーはそのインターフェイスでトラフィックを取得することはありませんが、netstatはサーバーがリッスンしていることを報告します(そのサーバーに到達しないトラフィックについて)。サーバーソフトウェアがすべてのインターフェイスでリッスンしているというnetstatレポートの表示は非常に一般的であるため、特に心配する必要はありません。

最後に、この質問とこの回答はLinux固有のものではないことを述べておきます。 (この質問には「Linux」タグが表示されているため、これについて言及します。)表示されているコマンドラインパラメーターと出力例はLinuxからのものであり、オペレーティングシステムによって表示が少し異なる場合があります。ただし、::および0.0.0.0のトピックについては、この点に関するnetstatの動作は、BSDまたはMicrosoft Windows(およびおそらく他の多くのシステム)を実行しているマシンでも同じです。

26
TOOGAM

他の人が言ったように、これはこのコンテキストの自然なIPv6表記です。

関連する基準を引用して解釈しましょう:

::: * == 0000.0000.0000.0000.0000.0000.0000.0000:*

http://tools.ietf.org/html/rfc5952#section-4 は、canonical(単なる省略ではない)IPv6アドレスが:

  • a-f小文字の16進数で書かれています。
  • :によって2バイトごとにグループ化
  • 先頭の0は[〜#〜] [〜#〜]削除する必要があります。 00000になります。
  • :0:0:0:の最長シーケンス[〜#〜] [〜#〜]::に変換する必要があります。一度しか実行できないか、あいまいになる可能性があります。

したがって、:::*は次を意味します:

  • 0000:0000:0000:0000:0000:0000:0000任意のポート(:*
  • == 0:0:0:0:0:0:0(末尾0の削除)
  • == ::(連続ゼロ収縮)

0000.0000.0000.0000.0000.0000.0000.0000:* ==未指定アドレス

http://tools.ietf.org/html/rfc4291#section-2.5.2 は「指定されていないアドレス」を定義します。

アドレス0:0:0:0:0:0:0:0は、不特定アドレスと呼ばれます。ノードに割り当てないでください。住所がないことを示します。その使用例の1つは、初期化中のホストが自身のアドレスを学習する前に送信したIPv6パケットのソースアドレスフィールドです。

未指定のアドレスは、IPv6パケットの宛先アドレスとして、またはIPv6ルーティングヘッダーで使用しないでください。送信元アドレスが指定されていないIPv6パケットは、IPv6ルーターによって転送されてはなりません。

これは、この場合のようにN/Aカラムに適しています。

したがって、::notlocalhostであり、同じドキュメントでは::1にあります。

netstat 1.60では、出力のプロトコルはIPv6のtcp6およびudp6を読み取ります。これにより、次のように、何が起こっているかがわかります。

tcp6       0      0 :::22                   :::*                    LISTEN      1201/sshd
udp6       0      0 :::5353                 :::*                                1449/avahi-daemon:

以下も参照してください。

IPv6アドレスを指します。 IPv6では、0修飾子を使用して::のシーケンスを圧縮できます

例えば、

0:0:0:0:0:0:0:1

次のように書くことができます

:: 1

しかし、この点に関して従うべき特定のルールがあり、Ipv6チュートリアルで調べることができます。

3
anakin

:: 1は、IPv4の127.0.0.1のように、IPv6のローカルホストです。

::: *は0:0:1:*(IPv6 0:0:0、ポート*)の短縮バージョンで、IPv4 0.0.0.0:*のようなものです。外部アドレス列にあるこれらの両方は、外部アドレス列がないことを意味します。リスニングソケットの場合、接続された外部アドレスが(まだ)ないことは明らかです。 udpソケットの場合、通常は外部アドレスに接続していないため、これらも0.0.0.0:*とリストされます。

2
Werner Henze

::: * IPv6ではlocalhost/loop backになります:)

基本的に、ローカルでサービスをリッスンして接続するサービスがあります。

0
Jason

知りたいのですが、::: in Local Addressはどういう意味ですか?

Linuxバージョンのnetstatは、次の表記を使用します。IPアドレスはそのまま表示されます*。

したがって、::: 111は::のIPと111のポートを意味します。

::は、ゼロの実行を::に置き換えることができるというルールを使用した、圧縮形式のIPv6アドレスです。完全に書き出された場合、0000:0000:0000:0000:0000:0000:0000:0000と同等です。

IPv4と同様に、すべてゼロのアドレス(未指定アドレスと呼ばれます)がプレースホルダー値として使用されます。ローカルアドレスの場合、これは、ソケットがすべてのIPv6インターフェース(およびnetstatに表示されないソケットオプションに応じて、おそらくすべてのIPv4インターフェース)で待機していることを意味します。

そして、外部アドレスの0.0.0.0:*と::: *とは何ですか?

これは、ソケットが特定の外部アドレスにバインドされていないことを意味します。 ::または0.0.0.0は、未指定のIPアドレス(それぞれIPv4またはIPv6の場合)を示し、*は未指定のポートを示します。

TCPの場合、これは着信接続をリッスンするソケットにのみ適用されます。接続を受け入れるために「accept」が呼び出されると、定義されたリモートIPとポートで別のソケットが作成されます。

UDPの場合、接続を受け入れるという概念はありません。 ::: *の外部アドレスを持つUDPソケットにバインドされたアプリケーションは、「recvfrom」API呼び出しを使用してパケットを受信し、パケットの送信元を特定し、「sendto」API呼び出しを使用して特定のアドレスにパケットを送信します。

*この表記は、表示された文字列が他の場所とnetstatで異なることを意味するため、残念です。ほとんどのコンテキストでは、3FFE :: 1234:5678はIPアドレス3FFE:0000:0000:0000:0000:0000:1234:5678を意味しますが、Linux netstat出力ではIPアドレス3FFE:0000:0000:0000:0000:0000を意味します:0000:1234およびポート5678。対照的に、netstatのWindowsバージョンは、あいまいさを避けるためにIPv6アドレスを角括弧で囲みます。

0
plugwash