サーバーエンジニアになってから、ネットワークエンジニアでやってきたような作業をしてこなかったんですが、トラブルシューティングでパケットキャプチャしたほうがいいと同僚に言われて、久しぶりにトラブルシューティングでパケットキャプチャしてみることにしました。
ネットワークエンジニアをしていたころ、、、というかインフラエンジニアなのでどちらも対応しますが、ネットワークをメインでやっていた時は、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」と表示される場合は、インターフェースを指定してください。
# tcpdump -i ens33
[root@localhost ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
■パケットの内容を ASCII で表示する
リアルタイムにログを見る場合は、これがあるとかなり見やすいです。
# tcpdump -A
■パケットの内容を 16進とASCIIで表示する
Wiresharkで表示されるような内容ですが、見にくくなります。
# tcpdump -X
■キャプチャ結果をファイルに出力する
# tcpdump -w <ファイル名>
出力されたファイルは Wireshark で開けます。その為、ファイル名は「XXX.cap」としておくと便利です。
■ホストを指定する
ホストを指定しないとかなりのパケットが出力されるので、見にくくなりますのでお勧めです。
# tcpdump host 10.0.0.1
■ポートを指定する
ホストの指定同様、フィルタをかけないと出力が多すぎて見にくいので、ポートを指定します。ただし、指定を間違えると欲しいものがとれない場合があるので注意。
# tcpdump port 80
また、発信または受信だけに絞りたい場合は、それぞれ dst, src を使います。ちなみに、これはホスト指定でも使えます。
# tcpdump dst port 80 (発信)
# tcpdump src port 80 (受信)
後、長時間、キャプチャし続ける場合は、データ量がすごいことになるので注意してくださいね。
これ本当に便利なので、サーバーなどでログがあまり出力されない場合などに使用すると便利です。