ネットワークエンジニアがよく使うツールと言えば、exping、teratermなどがありますが、ネットワークをメインでやっていた時は、トラブルシューティングでWireSharkを使っていました。パケットキャプチャと言えば、これですよね。
ただ、状況によってはWiresharkが使えないケースもあります。ソフトウェアをインストールできないとか、ミラーポートが設定できないとか。その他、サーバー側でパケットキャプチャしたいケースもあると思います。
そこで、便利なのがLinux、CentOS7でパケットキャプチャできるフリーツールtcmdumpがトラブル対応に便利です。
使い方は簡単で、入っていれば「tcpdump」とコマンドを実行するだけで使えますが、NICを指定しないと使えないケースもあると思いますので、オプションを紹介します。
ちなみに、「tcpdump」とコマンドがない場合は、yumなりでインストールしてください。
そして、オプションです。
[root@localhost ~]# tcpdump -h
tcpdump version 4.9.0
libpcap version 1.5.3
OpenSSL 1.0.1e-fips 11 Feb 2013
Usage: tcpdump [-aAbdDefhHIJKlLnNOpqStuUvxX#] [ -B size ] [ -c count ]
[ -C file_size ] [ -E algo:secret ] [ -F file ] [ -G seconds ]
[ -i interface ] [ -j tstamptype ] [ -M secret ] [ --number ]
[ -Q|-P in|out|inout ]
[ -r file ] [ -s snaplen ] [ --time-stamp-precision precision ]
[ --immediate-mode ] [ -T type ] [ --version ] [ -V file ]
[ -w file ] [ -W filecount ] [ -y datalinktype ] [ -z postrotate-command ]
[ -Z user ] [ expression ]
■インターフェースを指定する
まず、インターフェースの指定です。「0 packets captured」と表示される場合は、インターフェースを指定してください。
ちなみに、CentOS7 tcpdumpで0 packets capturedでパケットのキャプチャ量が増えない場合は、こんな感じです。
[root@localhost ~]# tcpdump
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on virbr0, link-type EN10MB (Ethernet), capture size 262144 bytes
^C
0 packets captured
0 packets received by filter
0 packets dropped by kernel
このまま放置していても一向に増えません。その場合は、インターフェースを指定してあげます。インターフェースの確認は「ifconfig」で行います。
[root@localhost ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
ここで確認したインターフェース名をオプションの「-i」で指定すればOKです。
# tcpdump -i ens33
■パケットの内容を ASCII で表示する
リアルタイムにログを見る場合は、これがあるとかなり見やすいです。
# tcpdump -A
このツールは本当に便利なので、サーバーなどでログがあまり出力されない場合や、トラブルシューティングに使用すると非情に助かります。
ただ、最近は通信が内部でも暗号化しているケースが増えてきて、だんだんと切り分けが難しくなってきています。