netstat コマンドの詳細解説
`netstat` は、ネットワーク接続、
ルーティングテーブル、ネットワークインターフェースの統計情報などを表示するコマンドラインツールです。主に、ネットワークに関する問題の調査や、トラフィック量を調べてパフォーマンスを測定する際に利用されます。
概要
`netstat` コマンドは、
UNIX、
Unix系、Windows NT系
オペレーティングシステムで広く利用されており、ネットワークの状態を把握する上で非常に重要なツールです。コマンドの実行結果から、アクティブな接続、リッスンしているポート、ネットワークインターフェースの統計情報などを確認できます。
基本的な使い方
`netstat` コマンドは、様々なオプションを組み合わせて使用します。オプションはハイフン (-) を前に付ける形式で指定します。以下に主なオプションとその機能を説明します。
主なオプション
`-a` : 全てのアクティブなTCP接続と、そのマシンがリッスンしているTCPポートおよびUDPポートを表示します。
`-b` : 各接続やリッスンポートに対応するプログラム名を表示します(Windows XP/2003 Server以降)。
`-e` :
イーサネットの統計情報を表示します(受信した総バイト数やパケット数など)。`-s` オプションと組み合わせて使用できます。
`-f` : 外部アドレスに対して完全修飾ドメイン名 (FQDN) を表示します(Windowsでは利用不可)。
`-i` : ネットワークインターフェースとその統計情報を表示します(Windowsでは利用不可)。
`-n` : アクティブなTCP接続を表示しますが、アドレスやポート番号を数値で表示し、名前解決を行いません。
`-o` : アクティブなTCP接続と対応するプロセスID (PID) を表示します。Windowsタスクマネージャと組み合わせることで、どのアプリケーションが接続しているかを確認できます。`-a`、`-n`、`-p` オプションと併用可能です(Windows XP/2003 Server以降)。
`-p` (Windows): 指定したプロトコルの接続を表示します。プロトコルには、`tcp`, `udp`, `tcpv6`, `udpv6` が指定できます。`-s` と組み合わせてプロトコルの統計情報を表示する場合は、`tcp`, `udp`, `icmp`, `ip`, `tcpv6`, `udpv6`, `icmpv6`, `ipv6` のいずれかを指定します。
`-p` (
Linux): ソケットごとのプロセスの対応を表示します(Windowsの `-b` オプションに相当)。root権限が必要です。
`-P` (Solaris): 指定したプロトコルの接続を表示します。プロトコルには、`ip`, `ipv6`, `icmp`, `icmpv6`, `igmp`, `udp`, `tcp`, `rawip` が指定できます。
`-r` :
ルーティングテーブルの内容を表示します。Windowsの `route print` コマンドに相当します。
`-s` : プロトコルごとの統計情報を表示します。デフォルトでは、TCP, UDP, ICMP, IP の統計情報を表示します。Windows XP以降で
IPv6をインストールしている場合、
IPv6に関する統計情報も表示されます。`-p` オプションと併用すると、指定したプロトコルの情報を表示できます。
`-v` : `-b` オプションと組み合わせて、接続作成やリッスンポートに関わるコンポーネントを詳細表示します。
`Interval` : 指定された情報を指定秒数ごとに表示します。`Ctrl+C` で表示を停止します。省略すると1回のみ表示します。
`/?` : ヘルプ情報を表示します(Windowsのみ)。
表示される情報
`netstat` コマンドを実行すると、以下のような情報が表示されます。
`Proto` (プロトコル): 使用されているプロトコル名(TCPまたはUDP)
`Local Address` (ローカルアドレス): ローカルコンピュータで使用されている
IPアドレスとポート番号。`-n` オプションを指定しない場合は、対応する名前が表示されます。
`Foreign Address` (外部アドレス): ソケットが接続されているリモートコンピュータの
IPアドレスとポート番号。`-n` オプションを指定しない場合は、対応する名前が表示されます。接続が確立していない場合は、ポート番号はアスタリスク () で表示されます。
`State` (状態): TCP接続の状態を表示します。とりうる状態には、`CLOSE_WAIT`, `CLOSED`, `ESTABLISHED`, `FIN_WAIT_1`, `FIN_WAIT_2`, `LAST_ACK`, `LISTEN`, `SYN_RECEIVED`, `SYN_SEND`, `TIME_WAIT` などがあります。
使用例
TCPプロトコルの統計情報を表示する
bash
netstat -sp tcp
アクティブなTCP接続と対応するプロセスIDを5秒間隔で表示する(Windows XP/2003以降)
bash
netstat -o 5
アクティブなTCP接続と対応するプロセスIDを数値で表示する(Windows XP/2003以降)
bash
netstat -no
特定のプロセスIDのプロセスがオープンした全ポートを表示する
bash
netstat -ao | find "pid"
注意点
一部のバージョンでは、出力フォーマットに問題があり、データが読み取りにくくなる場合があります。
Linuxでは、`/proc/net/dev` からデータを取得する場合があり、表示が崩れることがあります。
Windowsでは、IP Helper API (`IPHLPAPI.DLL`) を利用して情報を収集しており、TCP/IPがインストールされていない場合は利用できません。
macOSでは、Network Utility アプリケーションで `netstat` と同等の情報を表示できます。
関連コマンド
`lsof -i`
`iproute2`
まとめ
`netstat` コマンドは、ネットワークに関する様々な情報を取得できる強力なツールです。ネットワークのトラブルシューティングやパフォーマンス分析に欠かせないため、使い方を習得しておくと便利です。