-
Notifications
You must be signed in to change notification settings - Fork 0
MS_NetstatCommand
-
TOP > トラブルシュート > ネットワークの基礎編
- netstatコマンド
- ipconfigコマンド
- route printコマンド
「netstat」コマンドは、TCP/IP における通信の状態を調査する最も基本的なコマンド。
netstat [-a] [-b] [-e] [-n] [-o] [-p proto] [-r] [-s] [-v] [interval]
| オプション | 説明 |
|---|---|
-a |
ESTABLISHED と LISTENING のポートを表示する。 |
-b |
ESTABLISHED と LISTENING のポートの作成に使われた実行可能ファイルを表示する。時間がかかり、十分なアクセス許可がないとエラーが発生する。 |
-v |
-b と併用した場合、すべての実行可能ファイルの ESTABLISHED と LISTENING のポートの作成に使われたコンポーネント群が表示される。 |
-o |
各接続に関連付けられた、それらを所有するプロセス ID を表示する。 |
-n |
アドレスとポート番号を数値形式で表示する。 |
-e |
イーサネットの統計(積算値)を表示する。-s オプションと併用できる。 |
-s |
プロトコルごとの統計(積算値)を表示する。-p オプションと併用できる。 |
-p proto |
proto で指定されたプロトコルに関する情報を表示する。 |
-r |
ルーティング テーブルを表示する。 |
interval |
送信秒間隔。Ctrl+C を押して停止する。 |
proto は通常、TCP、UDP、TCPv6、または UDPv6 を指定できる。
-s オプションと併用する場合は、IP、IPv6、ICMP、ICMPv6、
TCP、TCPv6、UDP または UDPv6 を指定できる。
補足:
-b/-oを有効に使うには管理者として実行する必要がある。 また、-nを併用すると名前解決を行わなくなるため、 DNS の応答待ちで表示が固まるのを避けられる(実務ではnetstat -anoが定番)。
引数を何も付けずに実行すると、
- 「ESTABLISHED」状態の TCP/IP コネクションが表示される。
- 「ESTABLISHED」状態は UDP にはない状態なので、UDP プロトコルは表示されない。
C:\>netstat
Active Connections
Proto Local Address Foreign Address State
TCP pc01:2112 svr01:netbios-ssn ESTABLISHED
TCP pc01:2167 svr01:pop3 ESTABLISHED
「-a」オプションを付けて実行すると、
-
TCP/IP のコネクションが表示される。
-
「LISTENING」状態のソケット
-
「ESTABLISHED」状態のソケット
-
TCP の「LISTENING」状態のソケットは、
- Local Address に「ローカル マシン:LISTENING ポート番号」、
- Foreign Address に「ローカル マシン:0」が表示される。
-
-
UDP の待ち受けが表示される。
- UDP はコネクションレスなので State 列は空欄になる。
C:\>netstat -a
Active Connections
Proto Local Address Foreign Address State
TCP svr01:epmap svr01:0 LISTENING
TCP svr01:microsoft-ds svr01:0 LISTENING
・
・
UDP svr01:epmap *:*
UDP svr01:microsoft-ds *:*
移行メモ(正誤): 元 Wiki には 「UDP の『LISTENING』状態が表示される。『LISTENING』状態は UDP にも有る状態なので、 表示される」とあったが、これは誤りである。 UDP はコネクションレス プロトコルであり、 TCP のような状態(ステート)を持たない。 実際の
netstat -aの出力でも、UDP の行には State 列が表示されない (上の例のとおり空欄になる)。 「バインドされている UDP ポートが表示される」というのが正しい理解である。
「-o」オプションを付けて実行すると、
- そのコネクションを所有しているプロセスの ID(PID)を表示することができる。
- PID が分かれば、タスク マネージャや
tasklist /svcコマンドから、
プロセスやサービスを調べることができる。
C:\>netstat -o
Active Connections
Proto Local Address Foreign Address State PID
TCP pc01:1047 svr01:9080 ESTABLISHED 3588
TCP pc01:1097 svr02:microsoft-ds ESTABLISHED 4
TCP pc01:2757 svr01:9100 ESTABLISHED 3240
TCP pc01:1051 localhost:1052 ESTABLISHED 2592
また、「-b」オプションを付けて実行すると、
ポートの作成に使われた実行可能ファイル(exe)の情報を出力できる。
「-bv」オプションを付けて実行すると、
実行可能ファイル(exe)・コンポーネント(dll)の情報を出力できる。
interval 引数に数値を付けて実行すると、
その時間間隔(秒)で繰り返し実行できる。
- 通信の状態を定常的にモニタしたい場合に有用なオプションである。
- 止めるには、[Ctrl]+[C]を押して強制終了させる。
実際の通信状態が反映されるまでしばらく時間がかかる。
- このため、このような特性を理解して使うか、
- 長い時間間隔(例:10 分など)でモニタしていても構わないような場合に使う。
「-s」、「-e」オプションを付けて実行すると、下記項目を確認することができる。
-
NIC・プロトコル毎のネットワーク上の
- 負荷(パケット数、メッセージ数)
- エラー数
- コネクションの状態
-
ただし、ここで表示される数値は OS 起動時からの積算値であるため、
現時点でエラーが多発しているかどうかを調べたい場合は、
何度かコマンドを実行して数値の変化を確認する必要がある。
- 指定のポート番号が開いているかどうか確認する。
netstat -ano | findstr "<ポート番号>"
- 開けているプログラムを PID から確認する。
tasklist /fi "pid eq <PID>"
補足: PowerShell では、同等のことを以下で行える (PID からプロセス名まで一気に解決できる)。
Get-NetTCPConnection -State Listen | Select-Object LocalAddress, LocalPort, OwningProcess, @{n='Process';e={(Get-Process -Id $_.OwningProcess).ProcessName}}また、TIME_WAIT が大量に残る場合は
Get-NetTCPConnection -State TimeWait | Measure-Objectで件数を把握し、 接続障害の切り分けに使う。
Tags: インフラストラクチャ, 通信技術, Windows, シェル
このWikiは「Open棟梁Project」,「OSSコンソーシアム 開発基盤部会」によって運営されています。