netstatコマンドとは?ネットワーク管理の基本Tips

netstatコマンドはRHEL 7などで非推奨となり、代替コマンドが用意されています。ただし、ssコマンドはまだ不十分な点が多いとの報告もあるため、個別にnetstatコマンドを導入して利用する方が利便性が高い場合も少なくないようです。

» 2014年12月10日 19時38分 公開
[海上忍,@IT]

バックナンバー

連載バックナンバー

 本連載では、ネットワーク管理の基本コマンドを順を追って紹介していきます。基本書式と用法、主要なオプション、用例サンプルを示しますので、manやhelp代わりに通読し、各コマンドでできることを順次おさらいしてみてください。今回は、ネットワークに関する情報を取得する際によく用いられる「netstat」コマンドです。

netstatとは?

 CentOS 7およびRed Hat Enterprise Linux(RHEL) 7以降、ネットワークに関連した一部のコマンドは非推奨となり、デフォルトではインストールされなくなりました。netstatコマンドも非推奨となりましたが、代替の「ss」コマンドは挙動が異なる点が多い上に、不具合も報告されており、netstatコマンドを必要とする場面は多そうです。

 デフォルトインストールされない場合は、明示的に導入する必要があります。RHEL環境であればnet-toolsパッケージからyumコマンドで導入します。

# yum install net-tools

netStatコマンドの書式

netstat [オプション]

※[ ]は省略可能な引数を示しています



概要

 名称の由来とされる「Network statistics」の意味の通り、ネットワーク接続やルーティングの状況、ネットワークインターフェース(NIC)の状態を報告するコマンドです。Linuxの場合、現在は非推奨扱いとされている「net-tools」に収録されているため、利用するディストリビューションによっては同パッケージの追加インストールが必要になります。

 netstatコマンドは、TCPおよびUDPプロトコルを対象に統計情報を表示します。TCPソケットを表示する「-t」、UDPソケットを表示する「-u」オプションと、多数用意されているオプションを組み合わせることが基本的な書式となります。不要なポートを絞り込みセキュリティを高めたい、管理しているサーバーにTIME_WAITやCLOSE_WAITのソケットが多く残るので原因を調べたい、といった場面で利用されます。

主なnetstatコマンドのオプション

オプション 意味
-A 接続状態を表示するアドレスファミリを指定する
-I 指定したNICの情報のみ表示する(ex. -Ieth0)
-a 全てのアクティブなソケットを表示する
-c 1秒ごとに更新しつつ表示する
-e 詳細情報を表示する
-g IPv4とIPv6のマルチキャストグループメンバーシップ情報を表示する
-i 全てのNICの状態テーブルを表示する
-l 接続待ち(LISTEN)状態にあるソケットのみ表示する
-n ホストやユーザーの名前解決を行わず数字のまま出力する
-o ネットワーキングタイマーの情報を出力する
-p ソケットが属すプログラムのPIDとプロセス名を表示する
-r ルーティングテーブルを表示する
-s 各プロトコルの統計情報を表示する
-t TCPソケットを表示する
-u UDPソケットを表示する
-v 詳細な情報を表示する

書式解説:インターフェースの状態を示す記号と意味

 上記、コマンドオプションのうち、「-i」オプションでは、インターフェースの状態を示す記号と数値の組み合わせで状態が返されます。下記の表はそれぞれの意味一覧です。

記号 意味
Iface 対象となるネットワークインタフェース名
MTU MTU値
RX-OK 正常に受信したパケットの数
RX-ERR 受信時にエラーとなったパケットの数
RX-DRP 受信時に破棄したパケットの数
RX-OVR 受信時にオーバーロードしたパケットの数
TX-OK 正常に送信できたパケットの数
TX-ERR 送信時にエラーとなったパケットの数
TX-DRP 送信時に破棄したパケットの数
TX-OVR 送信時にオーバーロードしたパケットの数
Flg フラグ

待ち受け状態のソケットをTCPに絞り込んで出力するには?

 TCPプロトコルで通信を行う単位(ソケット)は、いくつかの通信の状態が存在します。そのうち待ち受け状態のソケット(LISTEN)を調べる場合は、オプションに「l」とTCPプロトコルに絞り込む「t」の2つを指定します。

$ netstat -lt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 localhost:smtp          0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:36287           0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:sunrpc          0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:ssh             0.0.0.0:*               LISTEN     
tcp        0      0 localhost:ipp           0.0.0.0:*               LISTEN     
tcp6       0      0 localhost:smtp          [::]:*                  LISTEN     
tcp6       0      0 [::]:53319              [::]:*                  LISTEN     
tcp6       0      0 [::]:sunrpc             [::]:*                  LISTEN     
tcp6       0      0 [::]:ssh                [::]:*                  LISTEN     
tcp6       0      0 localhost:ipp           [::]:*                  LISTEN   

特定のNICに関する情報を出力するには?

 サーバーに複数のNICが搭載されている場合、「-i」オプションを指定するとNICごとの通信状況を集計できます(オプション一覧を参照)。特定のNICのみ表示する場合は「-I」オプションを利用し、「-Ieth0」(デバイス名「eth0」)の要領で指定します。

$ netstat -Ieth0
Kernel Interface table
Iface      MTU    RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0      1500   106980      0      0 0         44130      0      0      0 BMRU

どのプロセスがどのポートを使用しているか調べるには?

 netstatコマンドに「-p」オプションを付けて実行すると、各ソケットを利用しているプログラムのプロセスIDを表示できます。多数のプロセス/サービスが稼働しているサーバーを対象にする場合は、grepにパイプすれば表示するソケットを絞り込むことができます。

 以下の実行例では、名称に「printer」(大文字/小文字を区別しない)を含むプロセスのみ表示しています。

$ netstat -p | grep -i printer
unix  3      [ ]         STREAM     CONNECTED     25854    2915/gsd-printer     
unix  3      [ ]         STREAM     CONNECTED     25860    2915/gsd-printer

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。