【Linux】ソケットの状態を確認する:netstatコマンド
ネットワーク管理において、サーバーの接続状況やポートの監視は非常に重要です。これを実現するために、従来から広く使用されてきたのがnetstat
コマンドです。netstat
コマンドは、ネットワーク接続の状態、ルーティングテーブル、インターフェースの統計情報、さらにはソケットの状態を確認するためのツールです。これにより、サーバーのパフォーマンスやセキュリティを監視し、問題が発生した際のトラブルシューティングに役立てることができます。
netstatコマンドの概要
netstat
コマンドは、ネットワーク接続、ルーティングテーブル、インターフェース統計、マスカレード接続、マルチキャストメンバーシップなど、ネットワークに関するさまざまな情報を表示するためのツールです。しかし、netstat
コマンドは現在非推奨とされており、将来的に廃止される予定です。その代わりに、より高速で詳細な情報を提供するss
コマンドが推奨されています。
ソケットの主な状態
状態 | 説明 |
---|---|
LISTEN | サーバーが接続を待機している状態。ソケットは接続要求を待ち受ける。 |
ESTABLISH | 接続が確立されている状態。クライアントとサーバー間の通信が行われている。 |
【構文】netstat [オプション]
netstatコマンドの主なオプション
オプション | 説明 |
---|---|
-n | ポート番号で表示する。サービス名では表示しない。 |
-t | TCPソケットのみを表示する。 |
-u | UDPソケットのみを表示する。 |
-a | すべてのソケット(リスニングと非リスニングの両方)を表示する。 |
-l | リスニングソケットのみを表示する。 |
-p | ソケットに関連付けられたプロセスを表示する。 |
netstatのインストール(Ubuntu)
netstat
コマンドは、net-tools
パッケージの一部として提供されていますが、デフォルトでインストールされていない場合があります。インストールするには、以下のコマンドを使用します。
sudo apt-get install net-tools
sudo apt-get install net-tools
コマンドを実行することで、netstat
コマンドがインストールされます。
$ sudo apt-get install net-tools
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了
状態情報を読み取っています... 完了
以下のパッケージが新たにインストールされます:
net-tools
アップグレード: 0 個、新規インストール: 1 個、削除: 0 個、保留: 13 個。
204 kB のアーカイブを取得する必要があります。
この操作後に追加で 819 kB のディスク容量が消費されます。
取得:1 http://jp.archive.ubuntu.com/ubuntu jammy/main amd64 net-tools amd64 1.60+git20181103.0eebece-1ubuntu5 [204 kB]
204 kB を 1秒 で取得しました (163 kB/s)
以前に未選択のパッケージ net-tools を選択しています。
(データベースを読み込んでいます ... 現在 210802 個のファイルとディレクトリがインストールされています。)
.../net-tools_1.60+git20181103.0eebece-1ubuntu5_amd64.deb を展開する準備をしています ...
net-tools (1.60+git20181103.0eebece-1ubuntu5) を展開しています...
net-tools (1.60+git20181103.0eebece-1ubuntu5) を設定しています ...
man-db (2.10.2-1) のトリガを処理しています ...
netstatコマンドを使用する場面
- ネットワーク接続の監視: サーバーのリスニングソケットを確認したり、現在確立されている接続を確認したい場合に使用されます。
- トラブルシューティング: ネットワーク接続に問題がある場合、その原因を特定するために使用します。
- セキュリティ分析: システム上で開いているポートや、それに関連するプロセスを確認し、不正な接続がないかチェックする場合に便利です。
netstatコマンドの出力例と項目
以下に、netstat
コマンドの出力例と、それに含まれる項目の説明を示します。
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 192.168.1.5:ssh 192.168.1.10:49756 ESTABLISHED 1234/sshd
tcp 0 0 0.0.0.0:http 0.0.0.0:* LISTEN 5678/nginx
項目 | 説明 |
---|---|
Proto | 使用されているプロトコル(tcp, udpなど) |
Recv-Q | 受信キューのサイズ。受信バッファにある未処理のデータ量を示す。 |
Send-Q | 送信キューのサイズ。送信バッファにある未処理のデータ量を示す。 |
Local Address | ローカルホストのアドレスとポート番号 |
Foreign Address | リモートホストのアドレスとポート番号 |
State | ソケットの状態(LISTEN, ESTABLISHEDなど) |
PID/Program name | ソケットに関連付けられたプロセスIDとプログラム名 |
コマンドの使用例と解説
1.すべてのTCPソケットを表示する。
このコマンドは、すべてのTCPソケット(リスニングと確立された接続の両方)を表示します。ネットワーク接続の監視に役立ちます。
$ netstat -at
稼働中のインターネット接続 (サーバと確立)
Proto 受信-Q 送信-Q 内部アドレス 外部アドレス 状態
tcp 0 0 localhost:ipp 0.0.0.0:* LISTEN
tcp 0 0 localhost:domain 0.0.0.0:* LISTEN
tcp 0 0 ubuntu-vm:40802 ubuntu-mirror-1.ps:http TIME_WAIT
tcp6 0 0 ip6-localhost:ipp [::]:* LISTEN
2.数値形式でTCPソケットを表示する。
このコマンドは、TCPソケットの状態を数値形式で表示します。ホスト名やサービス名の解決を行わず、IPアドレスやポート番号を直接表示するため、コマンドの実行が高速です。
user01@ubuntu-vm:~$ netstat -atn
稼働中のインターネット接続 (サーバと確立)
Proto 受信-Q 送信-Q 内部アドレス 外部アドレス 状態
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN
tcp6 0 0 ::1:631 :::* LISTEN
まとめ
netstat
コマンドは、ネットワーク接続やソケットの状態を確認するための基本的なツールですが、現在では非推奨となっており、将来的に廃止される予定です。これからは、より高速で詳細な情報を提供するss
コマンドの使用が推奨されます。それでも、netstat
コマンドを理解しておくことは、古いシステムやレガシーサポートにおいて重要です。