netstatのオプションを調べてみた
今春サーバを触っていくのにびくびくしてる人が1週間ですべき7のこと - カイワレの大冒険 Thirdで紹介したコマンドのなかにnetstatというコマンドがありますが、自分は「-na」ばかりで全然知らなかったので、ひと通り調べてみた。
(IPアドレスとかポートとか色々改変してます)
ひと通り調べた
とりあえず、まずはヘルプ。manでもよいかもしれない。
usage: netstat [-veenNcCF] [<Af>] -r netstat {-V|--version|-h|--help} netstat [-vnNcaeol] [<Socket> ...] netstat { [-veenNac] -I[<Iface>] | [-veenNac] -i | [-cnNe] -M | -s } [delay] -r, --route display routing table -I, --interfaces=<Iface> display interface table for <Iface> -i, --interfaces display interface table -g, --groups display multicast group memberships -s, --statistics display networking statistics (like SNMP) -M, --masquerade display masqueraded connections -v, --verbose be verbose -n, --numeric don't resolve names --numeric-hosts don't resolve host names --numeric-ports don't resolve port names --numeric-users don't resolve user names -N, --symbolic resolve hardware names -e, --extend display other/more information -p, --programs display PID/Program name for sockets -c, --continuous continuous listing -l, --listening display listening server sockets -a, --all, --listening display all sockets (default: connected) -o, --timers display timers -F, --fib display Forwarding Information Base (default) -C, --cache display routing cache instead of FIB -T, --notrim stop trimming long addresses -Z, --context display SELinux security context for sockets <Iface>: Name of interface to monitor/list. <Socket>={-t|--tcp} {-u|--udp} {-S|--sctp} {-w|--raw} {-x|--unix} --ax25 --ipx --netrom <AF>=Use '-A <af>' or '--<af>'; default: inet List of possible address families (which support routing): inet (DARPA Internet) inet6 (IPv6) ax25 (AMPR AX.25) netrom (AMPR NET/ROM) ipx (Novell IPX) ddp (Appletalk DDP) x25 (CCITT X.25)
バージョンも見てみる。
net-tools 1.60 netstat 1.42 (2001-04-15) Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang and others +NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N AF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE HW: +ETHER +ARC +SLIP +PPP +TUNNEL +TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB
んで、まず何もオプションつけずデフォルトで。
接続元(ローカル)と接続先(接続先)の情報が分かる。
プロトコルがTCPで、ssh使ってる有効な接続が一つあるという感じかな。
$ netstat Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 v-111-11-11-1.test:ssh test.test.co:4455666 ESTABLISHED
「-v, --verbose」少し詳細な情報を載せるバーボース。何が変わったのか分からないw
$ netstat -v Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 132 v-111.111-11-11.test:ssh test.test.co:23442530 ESTABLISHED
「-n, --numeric」名前解決しないで表示。全てIPアドレスで表示されているのが分かる。
「ssh」ではなくて、ポート番号(10022)になっていることも分かる。
$ netstat -n Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 68 ::ffff:111.111.11.11:10022 ::ffff:111.111.111.96:63530 ESTABLISHED
「-N, --symbolic」ハードウェアの名前解決をするというけれど、どこにハードウェアの情報載ってるんだ…
$ netstat -N Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 v-111-111-11-1.test:ssh test.test.co:63530 ESTABLISHED
「-c, --continuous」ずっと繰り返して表示。止まらないし、追いきれないのでどこまで使えるか分からない。
$ netstat -c Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 v-111-111-11-1.test:ssh test.test.co:63530 ESTABLISHED
「-a, --all」有効な接続以外も全て表示。空いてるポートを調べるときにこのオプションは有効だと思ってる。
$ netstat -a Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 *:smtps *:* LISTEN tcp 0 0 *:smtp *:* LISTEN tcp 0 0 *:pop3 *:* LISTEN tcp 0 0 *:imap *:* LISTEN tcp 0 0 *:http *:* LISTEN tcp 0 0 *:ssh *:* LISTEN tcp 0 0 *:https *:* LISTEN tcp 0 0 *:imaps *:* LISTEN tcp 0 0 *:pop3s *:* LISTEN tcp 0 0 v-111-11-111-11.test:ssh test.test.co:63530 ESTABLISHED udp 0 0 *:snmp *:*
「-e, --extend」拡張して表示。UserとかInodeの情報が追加されてる。
$ netstat -e Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State User Inode tcp 0 0 v-111-111-11-1.test:ssh test.test.co:63530 ESTABLISHED user 001450
「-p, --programs」プログラムやPID、使用してるユーザ名などが分かる。psコマンドの情報が少し加わった感じかな。
$netstat -p Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 v-111-111-11-1.test:ssh test.test.co:63530 ESTABLISHED 14501/sshd: username
「-o, --timers」ネットワーキングタイマー追加される。状態がkeepaliveになっていることが分かる。ゾンビセッションとかいるとき有効かな。
$ netstat -o Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State Timer tcp 0 0 v-111-111-11-11.test:ssh test.test.co:63530 ESTABLISHED keepalive (6903.82/0/0)
「-l, --listening」今度は有効な接続を除いて、LISTEN状態になっているもの表示
$ netstat -l Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 *:smtps *:* LISTEN tcp 0 0 *:smtp *:* LISTEN tcp 0 0 *:pop3 *:* LISTEN tcp 0 0 *:imap *:* LISTEN tcp 0 0 *:http *:* LISTEN tcp 0 0 *:ssh *:* LISTEN tcp 0 0 *:https *:* LISTEN tcp 0 0 *:imaps *:* LISTEN tcp 0 0 *:pop3s *:* LISTEN
「-T, --notrim」長い情報をトリムせずに全部表示してくれる。どこまで活躍するかは未だ不明。
$ netstat -T Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 v-111-111-11-11.test.net:ssh 99.123.5.33.25.dynamicIP.test.net:22467 ESTABLISHED tcp 0 0 v-111-111-11-11.test.net:ssh test.com:63530 ESTABLISHED tcp 0 0 v-111-111-11-11..test.net:ssh 99.test-222-131-225.test.net:21078 TIME_WAIT
「-u|--udp」udpのみ表示。なければ何も表示せず。
$ netstat -u Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State
「-w|--raw」IP、ICMPとかの接続を表示。
$ netstat -w Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State
「-i, --interfaces」インターフェースの情報を表示。「RX-OK」は正常に受信したパケット。「TX-OK」は正常に送信したパケット。
今のところあまり使う機会ない…
$ netstat -i Kernel Interface table 仮想サーバ Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg lo 16436 0 107287 0 0 0 107287 0 0 0 LRU venet0 1500 0 402647 0 0 0 369962 0 0 0 BOPRU venet0:0 1500 0 - no statistics available - BOPRU ------ 実サーバ Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg eth0 1500 0 3644266 0 0 0 209457 0 0 0 BMRU lo 16436 0 8531612 0 0 0 8531612 0 0 0 LRU
「-s, --statistics」統計表示。統計的に見る前に既にiptablesではじいたりしてるかもしれないし、
どこまで使えるか分からない…
$ netstat -s Ip: 50000000 total packets received 0 forwarded 0 incoming packets discarded 500000 incoming packets delivered 50000 requests sent out Icmp: 500 ICMP messages received 0 input ICMP message failed. ICMP input histogram: destination unreachable: 191 echo requests: 1000 echo replies: 40000 50940 ICMP messages sent 0 ICMP messages failed ICMP output histogram: destination unreachable: 2 echo request: 499992 echo replies: 12222 IcmpMsg: InType0: 49222 InType3: 1444 InType8: 1444 OutType0: 1444 OutType3: 2 OutType8: 1111 Tcp: 11111 active connections openings 11111 passive connection openings 11111 failed connection attempts 1111 connection resets received 1 connections established 11111 segments received 11111 segments send out 112 segments retransmited 0 bad segments received. 2222 resets sent Udp: 51444 packets received 6 packets to unknown port received. 0 packet receive errors 50000 packets sent
「-C, --cache display routing cache instead of FIB」ルーティング情報を得るというけれど、その情報が必要なときがまだない…
$ netstat -C Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 v-111-111-11-11.test:ssh test.test.co:6322 ESTABLISHED
「-F, --fib」Cオプションの対抗かな。こっちがデフォルト。netstatでキャッシュを追う状態に見舞われたことがないので、分からない… 無知…
$ netstat -F Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 v-111-111-11-11.test:ssh test.test.co:6322 ESTABLISHED
「-r, --route」ルーティングテーブルが分かる。routeコマンドやtracertコマンドもあるので、netstatを使う出番がどこまであるのか分からない…
$ netstat -r Kernel IP routing table 仮想サーバ Destination Gateway Genmask Flags MSS Window irtt Iface 192.168.1.0 * 255.255.255.0 U 0 0 0 venet0 169.254.0.0 * 255.255.0.0 U 0 0 0 venet0 default 192.168.1.1 0.0.0.0 UG 0 0 0 venet0 ------- 実サーバ Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface 192.168.1.0 * 255.255.255.0 U 0 0 0 eth0 169.254.0.0 * 255.255.0.0 U 0 0 0 eth0 default test.test.t 0.0.0.0 UG 0 0 0 eth0
プロトコルの種別で表示。「inet(IPv4)」のものを表示。
$ netstat -A inet Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address
これはIPv6のものを表示。netstatでこのレベルの切り分けが必要なときはいまだ出てこず…
$ netstat -A inet6 Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 120 v-111-111-11-11.test:ssh test.test.co:635330 ESTABLISHED
終わりに
ひと通り使ってみたけど、netstatで知りたい情報って、空いてるポートだったり、どういう状態にあるかだったりするので、a, n, t, oあたりが自分はよく使う気がする。
つまり、ESTBLISHとLISTEN含めて名前解決せず表示させたり、TCPでkeepalivedもしくはそうではないセッションがどれだけあるか調べたいときなど。
grepさせて、wc -lすることで、セッション数も把握できるし、特にhttpd周りはセッションが増えるので、無駄にコネクションが増えてないか見たりするときに自分は使ってるかな。
ただ、他のオプションももっと活用できる気はするので、よかったら使いかた教えて頂けると助かったります!
かなーりざっくりした記事ですいませんが、何か参考になればとー!