netstatコマンドの使い方、初心者に必要なことだけを説明する

6 min 163,283 views

この記事では、通信状況を表示できるネットワークコマンド「netstat」の使い方を説明します。

「netstat」は「ネットスタット」と読みます。

「netstat」を使うと、「netstat」を実行するコンピュータの通信状況を一覧表示することができます。

ノンネットワークエンジニアには難しいかもしれませんが、覚えておくと役に立つことが多いので是非使ってほしいネットワークコマンドです。

この記事では、Windowsのコマンドプロンプトでネットワークコマンド「netstat」を使います。

コマンドプロンプトの基本操作についてはこちらの記事にまとめていますので、必要な方はご参照下さい。

「netstat」は実行したコンピュータの通信状況を表示できる

「netstat」を使うと、実行するコンピュータが、どのコンピュータとどんなプロトコルを使って何番ポートで通信しているかがわかります。

意図しない通信をしている時や、逆に、意図した通信をしていない場合は「netstat」で全てわかります。

「netstat」コマンドの使い方

「netstat」の使い方について説明していきます。

ノンネットワークエンジニアの方は、次の項目だけ読んでおけば十分です。

  • よく使う書式
  • 実行結果の見方

もう少し詳しく知りたい方は、その先を読み進めていって下さい。

よく使う書式

ノンネットワークエンジニアが「netstat」を使うなら、次の書式だけ覚えておきましょう。

この書式だけ覚えよう
netstat

「netstat」はオプションなしで実行すると、アクティブになっているコネクションを全て表示します。

コマンドプロンプトでnetstatを実行した画面。プロトコル・ローカルアドレス・外部アドレス・状態の4列が並び、状態の欄にESTABLISHEDやTIME_WAITが表示されている。ホスト名は伏せてある

通信相手のコンピュータはホスト名で表示されます。

プロトコルの主要なものはプロトコル名で表示されます。

例えば、80番ポートは「http」と表示されます。

ホスト名やプロトコル名で表示されるのは人間にわかりやすくしているからなのですが、結果を表示するまで時間がかかる場合があります。

時間がかかる原因は、内部の処理でIPアドレスからホスト名を検索したり、ポート番号からプロトコル名に変換したりしているからです。

早く結果を表示させたい場合は、後ほど説明する「-n」オプションをして「netstat」を実行しましょう。

「-n」を指定すると、ホスト名とプロトコル名は数値で表示されるため、表示されるまでの時間が短くなります。

打つ前に確認したいときは、やりたいことを選ぶだけでコマンドを組み立てられる道具もあります。経路(ルート)の一覧を見る netstat -r も選べます。ネットワークコマンドを作る

実行結果の見方

「netstat」を実行すると、コマンドプロンプトに実行結果が表示されます。

コマンドプロンプトでnetstatを実行した画面。プロトコル・ローカルアドレス・外部アドレス・状態の4列が並び、状態の欄にESTABLISHEDやTIME_WAITが表示されている。ホスト名は伏せてある

実行結果にはアクティブなコネクションが表示されます。

コネクションとは?
TCPで通信する時の通信経路です。

TCPで通信する時は、コネクションの確立が必ず必要になります。

「netstat」では、1つのコネクションに対して次の項目が表示されます。

  • プロトコル
  • ローカルアドレス
  • 外部アドレス
  • 状態
netstatの実行結果の見出し行に4つの枠が付いた図。左からプロトコル、ローカルアドレス、外部アドレス、状態を指している
プロトコル

「TCP」、「UDP」といったトランスポート層のプロトコル名が入ります。

オプションなしで「netstat」を実行した場合UDPは表示されません。

UDPが表示されない理由は、UDPだとコネクションを確立しないためです。

アクティブなコネクション以外の状況(UDPの通信状況)も確認したい場合は、後ほど説明する「-a」オプションを付けて「netstat」を実行すると通信状況が表示されます。

ローカルアドレス

実行したコンピュータのIPアドレスとポート番号が表示されます。

IPアドレスは、2種類あります。

