netstat

ここでは、Windows2000/XP(ウィンドウズ2000/XP)を使ってネットワークの構築やトラブルシューティングを行う上で最低限知っておきたいコマンドのひとつであるnetstatを紹介します。 netstatを使うと、ネットワーク関連の様々な情報を取得できます。 トラブルシューティングなどでは、通常、状態を知る事からはじめます。 netstatの使い方を知っていると、様々な状態を取ることができるので素早くトラブルに対応できるようになると思われます。

netstatで出来ること

netstatの主な機能としては、以下の3つが挙げられます。

  • 全ての接続、リッスンポート(listen port)を表示する
  • 全ての経路表(ルーティングテーブルを表示する)
  • ネットワーク関連統計情報を表示する

以下、それぞれを説明したいと思います。

接続を表示する

「netstat -a」で全ての接続を表示できます。 接続にはTCPとUDPの2種類があります。 TCP接続には、LISTENING、CLOSED、SYN_SENT、SYN_RECEIVED、ESTABLISHED、FIN_WAIT_1、FIN_WAIT_2、CLOSE_WAIT_2、CLOSE_WAIT、CLOSING、LAST_ACK、TIME_WAITなどの状態があります。 これらの状態はTCP取り得る状態そのままです。 ここでは、とりあえず、最も良く見るLISTENING状態と何かをしている事がわかるESTABLISHED状態の説明をしたいと思います。

netstat -a 実行例

C:\> netstat -a

Active Connections

  Proto  Local Address      Foreign Address   State
  TCP    MyPC:epmap         MyPC:0            LISTENING
  TCP    MyPC:microsoft-ds  MyPC:0            LISTENING
  TCP    MyPC:2118          MyPC:0            LISTENING
  TCP    MyPC:netbios-ssn   MyPC:0            LISTENING
  TCP    MyPC:2117          MyPC:0            LISTENING
  TCP    MyPC:2118          localhost:2117    ESTABLISHED
  UDP    MyPC:microsoft-ds  *:*
  UDP    MyPC:1026          *:*
  UDP    MyPC:ntp           *:*
  UDP    MyPC:netbios-ns    *:*
  UDP    MyPC:netbios-dgm   *:*
  UDP    MyPC:ntp           *:*

「netstat -a」では、ホスト名、プロトコル、Well known portなどの名前を解決して表示します。 名前解決を行いたくない場合には、-n オプションを追加して「netstat -na」とすると、全て数字で表示されます。

netstat -na 実行例

C:\> netstat -na

Active Connections

  Proto  Local Address        Foreign Address      State
  TCP    0.0.0.0:135          0.0.0.0:0            LISTENING
  TCP    0.0.0.0:445          0.0.0.0:0            LISTENING
  TCP    0.0.0.0:2118         0.0.0.0:0            LISTENING
  TCP    10.20.123.9:139      0.0.0.0:0            LISTENING
  TCP    127.0.0.1:2117       0.0.0.0:0            LISTENING
  TCP    127.0.0.1:2118       127.0.0.1:2117       ESTABLISHED
  UDP    0.0.0.0:445          *:*
  UDP    0.0.0.0:1026         *:*
  UDP    10.20.123.9:123      *:*
  UDP    10.20.123.9:137      *:*
  UDP    10.20.123.9:138      *:*
  UDP    127.0.0.1:123        *:*

このように、TCPやUDPの接続状態を知ることで、自分がどことどのように通信しているかを知ることができます。

経路表を表示する

「netstat -r」で全ての経路を表示できます。 同一セグメントにある機器に対してトラブルシューティングなどをする場合には、arpコマンドと組み合わせると良いと思われます。

netstat -r 実行例

C:\> netstat -r


Route Table
===================================================================
Interface List
0x1 ........................... MS TCP Loopback interface
0xc0003 ...09 00 a2 31 fc d7 ..... Intel(R) 100 Network Connection
===================================================================
===================================================================
Active Routes:
Network Destination       Netmask      Gateway    Interface  Metric
         0.0.0.0          0.0.0.0  10.11.123.1  10.11.123.9      20
     10.11.123.0    255.255.255.0  10.11.123.9  10.11.123.9      20
     10.11.123.9  255.255.255.255    127.0.0.1    127.0.0.1      20
  10.255.255.255  255.255.255.255  10.11.123.9  10.11.123.9      20
       127.0.0.0        255.0.0.0    127.0.0.1    127.0.0.1       1
       224.0.0.0        240.0.0.0  10.11.123.9  10.11.123.9      20
 255.255.255.255  255.255.255.255  10.11.123.9  10.11.123.9       1
Default Gateway:     10.11.123.1
===================================================================
Persistent Routes:
  None

ネットワーク関連統計情報を表示する

「netstat -s」でネットワーク関連統計情報を表示できます。 下記例は、Windows XPでnetstat -s を行ったものです。 「ipv6 install」コマンドを実行してある環境では、IPv6に関する情報も表示されます。

netstat -s 実行例

C:\> netstat -s

IPv4 Statistics

  Packets Received                   = 1537824
  Received Header Errors             = 0
  Received Address Errors            = 1834
  Datagrams Forwarded                = 0
  Unknown Protocols Received         = 0
  Received Packets Discarded         = 0
  Received Packets Delivered         = 1536696
  Output Requests                    = 776822
  Routing Discards                   = 0
  Discarded Output Packets           = 0
  Output Packet No Route             = 0
  Reassembly Required                = 0
  Reassembly Successful              = 0
  Reassembly Failures                = 0
  Datagrams Successfully Fragmented  = 0
  Datagrams Failing Fragmentation    = 0
  Fragments Created                  = 0

ICMPv4 Statistics

                            Received    Sent
  Messages                  545         368
  Errors                    0           4
  Destination Unreachable   0           0
  Time Exceeded             0           0
  Parameter Problems        0           0
  Source Quenches           0           0
  Redirects                 0           0
  Echos                     62          306
  Echo Replies              42          58
  Timestamps                0           0
  Timestamp Replies         0           0
  Address Masks             0           0
  Address Mask Replies      0           0

TCP Statistics for IPv4

  Active Opens                        = 1128
  Passive Opens                       = 106
  Failed Connection Attempts          = 5
  Reset Connections                   = 213
  Current Connections                 = 2
  Segments Received                   = 1524295
  Segments Sent                       = 773351
  Segments Retransmitted              = 15

UDP Statistics for IPv4

  Datagrams Received    = 9142
  No Ports              = 2756
  Receive Errors        = 0
  Datagrams Sent        = 3082

繰り返し機能

netstatコマンドの最後に数字を渡すと、渡したインターバル毎に実行を繰り返します。 例えば、「netstat -s 1」とすると、1秒毎にネットワーク関連統計情報を表示します。 このようなインターバルを設定して監視を行うと、ローカルコンピュータがどのようなパケットを出しているのかの概要がつかめます。 このインターバル機能は、組み合わせによって色々な使い方があるので覚えておくと便利です。 指定したインターバル毎に実行を繰り返すループを抜けるには「Cntl-C(コントロールキーを押しながらcボタンを押す)」を押します。

netstatコマンドの最後のインターバルを省略すると、一度だけ結果を表示して終わります。

netstatを自作したい場合

netstatと同様の機能を持つプログラムを自作したくなった場合にはこちらをご覧ください。

YouTubeで技術解説やってます!