/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
ファイルシステムに含まれる生のソケット情報を探索しました。
続ける をクリックして、実験を完了します。