便利なコマンド - Netstat -an、そしてポート(Port)って何?

文書作成日 2002/8/25 最終更新日 2005/1/24

netstatってなに?

 netstatはネットワークへの接続状況を調べるためのコマンドです。
 まずWindows 9x系やMeの方はMS-DOSプロンプト、Windows 2000やXPの方はコマンドプロンプトを開いてください。
 そして[netstat](半角スペース)[オプション]と入力してください。間違っても[ ]の記号は入力しないでくださいね。

オプションスイッチについて

 例えば10秒ごとに[-n]で実行するなら、[netstat(半角スペース)-n(半角スペース)10]になります。
オプションスイッチ一覧
e NIC(LANカードなど)の通信の統計情報を表示
r ルーティング情報を表示
s プロトコルごとの統計情報を表示する
p p (半角スペース)[TCPもしくはUDP]で、指定したプロトコルごとの統計情報を表示
sp sp(半角スペース)[TCP, UDP, IP, ICMP]で、指定したプロトコルごとの統計情報を表示
オプションなし 現在動作している(ESTABLISHEDの)全てのコネクションを表示
a 全てのESTABLISHEDのコネクションと、接続可能な(受信待ちのListen状態にある)ポートを一覧表示する
n ドメイン名をDNSサーバーに問い合わせず、IPアドレスとポート番号を名前ではなく数字で表示する(そのため表示はやや早い)
an [a]と[n]をあわせたオプションスイッチ
数字 何秒ごとに再表示を行うのかをあらわす。10秒ごとなら[netstat(半角スペース)10]で自動的に10秒おきに起動する。停止させるには[Ctrl]+[c]を押す(忘れると永遠に実行されてしまいます)

表示の説明
Proto プロトコル。TCPやUDP
Local Address 自分自身のIPアドレスやホスト名と、ポート。IPアドレス:ポートとなります
Foreign Address 相手のIPアドレスやホスト名と、ポート。IPアドレス:ポートとなります
State そのコネクションの状態。
PID プロセスID(Windows XPで[o]を用いたときのみ)

TCP 接続の状態と Netstat の出力
SYN_SEND アクティブ オープンしています。
SYN_RECEIVED サーバーはクライアントからの SYN を受信しました。
ESTABLISHED クライアントはサーバーからの SYN を受信し、セッションが確立されました(つまり、送受信の真っ最中)。
LISTEN サーバーは接続を受け付けられます。
FIN_WAIT_1 アクティブ クローズの状態です。
TIMED_WAIT クライアントはアクティブ クローズ状態からこの状態に遷移しました。
CLOSE_WAIT パッシブ クローズ状態です。サーバーはクライアントから最初のFIN を受信しました。
FIN_WAIT_2 クライアントはサーバーから最初の FIN に対する肯定応答 ack を受信しました。
LAST_ACK サーバーは FIN を送信したときにこの状態に遷移しました。
CLOSED サーバーはクライアントからの ACK を受信し、接続がクローズしました。
引用:http://support.microsoft.com/default.aspx?scid=kb;ja;jp410350
TCPプロトコルの3-way-ハンドシェイクの説明もご覧ください。

ポート(Port)ってなに?

サーバーとクライアント

 あなたがどこかのサイトを見ているなら、Foreign Addressのport80に、あなたのパソコン(Local Address)の1024以降で予約済みでないランダムなポートとの間で、セッションが張られています。
 port80はhttpプロトコル(つまりInternet Explorerなどでサイトを閲覧する時に用いられる、最も代表的なプロトコル)で利用され、Webサーバー(サイトのページ等を格納して閲覧させるサーバー)のport80へ利用者が接続することになるのです。

 また[サーバー]とは、あるサービスを提供する側のコンピューターと考えてください。それに対して、そのサービスを提供してもらうコンピューターは[クライアント]です。
 もしもいま、netstatを実行したなら。Tef-Roomを表示させているWebサーバーは[サーバー(netstatの結果のForeign Address)]、このサイトを見ているあなたのパソコンは[クライアント(netstatの結果のLocal Address)]です。

