Linux で特定のネットワークソケットが開いているかどうかを確認する方法

LinuxLinuxBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、Linux で特定のネットワークソケットが開いているかどうかを確認する方法を学びます。アクティブなネットワークソケットを識別して調査する方法を理解することは、ネットワークのトラブルシューティングと監視における基本的なスキルです。

実践的な演習を通じて、ssnetstat などの強力なコマンドラインツールを使用して、ネットワーク接続を一覧表示し、フィルタリングします。また、/proc/net ファイルシステムを探索して、ソケットの詳細をより深く理解し、システム上のネットワークソケットの状態を検証する包括的なアプローチを提供します。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux(("Linux")) -.-> linux/RemoteAccessandNetworkingGroup(["Remote Access and Networking"]) linux/BasicFileOperationsGroup -.-> linux/cat("File Concatenating") linux/RemoteAccessandNetworkingGroup -.-> linux/netstat("Network Monitoring") subgraph Lab Skills linux/cat -.-> lab-558761{{"Linux で特定のネットワークソケットが開いているかどうかを確認する方法"}} linux/netstat -.-> lab-558761{{"Linux で特定のネットワークソケットが開いているかどうかを確認する方法"}} end

ss -tuln でソケットを確認する

このステップでは、Linux システム上のネットワークソケットを調査するために ss コマンドを使用する方法を学びます。ソケットは、ネットワークを介してデータを送受信するためのエンドポイントです。アクティブなソケットを表示する方法を理解することは、ネットワークのトラブルシューティングと監視において重要です。

ss コマンドは、ソケットを調査するための強力なツールです。以下のオプションを使用します。

  • -t: TCP ソケットを表示します。
  • -u: UDP ソケットを表示します。
  • -l: リスニングソケット(接続を待機しているソケット)を表示します。
  • -n: サービス名を解決しません(代わりにポート番号を表示します)。

ターミナルが開いていない場合は、開きます。デスクトップの左側にある Xfce Terminal アイコンを見つけることができます。

次に、以下のコマンドを入力して Enter キーを押します。

ss -tuln

次のような出力が表示されます。

Netid State      Recv-Q Send-Q Local Address:Port               Peer Address:Port
tcp   LISTEN     0      128    0.0.0.0:22                       0.0.0.0:*
tcp   LISTEN     0      128    127.0.0.1:631                    0.0.0.0:*
tcp   LISTEN     0      128    0.0.0.0:5900                     0.0.0.0:*
tcp   LISTEN     0      128    127.0.0.1:25                     0.0.0.0:*
tcp   LISTEN     0      128    [::]:22                          [::]:*
tcp   LISTEN     0      128    [::1]:631                        [::]:*
tcp   LISTEN     0      128    [::]:5900                        [::]:*
tcp   LISTEN     0      128    [::1]:25                         [::]:*
udp   UNCONN     0      0      127.0.0.1:323                    0.0.0.0:*
udp   UNCONN     0      0      0.0.0.0:631                      0.0.0.0:*
udp   UNCONN     0      0      [::1]:323                        [::]:*
udp   UNCONN     0      0      [::]:631                         [::]:*

出力を分解してみましょう。

  • Netid: ソケットの種類(例:tcp, udp)。
  • State: ソケットの状態(例:LISTEN は接続を待機していることを意味します)。
  • Recv-Q: キュー内の受信バイト数。
  • Send-Q: キュー内の送信バイト数。
  • Local Address:Port: ソケットがバインドされているローカルの IP アドレスとポート番号。0.0.0.0[::] は、ソケットがすべての利用可能なネットワークインターフェイス(それぞれ IPv4 と IPv6)でリスニングしていることを示します。
  • Peer Address:Port: ソケットが接続されているリモートの IP アドレスとポート番号。* は、ソケットが任意のリモートアドレスからの接続を待機していることを示します。

この出力は、システム上で実行されていて接続を待機しているサービスを示しています。たとえば、SSH(ポート 22)、CUPS(ポート 631)、VNC(ポート 5900)、およびメールサーバー(ポート 25)がリスニングしていることがわかります。

この出力を理解することは、ネットワーク接続の問題を診断したり、システム上で実行されている潜在的に不要なサービスを特定したりする最初のステップです。

続ける をクリックして次のステップに進みます。

netstat -tuln でソケットを確認する

このステップでは、もう 1 つのコマンド netstat を使用して、ネットワークソケットを確認します。netstatss と比べて古いコマンドですが、依然として広く使用されており、ネットワーク接続、ルーティングテーブル、およびインターフェイス統計に関する同様の情報を提供します。

ss と同じオプションを使用して netstat を実行し、サービス名を解決せずにリスニング中の TCP および UDP ソケットを表示します。

  • -t: TCP ソケットを表示します。
  • -u: UDP ソケットを表示します。
  • -l: リスニングソケットを表示します。
  • -n: サービス名を解決しません。