1つ目は、外部と通信するためのIPアドレス、2つ目は、コンピュータ内部での通信に使用するループバックアドレス(127.0.0.1)です。

「:」の左がIPアドレスで、右がポート番号です。

外部アドレス

通信相手のIPアドレスとポート番号が表示されます。

「:」の左がIPアドレスまたはホスト名で、右がポート番号またはプロトコル名です。

状態

TCPの状態遷移を表しています。

TCPでは、それぞれのポートにおいて状態を変化させながら通信を行っています。

「状態」には、この状態が表示されます。

ノンネットワークエンジニアの方には難しいと思いますので、次の4つだけ覚えておけば十分です。実際の画面によく出てくるのはこの4つです。

表示意味
ESTABLISHED相手とつながっていて、やりとりできる状態
LISTENING相手から話しかけられるのを待っている状態。まだ誰ともつながっていない
TIME_WAIT通信を終えたあとの後片づけ中。しばらくすると消える
CLOSE_WAIT相手が先に切ったが、こちら側はまだ閉じていない。TIME_WAIT と違い、放っておいても消えるとは限らない

⚠ Microsoft の一覧では「LISTEN」「TIMED_WAIT」と書かれていますが、画面に出るのは「LISTENING」「TIME_WAIT」です。調べるときは画面に出ている方の文字で検索して下さい。

この4つは、パソコンの表示言語にかかわらずアルファベットのまま表示されます。一方、列の見出しは「プロトコル/ローカル アドレス/外部アドレス/状態」と日本語で出ることも、「Proto/Local Address/Foreign Address/State」と英語で出ることもあります(当サイトでは両方を確認しています)。どちらでも、右端の列が「状態」です。

netstatの状態の図解。「つながっている/待っているだけ」という見出しのもと、左に2台のパソコンが水色の線でつながり「ESTABLISHED 相手とやりとりできている」、右に1台がドア付きで点線が空中で止まり「LISTENING 話しかけられるのを待っている」とある
「LISTENING」がたくさん出ても、異常とは限りません

後で説明する「-a」を付けて実行すると、「LISTENING」の行が一気に増えます。知らないポート番号がずらりと並ぶので、不正なプログラムが動いているのではと不安になるかもしれません。

ですが「-a」は、Microsoft の説明どおり「すべてのアクティブな TCP 接続と、コンピューターがリッスンする TCP および UDP ポート」を表示するオプションです。増えた行は、もともとパソコンの中で待機していたものが見えるようになっただけです。

Windowsは、標準の状態でもいくつものポートを待ち受けています。当サイトが確認したパソコン(Windows 11・仕事で使っているもの)では、「LISTENING」の行が26ありました。「LISTENING」が並ぶこと自体は、めずらしいことではありません。ただしこの数はパソコンごとに大きく変わります(入れているソフトの数で増えます)ので、数を人と比べても意味はありません。

ヘルプで全てのオプションを表示する

「netstat」にはたくさんのオプションが用意されています。

しかし、ノンネットワークエンジニアの方には、これらのオプションはほとんど必要ありません。

ここでは、コマンドプロンプトで「netstat」のオプションを一覧表示する方法だけ説明しておきます。

「netstat」のオプションを一覧表示するには、コマンドプロンプトで次のように入力します。

オプションの表示
netstat /?

実行すると、次の様に全オプションと説明が表示されます。

C:\>netstat /?

プロトコルの統計と現在の TCP/IP ネットワーク接続を表示します。

NETSTAT [-a] [-b] [-e] [-f] [-n] [-o] [-p proto] [-r] [-s] [-x] [-t] [interval]