ポートの範囲について

 またportは以下の2タイプに分けられ、さらにTCPとUDPそれぞれのプロトコルに分けられます。IANAではこれらのうちいくつかを予約(あるサービスで用いるので、予約していないサービスでは使わないでね、と宣言)しています。
 Well known portではない1024以降のポートを、サーバー側で用いるサービスもあります。
 例えばTCPプロトコルのport6699はWinMXというファイル交換サービスでよく用いられるポートです。もっともWinMXは、IANAのport一覧表には記載されていません(Unassignedとなっています)。
[注意]
 ちなみにICMPはPingなどでよく用いられるプロトコルですけど、portは用いません。
 代表的なポートをいくつか書いておきます。
よく用いられるport
23 TCP telnet(まず使わないですね)
25 TCP SMTP(メールの送信サーバー)
53 UDP DNS(ドメイン名解決)。よく初心者が「プロバイダーから攻撃された」と勘違いするサービス。
80 TCP http(ブラウザでのサイト閲覧)
110 TCP POP3(メールの受信サーバー)
135 TCP/UDP RPC(不具合が出るのでパソコンの設定からは塞げないようです)
137 TCP/UDP NetBIOS Name解決やMSネットワーク共有クライアント関連。LISTENなら有効のままなのでしょう。ルーターやパーソナルファイアーウォールの導入、もしくは不要ならばMSネットワーク共有クライアントを停止させるよう検討してください。
138
139
443 TCP/_UDP https(クレジットカードの番号を暗号化するときなどで利用)
445 TCP/_UDP dhSMB:ダイレクトホスティングServer Message Block。Windows2000のファイル共有、ユーザー認証(Windows2000とXPでデフォルトで有効という点で、迷惑なサービス)
515 TCP spool(プリンター関連)
1900 UDP SSDPSRV
3389 TCP XPのリモートデスクトップ
6257 UDP WinMX(職場で行うと査定にかなり響く、ファイル交換サービス)
6699 TCP
8431 TCP VirusBasterのWebTrap機能。127.0.0.1:8431
12345 TCP NetBus (有名なトロイ)

netstatでポートとサービスの関係を勉強しましょう♪

netstatをやってみましょう(Windows 2000)

 たとえばアンチウイルスソフトのメール保護機能が有効になっているなら。アンチウイルスソフトはループバックアドレス(この場合127.0.0.1であり、自分自身を表します)でメールを一旦受信して、ウイルススキャンを行います。
 ネットに接続してメールを送受信していない状態を例にします。
 オプションスイッチなしでは(メールの送受信のコネクションはまだ成立していないので)表示されず、[a]では[Local Address]の欄は[サーバー名:pop3]という表示になりますけど、[an]では[127.0.0.1:110]となります。

 例1:Windows 2000を起動した直後に[netstat -an]で、アンチウイルスソフトが起動している状態
 (MSネットワーク共有クライアント等はネットワークの設定から削っています)

 port135がListeningなのはRPC、port445はSMB Direct Hostingです。
 127.0.0.1:110はアンチウイルスソフトのメール保護機能によるものです。
 例2:例1の条件において、Internet Explorerでhttp://www.yahoo.co.jp/に接続しました。
 一番下の行は、アンチウイルスソフトのWEB接続保護機能によるものでしょうか?いずれにしても、これでは断言できません。

どのようなサービスによりこのような結果になるのか知りたい!(Windows XP)

 Windows XPなら、[o]スイッチが追加されています。例えば[an]の代わりに[netstat(半角スペース)-ano]を入力します。するとプロセス ID (識別番号、PID)が表示されます。
 Ctrl + Alt + Delete キーを押し、[タスクマネージャー]をクリックし、[プロセス] タブをクリックします。
 PID 列が表示されない場合は [表示] メニューの [列の選択] をクリックし、[PID (プロセス ID)] チェックボックスをオンにします。
 "PID" というラベルの付いた列のヘッダーをクリックし、プロセスを PID 順に並べ替えます。こうすることで、プロセス ID を見つけ、タスク マネージャに一覧表示されたプログラムと照合する作業が容易になります。
 引用:http://support.microsoft.com/default.aspx?scid=kb;ja;jp281336