ターミナルに以下のコマンドを入力し、Enter キーを押します。

netstat -tuln

次のような出力が表示されます。

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:5900            0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN
tcp6       0      0 :::22                   :::*                    LISTEN
tcp6       0      0 ::1:631                 :::*                    LISTEN
tcp6       0      0 :::5900                 :::*                    LISTEN
tcp6       0      0 ::1:25                  :::*                    LISTEN
udp        0      0 127.0.0.1:323           0.0.0.0:*
udp        0      0 0.0.0.0:631             0.0.0.0:*
udp6       0      0 ::1:323                 :::*
udp6       0      0 :::631                  :::*

netstat -tuln の出力は ss -tuln の出力と非常に似ていることに注意してください。両方のコマンドは、プロトコル (Proto)、ローカルアドレスとポート (Local Address)、外部アドレスとポート (Foreign Address)、および接続の状態 (State) に関する情報を提供します。

一般的に、複雑なシナリオでは ss の方が高速で情報量が多いとされていますが、netstat も Linux コマンドのアーセナルにおいて貴重なツールです。両方に慣れておくのが良い習慣です。

これで、ssnetstat の両方を使用してリスニングソケットを表示することに成功しました。これは、システム上のネットワークアクティビティを理解するための基本的なスキルです。

続ける をクリックして次のステップに進みます。

/proc/net でソケットの詳細を調べる

このステップでは、/proc/net ディレクトリを探索します。このディレクトリは、Linux カーネル内のネットワークスタックとネットワークプロトコルに関する詳細情報を提供します。ここが ssnetstat などのコマンドがデータを取得する場所です。

/proc ファイルシステムは、プロセスに関する情報やその他のシステム情報を提供する仮想ファイルシステムです。カーネルの内部状態を調べる強力な方法です。

/proc/net の中には、ネットワーク接続に関する生データが含まれたファイルがあります。たとえば、tcpudptcp6udp6 には、アクティブな TCP および UDP ソケット(それぞれ IPv4 と IPv6)に関する情報が含まれています。

tcp ファイルの内容を見てみましょう。ターミナルに以下のコマンドを入力し、Enter キーを押します。

cat /proc/net/tcp

次のような出力が表示されます。

sl  local_address rem_address   st tx_queue rx_queue tr tm->when retrnsmt   uid  timeout inode ref pointer drops
   0: 0100007F:0019 00000000:0000 0A 00000000:00000000 00:00000000 00000000     0        0 12345 1 0000000000000000 0
   1: 00000000:0016 00000000:0000 0A 00000000:00000000 00:00000000 00000000     0        0 67890 1 0000000000000000 0
   ... (more lines)

この出力は、生のカーネルデータであるため、ssnetstat の出力よりも人間が読みやすくなっていません。各行は TCP ソケットを表し、以下を含む様々なフィールドがあります。

  • sl: ソケットリストのインデックス。
  • local_address: 16 進数形式のローカル IP アドレスとポート。0100007F127.0.0.1(ループバックアドレス)の 16 進数表現で、0019 はポート 25 の 16 進数表現です。
  • rem_address: 16 進数形式のリモート IP アドレスとポート。
  • st: ソケットの状態(例:0ALISTEN を表します)。
  • tx_queue: 送信キューのサイズ。
  • rx_queue: 受信キューのサイズ。
  • uid: ソケットを所有するユーザー ID。
  • inode: ソケットの inode 番号。

/proc/net/udp ファイルを見ることで、UDP ソケットも表示できます。

cat /proc/net/udp

また、IPv6 ソケットについては、/proc/net/tcp6/proc/net/udp6 を確認できます。

通常、日常の使用でこれらのファイルを直接解析することはありませんが、ここがネットワーク情報の源であることを理解することで、Linux がネットワーク接続を管理する仕組みについてより深い洞察を得ることができます。ssnetstat などのコマンドは、基本的にこれらのファイルからデータを読み取り、理解しやすい形式に整形します。

これで、/proc/net ファイルシステムに含まれる生のソケット情報を探索しました。

続ける をクリックして、実験を完了します。

まとめ

この実験では、様々なコマンドラインツールを使用して、Linux で特定のネットワークソケットが開いているかどうかを確認する方法を学びました。まず、-tuln オプションを使用した ss コマンドを利用して、リスニング中の TCP および UDP ソケットを表示し、NetidStateLocal Address:PortPeer Address:Port などの出力列を理解しました。

ss を使用した後、通常は netstat コマンドを使用してソケット情報を確認します。このコマンドは同様のネットワーク統計情報を提供します。最後に、/proc/net ファイルシステムから直接詳細なソケット情報を調べる方法を探索しました。これにより、ネットワークスタックの低レベルの情報を見ることができます。これらの手順は、Linux システム上の開いているネットワークソケットを特定および調査する包括的なアプローチを提供します。