-a すべての接続とリッスン ポートを表示します。
-b それぞれの接続またはリッスン ポートの作成に使われた実行可能ファイルを表示します。場合により、よく知られた実行可能ファイルが複数の独立したコンポーネントをホストすることもあり、この場合、接続またはリッスン ポートの作成に使われたコンポーネント群が表示されます。この場合、実行可能ファイル名は下に [] で表示され、上には TCP/IP に到達するまで順に呼び出したコンポーネントが表示されます。このオプションには時間がかかり、十分なアクセス許可がないとエラーが発生することに注意してください。
-e イーサネットの統計を表示します。これは、-s オプションと併用できます。
-f 外部アドレスの完全修飾ドメイン名 (FQDN) を表示します。
-n アドレスとポート番号を数値形式で表示します。
-o 各接続に関連付けられたそれらを所有するプロセス ID を表示します。
-p proto proto で指定されたプロトコルの接続を表示します。
proto は次のいずれかです:
TCP、UDP、TCPv6、または UDPv6。
プロトコルごとの統計を表示するため、-s オプションと併用する場合、proto は次のいずれかです:
IP、IPv6、ICMP、ICMPv6、TCP、TCPv6、UDP または UDPv6。
-q すべての接続、リッスン ポート、およびバインドされている非リッスン TCP ポートを表示します。バインドされている非リッスン ポートは、アクティブな接続に関連付けられている場合と関連付けられていない場合があります。
-r ルーティング テーブルを表示します。
-s プロトコルごとの統計を表示します。既定では、IP、IPv6、ICMP、ICMPv6、TCP、TCPv6、UDP および UDPv6 の統計が表示されます。
-p オプションを使って、既定のプロトコルのサブセットを指定することもできます。
-t 現在の接続のオフロードの状態を表示します。
-x NetworkDirect の接続、リスナー、および共有エンドポイントを表示します。
-y すべての接続の TCP 接続テンプレートを表示します。他のオプションと併用することはできません。
interval 各表示で interval 秒間一時停止しながら、選択した統計を再表示します。統計の再表示を停止するには、Ctrl+C を押してください。
interval が省略された場合、現在の構成情報を一度だけ表示します。

もしオプション指定が必要になることがあれば「/?」で確認して下さい。

時々使うオプション

ノンネットワークエンジニアの方でも、時々使うかもしれない「netstat」のオプションをご紹介しておきます。

軽く知っておく程度で良いと思います。

-n

「-n」を使うと、実行結果にコンピュータ名やプロトコル名を使わず、IPアドレスとポート番号で情報を表示します。

コンピュータ名やプロトコル名を表示しないnetstatコマンド
netstat -n

「-n」を指定しない場合と比べて表示速度がかなり速いため、調べたいコンピュータのIPアドレスやポート番号があらかじめわかっている場合は、「-n」を指定するのがおすすめです。

-a

「-a」を使うと、接続と待ち受けをしているすべてのポートの状況を表示することができます。

すべてのポートの状況を表示するnetstatコマンド
netstat -a

例えば、コネクションを確立せずに通信するUDPの待ち受けポートを確認したい場合は「-a」の指定が必要になります。

-r

「-r」を指定するとルーティングテーブルを表示することができます。

ルーティングテーブルを表示するnetstatコマンド
netstat -r

※ルーティングテーブルは「route」コマンドでも表示することができます。

コマンドプロンプトでnetstat -rを実行した画面。インターフェース一覧にネットワークアダプターの名前が並び、その下にIPv4ルートテーブルが続いている

「tracert」で経路確認したときに、経路が間違っている場合は「netstat -r」でルーティングテーブルに問題がないかどうか確認しましょう。

「netstat」のまとめ

この記事では、通信状況を表示できるネットワークコマンド「netstat」の使い方を説明しました。

「netstat」を使うと、「netstat」を実行するコンピュータの通信状況を一覧表示することができます。

表示される情報には次の項目があります。

  • プロトコル
  • ローカルアドレス
  • 外部アドレス
  • 状態

ノンネットワークエンジニアは次の書式だけ覚えておきましょう。

この書式だけ覚えよう
netstat

「状態」の欄でよく見るのは ESTABLISHED(つながっている)、LISTENING(待っている)、TIME_WAIT(後片づけ中)、CLOSE_WAIT(相手が先に切った)の4つです。とくに「LISTENING」がたくさん並んでも、それだけでは異常とは言えません。

「この症状のときは、どのコマンドを使えばいいのか」を一覧で確かめたい方は、次の記事にまとめてあります。

関連記事