Window XPでnetstatに挑戦!

 前回Windows 2000では、個別のプロセスが何なのか全て明らかにすることができませんでした。
 そこでWindwos XPを使ってもう一度。OSの起動直後にやってみました。
 アンチウイルスソフトによる保護は無効で、MSネットワーク共有クライアント等を外した状態です。
 タスクマネージャーからPIDを表示してみました。
 port135のPIDは696でsvchost.exeですけどRPCです。svchostは様々なサービスを実行するためのホストプロセスであり、実際には他のプロセスが起動しているのにこのようにsvchostと表示されるのです。
 port445はPIDが4でSystemで、SMB Direct Hosting(Windowsのファイル共有関連)です。
 port500のPIDが524なのはlsass.exeで、これはログオン資格の認証を実行する Windows のプログラムです。[管理ツール] - [サービス]ではSecurity Accounts Managerですね。
 port1027は何なのか、ちょっとわかりませんでした。


netstatのわかりづらい結果についての説明


port・ポートを開ける・閉じるってなに?

 よく質問掲示板で、ポートが開いている・ポートを閉じると書かれます。これは正式な言い方ではないみたいですけど、よく使われる言葉です。

 ポートを開けるとは、あるパソコンやルーターにそのポートへ接続できるように設定することを指すみたいです。
 ポートを閉じるとは、あるサービスやアプリケーションを使わないようにしてポートが開かないようにする、もしくは何かの方法でそのポートへ誰かが接続できないように設定することです。

ポートを閉じる?

 ルーターやパーソナルファイアーウォールでブロックする(portが開いていても外部からアクセスできなくなるようにする)、そしてそのportを開けるサービスそのものを停止させてはどうでしょう?

 UDP 123は時刻合わせの目的で起動している、Windows Timeサービスです。Windows XPではこのサービスにより、自動的に時間を合わせるように設定されています。
 でも[コントロールパネル] - [日付と時刻] - [インターネット時刻]タブ - [自動的にインターネット時刻サーバーと同期する]のチェックを外しても、解決しません。
 もしPort 123を塞ぎたいなら、[コントロールパネル] - [管理ツール] - [サービス] - [WindowsTime]を無効にしてください。
 でも職場のLANがドメイン構成なら、停止させない方がいいかもしれません。

 137-139関連ならMSネットワーク共有クライアント?停止させるにはこちらをごらんください。

 Windows 2000/XP のポート135と 445 が開いているなら。
 135はRPC(Remote Procedure Call)、445はSMB Direct Hosting で使用されるポートです。
 どちらもパーソナルファイアーウォールやルーター、ファイアーウォールでWAN側からLAN内部への予期せぬトラフィックはブロックしてください。

[注意]
[管理ツール] - [サービス]から[Remote Procedure Call]を無効にすれば135はふさがりますけど、様々な不具合が発生するため実際には停止させられないようです。
 port110でLISTENING、時々勝手にESTABLISHEDになるなら。
 パソコンに搭載されている自動メール受信チェック機能が有効になっていませんか?
 また127.0.0.1のIPアドレスなら、アンチウイルスソフトのメール保護機能でしょう。

 OSの起動直後にnetstat -anをやってみたら、どうみても怪しいportが開いているなら。
 自分でportを調べてみてください。何で使われているportですか?もしトロイ(Trojan)だったら困りますね・・・

netstatそのほかの情報

ファイルに結果を出力するには(ちょっと小技)

 例えば[-n]オプションを用いて実行した結果を、Cドライブにnetstat.txtという名前のテキストファイルとして出力するなら。
 [netstat(半角スペース)-n(半角スペース) >C:\netstat.txt]になります。


netstatの結果はどこまで信頼できるのでしょう?

 トロイなどの悪質プログラムには、netstatの結果を偽る機能を持つものが存在するようです(噂)。


2004年2月18日補足事項

 先日知人のパソコンが、外部からのポートスキャンとnetstatの結果がまったく合わず、ときおりどこかに変な通信をしていたのを確認しました。
 何かに感染していたのかもしれません、でも処分されてしまったのでよくわかりません・・・


関連情報

登録済みポートを一時ポートとして使用させない方法
トップページもっと知りたい、Windowsネットワーク!>便利なコマンド - Netstat -an、そしてポート(Port)って何?

ご意見はフォームメールへ
This contents was written by tef_tef.