 netstat 〜ホストのネットワーク統計や状態を確認する
加地眞也 2002/1/30 |
netstatコマンドは、ホストのネットワーク接続状態やソケット/インターフェイスごとのネットワーク統計などを確認するためのコマンドだ。ホストが現在実行している接続一覧とそのステータスを確認できるほか、IPやTCP/UDP以下の各パケット統計やエラー状態なども調べられる。ホストにおけるネットワーク調査全般の総合的なコマンドを意図しているので、ルーティング・テーブルの確認など、ほかのコマンドと同様の機能も実装されている。
なお、各機能の設定については、ifconfigやrouteなどの専用コマンドまたはGUIによるプロパティ設定が必要だ。
●Windowsの場合 netstat[
-a][ -e][ -n][ -s][ -p プロトコル][ -r][
インターバル]
オプションなし |
現在の有効な接続(ESTABLISHED)のみを表示する |
-a |
現在のすべての接続を表示する |
-e |
インターフェイス・レベル(イーサネット)の統計情報を表示する |
-n |
出力をIPアドレスなど数値のみに抑制する(DNS逆引きを行わないなど)。ほかのオプション内容へ影響する |
-s |
プロトコルレベル(IP/TCP/UDP/ICMP)の統計情報を表示する |
-p |
プロトコルごとの接続をリストする。プロトコルにはTCPかUDPを指定する。-sとともに使用すると、そのプロトコルに関する情報のみの表示を行う |
-r |
ルーティング・テーブルを表示する |
インターバル |
この間隔で連続自動実行する。単位は秒 |
●Linuxの場合 ――接続一覧表示 netstat[ -vnNcaeol][ ソケットレベル]
――インターフェイスごとの統計表示 netstat[ -veenNac]
-i
――マスカレード機能の統計表示 netstat[
-cnNe] -M
――ネットワーク全般の統計表示 netstat -s[ ソケットレベル]
――ルーティング・テーブルの表示 netstat[ -veenNcCF][ -A
アドレスファミリ名] -r
――ヘルプやバージョン表示 netstat -V netstat
-h
オプションなし |
現在の有効な接続(ESTABLISHED)のみを表示する |
-v |
詳細モード |
-n |
出力をIPアドレスなど数値のみに抑制する(DNS逆引きを行わないなど)。ほかのオプション内容へ影響する |
-N |
インターフェイス名の解決を行う |
-c |
連続表示 |
-a |
現在のすべての接続を表示する |
-e |
拡張表示モード。eeでさらに拡張された表示を行う(主に-rオプションと組み合わせて用いる) |
-o |
ネットワーク・タイマを表示する |
-l |
LISTEN状態の接続のみを表示する |
ソケットレベル |
表示するソケット種別を指定する。TCP(「-t」または「--tcp」)、UDP(「-u」または「--udp」)、そのほかRAWやICMPなど(「-w」または「--raw」)、UNIXドメイン・ソケット(「-x」または「--unix」:-sオプションでは無効)などが指定できる。省略されると表示可能なソケットすべて |
-i |
インターフェイスごとのパケット統計を表示する |
-M |
マスカレード接続の表示を行う |
-s |
ネットワーク統計を表示する |
-t | -u | -w |
TCP(「-t」)、UDP(「-u」)、そのほかIPとICMP(「-w」)のみ表示する |
-C |
カーネル・キャッシュでのルーティング・テーブル情報を表示する |
-F |
FIB(Forwarding Information
Base:Linuxにおけるルーティング・テーブルの実装方式。あて先IPアドレスをキーに経路情報を効率的に配置して、性能の向上を図っている)。テーブルからのルーティング・テーブル情報を表示する |
-r |
ルーティング・テーブル情報を表示する |
-A |
プロトコル種別ごとに結果を表示する。デフォルトは「inet(IPv4)」。「ipx(IPX)」「inet6(IPv6)」などが使用できる |
-V |
バージョン情報を表示する |
-h |
ヘルプを表示する |
■ネットワーク接続一覧の確認
Windows/Linuxともに、「netstat
-a」コマンドによって、現在のネットワーク接続の一覧が表示される。ネットワーク接続とは、主にTCP接続におけるコネクションだ。つまり、ホストのトランスポート層におけるプロトコル情報を表示する。ただし、UDPやRAW(TCP/UDPではないそのほかの任意のプロトコル)ソケットについてもリストアップされる。
単にパラメータなしの場合には、ESTABLISHED状態(接続中)のコネクションのみが表示される。Linuxの場合、単に-aオプションだけではUNIXドメイン・ソケットなども含めて表示されるので、「netstat
-aA inet」としてIPv4のみに限定してもよいだろう。
●Windowsでの使用例 |
C:\>netstat -an
Active Connections
Proto(1) Local Address(2) Foreign Address(3) State(4) TCP 0.0.0.0:53 0.0.0.0:0 LISTENING TCP 0.0.0.0:80 0.0.0.0:0 LISTENING <--(a) TCP 0.0.0.0:135 0.0.0.0:0 LISTENING TCP 0.0.0.0:443 0.0.0.0:0 LISTENING TCP 0.0.0.0:445 0.0.0.0:0 LISTENING TCP 0.0.0.0:1032 0.0.0.0:0 LISTENING TCP 0.0.0.0:1034 0.0.0.0:0 LISTENING TCP 0.0.0.0:1984 0.0.0.0:0 LISTENING TCP 0.0.0.0:1987 0.0.0.0:0 LISTENING TCP 0.0.0.0:1990 0.0.0.0:0 LISTENING TCP 192.168.1.10:80 192.168.1.11:1031 ESTABLISHED <--(c) TCP 192.168.1.10:139 0.0.0.0:0 LISTENING TCP 192.168.1.10:1984 192.168.1.11:23 ESTABLISHED TCP 192.168.1.10:3342 192.168.20.04:80 TIME_WAIT UDP 0.0.0.0:135 *:* UDP 0.0.0.0:162 *:* UDP 0.0.0.0:445 *:* UDP 0.0.0.0:1031 *:* UDP 0.0.0.0:1033 *:* UDP 0.0.0.0:1035 *:* UDP 0.0.0.0:1989 *:* UDP 0.0.0.0:3456 *:* UDP 127.0.0.1:53 *:* UDP 127.0.0.1:1206 *:* UDP 127.0.0.1:1988 *:* UDP 192.168.1.10:53 *:* UDP 192.168.1.10:137 *:* UDP 192.168.1.10:138 *:* <--(b) | |
この例では多少分かりやすくするために、-nオプションも指定して「IPアドレス」と「ポート番号」だけで表示させている。-nを付けない場合には、ポート番号ではなくサービス名が、Linuxで「/etc/sevices」ファイル、Windowsで「Windows
ディレクトリ\system32\drivers\etc\services」ファイルで記載された名前で表示される。また、DNS逆引きによるホスト名解決も行われるが、DNSに登録されていないIPアドレスがあると、DNS検索がタイム・アウトするまで表示が行われないので注意しよう。
Linuxでは多少列が多くなるが、基本的には同じ内容だ。列はそれぞれ以下の意味を持っている。
(1)
プロトコル種類 TCP/UDP/RAWなど、コネクションのトランスポート種別が表示される
(2)
ローカル(接続元)ホストのIPアドレスとポート名(番号) IPアドレスは特定のアドレスとソケットがバインドされている場合にはそのアドレスが、特定されていない場合には「0.0.0.0」(自身が持つどのインターフェイスへの接続でも受け付ける場合)と表示される
(3) 接続先ホスト名(IPアドレス)とポート名(ポート番号)
(4) 接続の現在のステータス
ここでまず、ローカルからどのホストのどのアプリケーション(ポート番号)への接続が行われているかに着目しよう。StateがESTABLISHEDとなっているのが現在有効な接続だ。例えば(c)では、ローカルのHTTPサーバ(ポート80)へ「192.168.1.11」から接続されていることが分かる。ただし、これは接続状態を持つTCPの場合だけだ。UDPはそもそも状態が存在しないので表示されない。
StateがLISTENである接続は、外部からの接続待ち受け(ソケットのLISTEN状態)を行っていることを示している。例えば(a)の行は、HTTPサーバ(ポート80)への接続を待ち受けている。つまり、サーバ・プロセスによって今後接続が開始されるかもしれないことを示している。特にインターネットに直接接続されているホストでは、不用意に起動して不正侵入の足掛かりになるプロセスやサービスがないかどうか確認することもできるだろう。例では、(b)はNetBIOSデータグラムへの接続待ち受けであり、大変危険であると判断できる。
また、TCPとUDPで同じポート番号を待ち受けしている場合もある(UDPでは「Foreign
Address」が「*:*」となっている接続)。これはアプリケーションでの対応にもよるが、どちらの通信でも可能なアプリケーションということだ。Linuxの場合には-lオプションを用いて、明示的にLISTEN(とESTABLISHED)状態のソケットだけを表示することもできる。
●Linuxでの使用例 |
[root@host1 ~]# netstat -alnA inet Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 138 192.168.1.11:23 192.168.1.10:2935 ESTABLISHED tcp 0 0 0.0.0.0:139 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:5680 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:901 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:98 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:79 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:143 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:110 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:23 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:113 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN udp 0 0 192.168.1.11:138 0.0.0.0:* udp 0 0 192.168.1.11:137 0.0.0.0:* udp 0 0 192.168.2.11:138 0.0.0.0:* udp 0 0 192.168.2.11:137 0.0.0.0:* udp 0 0 0.0.0.0:138 0.0.0.0:* udp 0 0 0.0.0.0:137 0.0.0.0:* udp 0 0 192.168.1.11:123 0.0.0.0:* udp 0 0 127.0.0.1:123 0.0.0.0:* udp 0 0 0.0.0.0:123 0.0.0.0:* udp 0 0 0.0.0.0:111 0.0.0.0:* | |
なお、アドレスが「0.0.0.0」となっている場合は、そのソケットはホストに存在するあらゆるIPアドレスとも結び付けられている(バインド)。明示的にIPアドレスが振られている場合には、そのIPアドレスへの接続のみと通信する。ホストがマルチホームとなっていた場合には、どのインターフェイスから接続されるか分からないために必要となる。
■ネットワーク統計情報
「netstat
-s」は、ホストのネットワーク統計情報を表示する。IPやTCP/UDP、ICMPといったプロトコルごとの統計情報が確認できる。それぞれ、該当するOSのプロトコル・スタックごとに処理された結果となっている。必然的に、IP統計にはTCP/UDP/ICMPの統計も含まれていることに注意しよう。こうした統計からは、そのホストでのプロトコルごとの処理の様子、正常にネットワーク機能が動作しているかどうかをうかがうことができる。例えば統計上処理されたパケットが0ならば、そのホストのネットワーク機能が正しく機能していないと考えることができる。ある特定のネットワーク処理を行って、その前後で比較するのもよいだろう。
なお、これらの統計値はOS起動時からの積算値だ。また明示されていない場合には、マルチホーム・ホストでは複数のインターフェイスの合計値となる。WindowsとLinuxでは統計情報に差異こそあるが、大体は似た内容だ。例を基に解説しよう。
●Windowsでの使用例 |
C:\>netstat -s
IP Statistics(a)
Packets Received = 291212 (1) Received Header Errors = 0 (2) Received Address Errors = 0 (3) Datagrams Forwarded = 0 (4) Unknown Protocols Received = 0 (5) Received Packets Discarded = 0 (6) Received Packets Delivered = 291212 (7) Output Requests = 237348 (8) Routing Discards = 0 (9) Discarded Output Packets = 0 (10) Output Packet No Route = 0 (11) Reassembly Required = 0 <-+ Reassembly Successful = 0 +-(12) Reassembly Failures = 0 <-+ Datagrams Successfully Fragmented = 0 <-+ Datagrams Failing Fragmentation = 0 +-(13) Fragments Created = 0 <-+
ICMP Statistics(b)
Received Sent Messages 220 (14) 208 (15) Errors 0 (16) 0 (17) Destination Unreachable 160 144 <-+ Time Exceeded 0 0 | Parameter Problems 0 0 +-(18) Source Quenches 0 0 | Redirects 0 0 | Echos 28 36 | Echo Replies 32 28 | Timestamps 0 0 | Timestamp Replies 0 0 | Address Masks 0 0 | Address Mask Replies 0 0 <-+
TCP Statistics(c)
Active Opens = 18613 (19) Passive Opens = 737 (20) Failed Connection Attempts = 132 (21) Reset Connections = 1547 (22) Current Connections = 0 (23) Segments Received = 256836 <-+ Segments Sent = 220719 +-(24) Segments Retransmitted = 512 <-+
UDP Statistics(d)
Datagrams Received = 35313 (26) No Ports = 353 (27) Receive Errors = 3 (28) Datagrams Sent = 15710 (29) | |
●Linuxでの使用例 |
[root@host1 ~]# netstat -s Ip:(a) 38930 total packets received(1) 0 forwarded(4) 0 incoming packets discarded(6) 35306 incoming packets delivered(7) 7557 requests sent out(8) Icmp:(b) 3040 ICMP messages received (14) 0 input ICMP message failed. (16) ICMP input histogram: <-+ destination unreachable: 3040 +-(18) timeout in transit: 117 | echo replies: 14 <-+ 3040 ICMP messages sent (15) 0 ICMP messages failed (17) ICMP output histogram: <-+-(18) destination unreachable: 3040 <-+ Tcp:(c) 0 active connections openings (19) 0 passive connection openings (20) 0 failed connection attempts (21) 0 connection resets received (22) 1 connections established (23) 581 segments received <-+ 392 segments send out +-(24) 0 segments retransmited <-+ 0 bad segments received. (25) 0 resets sent (22) Udp:(d) 3205 packets received (26) 3040 packets to unknown port received. (27) 0 packet receive errors (28) 4122 packets sent (29) TcpExt: | |
(a)
IP 処理したIPパケットの統計値。通常のクライアント機やサーバであれば、単にエラー・パケットが報告されていないかどうかなどを確認しよう。通常、かなりの高負荷がかかっているなどの状況でなければ、ほとんどエラーや破棄パケットの発生はないはずだ。また、マルチホーム・ホストでルーティングを行っている場合には、ルーティング関連パケット数のほか、IPパケットのフラグメンテーション(分割)と再構成パケット数にも着目しよう。あまり数や比率が高いようであれば、それだけ処理負荷がかかることになり、ネットワークのパフォーマンスにも影響する。それぞれのインターフェイスのMTUが適切かどうか検討すべきだ。
(1) 受信IPパケット総数 (2) IPヘッダにエラーが発生していた受信IPパケット数 (3) アドレスにエラーが発生していた受信IPパケット数 (4)
IPフォワーディング(ルーティング)されたIPパケット数。つまり自身で受信したのではなく、ほかのホストのために転送したIPパケット数だ (5)
上位プロトコルが不明なIPパケット数。TCPやUDPなど自身でハンドリング可能なプロトコルでなかったパケット数である (6)
受信バッファが足りないなどの理由で上位プロトコル(TCP/UDPなど)へ届けられずに破棄された受信IPパケット数。ここが0でない場合には、受信バッファサイズを大きくすることも考慮しよう (7)
上位プロトコル(TCP/UDPなど)へ正常に届けられた受信IPパケット数 (8)
下位プロトコル(イーサネットなど)へ転送できた送信IPパケット総数 (9) 破棄されたルーティングIPパケット数 (10) 破棄された送信IPパケット数 (11) 経路が不明であったルーティングIPパケット数 (12)
再構成が必要だったIPパケット数/成功IPパケット数/失敗IPパケット数 (13)
フラグメントしたIPパケットの成功数/失敗数/作成したパケット数
(b) ICMP ICMPは、ルータやホスト間で通信されるネットワーク状態通知のためのパケットだ。つまり、ここに現れるのは利用状態というよりも、よりシステム的な情報ということになる。あまり気にしなくてよい場合も多いが、例えば「Redirect」メッセージが多く表示されていれば、ルーティング経路が間違っている可能性がある。「Source
Quench」が発生していたら、経路上のどこかでバッファ不足が発生しているのかもしれない。また、より厳密には、パケット数ではなくメッセージ数であることにも注意しよう。
(14)
受信したICMPメッセージ総数 (15)
送信したICMPメッセージ総数 (16)
受信に失敗したICMPメッセージ数 (17)
送信に失敗したICMPメッセージ数 (18) 送受信したICMP
Type別メッセージ数。メッセージタイプごとに集計表示される
(c)
TCP TCPはコネクション指向プロトコルであるので、パケット数ではなく主にコネクション数となることに注意しよう。
(19) Active
Open(LISTENしている別のソケットへ能動的に接続:クライアントとしての動作)した総数 (20) Passive
Open(LISTENしているソケットへ接続された受動的な接続:サーバとしての動作)した総数 (21) 接続失敗数 (22) リセットされた接続数(または送受信のそれぞれの数) (23) 現在のコネクション総数。「netstat
-a」でより詳細を確認できる (24)
送信/受信/(TCPにおけるパケット喪失時の)再送されたTCPセグメント(データ)数。再送数が多い場合は、ネットワーク経路などでパケットを喪失する現象が発生している (25) 不正なセグメントの受信数
(d)
UDP UDPではTCPと異なりコネクションの概念はないので、パケット単位の統計となる。
(26) 受信UDPパケット総数 (27)
該当する転送すべき上位アプリケーション(ポート番号)がなかったUDPパケット数。UDPは「勝手に送り付けられる」パケットなので、ここが比較的高い値になることもそれほど珍しくない (28) エラー受信UDPパケット数 (29) 送信UDPパケット総数
■インターフェイスごと/イーサネット・レベルでの統計情報
Linuxでは「netstat
-i」で設置されているインターフェイスごと(つまりイーサネット・レベルでもある)の統計情報を表示できる。
●Linuxでの使用例 |
[root@host1 ~]# netstat -i Kernel Interface table <-----------(4)----------> <-----------(5)----------> Iface(1) MTU(2) Met(3) RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg eth0 1500 0 32110 0 0 0 962 0 0 0 BRU eth1 1500 0 0 0 0 0 541 0 0 0 BRU lo 3924 0 6080 0 0 0 6080 0 0 0 LRU | |
(1)
インターフェイス名 このインターフェイスごとに集計された統計を各行に表示する
(2) インターフェイスごとのMTU値
(3) インターフェイスごとのメトリック数
(4)
受信関連統計値 順に、正常パケット数/エラー・パケット数/破棄パケット数/オーバーロード・パケット数
(5)
送信または転送関連統計値 順に、正常パケット数/エラー・パケット数/破棄パケット数/オーバーロード・パケット数を示す
Windowsでもインターフェイスごとではないが、イーサネット・レベルでの統計情報を表示できる。
●Windowsでの使用例 |
C:\>netstat -e Interface Statistics
Received Sent
Bytes 6852472 3329039 (1) Unicast packets 34716 34287 (2) Non-unicast packets 737 522 (3) Discards 0 0 (4) Errors 0 0 (5) Unknown protocols 0 (6) | |
(1)
受信/送信したデータの合計バイト (2)
受信/送信したユニキャスト・フレーム数 (3)
受信/送信した非ユニキャスト(ブロードキャストなど)フレーム数 (4)
受信/送信時に破棄されたフレーム数 (5)
受信/送信時にエラーになったフレーム数 (6)
上位プロトコルが不明なフレーム数
■ルーティング・テーブルの確認
「netstat -r」でルーティング・テーブルの表示が行える。表示される内容などはrouteコマンドとほぼ同様だ。詳しくはrouteコマンドを参照してほしい。
関連ネットワーク・コマンド/ツール |
 |
netstat 〜ホストのネットワーク統計や状態を確認する |
|
|