はじめに
この実験では、Linux で特定のネットワークソケットが開いているかどうかを確認する方法を学びます。アクティブなネットワークソケットを識別して調査する方法を理解することは、ネットワークのトラブルシューティングと監視における基本的なスキルです。
実践的な演習を通じて、ss や netstat などの強力なコマンドラインツールを使用して、ネットワーク接続を一覧表示し、フィルタリングします。また、/proc/net ファイルシステムを探索して、ソケットの詳細をより深く理解し、システム上のネットワークソケットの状態を検証する包括的なアプローチを提供します。
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 を使用して、ネットワークソケットを確認します。netstat は ss と比べて古いコマンドですが、依然として広く使用されており、ネットワーク接続、ルーティングテーブル、およびインターフェイス統計に関する同様の情報を提供します。
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 コマンドのアーセナルにおいて貴重なツールです。両方に慣れておくのが良い習慣です。
これで、ss と netstat の両方を使用してリスニングソケットを表示することに成功しました。これは、システム上のネットワークアクティビティを理解するための基本的なスキルです。
続ける をクリックして次のステップに進みます。
/proc/net でソケットの詳細を調べる
このステップでは、/proc/net ディレクトリを探索します。このディレクトリは、Linux カーネル内のネットワークスタックとネットワークプロトコルに関する詳細情報を提供します。ここが ss や netstat などのコマンドがデータを取得する場所です。
/proc ファイルシステムは、プロセスに関する情報やその他のシステム情報を提供する仮想ファイルシステムです。カーネルの内部状態を調べる強力な方法です。
/proc/net の中には、ネットワーク接続に関する生データが含まれたファイルがあります。たとえば、tcp、udp、tcp6、udp6 には、アクティブな 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)
この出力は、生のカーネルデータであるため、ss や netstat の出力よりも人間が読みやすくなっていません。各行は TCP ソケットを表し、以下を含む様々なフィールドがあります。
sl: ソケットリストのインデックス。local_address: 16 進数形式のローカル IP アドレスとポート。0100007Fは127.0.0.1(ループバックアドレス)の 16 進数表現で、0019はポート 25 の 16 進数表現です。rem_address: 16 進数形式のリモート IP アドレスとポート。st: ソケットの状態(例:0AはLISTENを表します)。tx_queue: 送信キューのサイズ。rx_queue: 受信キューのサイズ。uid: ソケットを所有するユーザー ID。inode: ソケットの inode 番号。
/proc/net/udp ファイルを見ることで、UDP ソケットも表示できます。
cat /proc/net/udp
また、IPv6 ソケットについては、/proc/net/tcp6 と /proc/net/udp6 を確認できます。
通常、日常の使用でこれらのファイルを直接解析することはありませんが、ここがネットワーク情報の源であることを理解することで、Linux がネットワーク接続を管理する仕組みについてより深い洞察を得ることができます。ss や netstat などのコマンドは、基本的にこれらのファイルからデータを読み取り、理解しやすい形式に整形します。
これで、/proc/net ファイルシステムに含まれる生のソケット情報を探索しました。
続ける をクリックして、実験を完了します。
まとめ
この実験では、様々なコマンドラインツールを使用して、Linux で特定のネットワークソケットが開いているかどうかを確認する方法を学びました。まず、-tuln オプションを使用した ss コマンドを利用して、リスニング中の TCP および UDP ソケットを表示し、Netid、State、Local Address:Port、Peer Address:Port などの出力列を理解しました。
ss を使用した後、通常は netstat コマンドを使用してソケット情報を確認します。このコマンドは同様のネットワーク統計情報を提供します。最後に、/proc/net ファイルシステムから直接詳細なソケット情報を調べる方法を探索しました。これにより、ネットワークスタックの低レベルの情報を見ることができます。これらの手順は、Linux システム上の開いているネットワークソケットを特定および調査する包括的なアプローチを提供します。



