RHEL系(CentOS)
---
サーバ運用でtcpdumpを障害切り分けで利用します。
その時に、頻繁に利用する「tcpdumpコマンド」のオプションを紹介いたします。
コピペして(覚書)利用できるようにケースに分けて
オプションの使用方法(サンプル)も合わせて紹介いたします。
【必須】押さえておきたい「tcpdump」オプション一覧
以下のオプションを併用することで、おおむねの事に対処が可能です。
オプション | 説明 |
-nn | ポートとホスト名の変換を行わずに、IPアドレスとポート番号で表示されます。 例: # tcpdump -nn ■設定前(-nnを設定しない) 14:46:17.453428 IP 192.168.11.10.60628 > isleofhoso04.ssh: Flags [P.], seq 541:577, ack 1378160, win 8151, length 36 ■設定後(-nnを設定) 14:44:55.833962 IP 192.168.11.10.60628 > 192.168.11.13.22: Flags [.], ack 380836, win 8210, length 0 |
-i | ネットワークインターフェースを指定します。 ※ifconfigコマンドでネットワークインターフェースを確認して指定 例: # tcpdump -i eth0 |
-s | キャプチャするサイズを指定します。 ※-wと併用して利用することが多い 例: # tcpdump -nn -i eth0 -s 0 -w /tmp/tcpdump-file.pcap -> 「-s 0」としておけば、1パケットあたりMAXサイズ(65535バイト)で パケットを受け取れます。 古いtcpdumpの場合は「-s」の指定がないと1パケットあたり96バイト までのパケット受け取りになり情報が切り取られます。 CentOS7以降はデフォルトでMAXサイズになっているので 「-s」の指定がなくても問題ありません。 但し、パケットを受け取れるサイズは重要なので明示的に指定しておく 方が安全です。 |
-w | ファイル保存します。(保存先のパスとファイルを名を指定) ※標準出力に表示されなくなります。 例: # tcpdump -nn -i eth0 -s 0 -w /tmp/tcpdump-file.pcap -> 「/tmp/tcpdump-file.pcap」に出力結果が保存されます。 |
-r | -wオプションで保存したファイルからパケットを読み込みます。 ※読み込んだファイルにtcpdumpのオプションを指定して絞り込みも可能 例: # tcpdump -r /tmp/tcpdump-file.pcap port 22 -> 「/tmp/tcpdump-file.pcap」で保存したデータからポートが22の ものだけを閲覧する |
-tttt | 人が見やすいタイムスタンプで出力します。 例: # tcpdump -nn -i eth0 -tttt -> ■設定前(-ttttを設定しない) 15:10:00.678222 IP 192.168.11.13.22 > ■設定後(-ttttを設定) 2021-03-10 15:10:26.713545 IP 192.168.11.13.22 > |
-C | 何M(メガ)でローテーションするかを指定します。 ※-wと-Wを併用して利用することが多い 例: # tcpdump -nn -i eth0 -s 0 -w /tcpdump-file.pcap -C 100 -> 100Mごとに「tcpdump-file.pcap」->「「tcpdump-file.pcap1」-> 「tcpdump-file.pcap2」->「tcpdump-file.pcap3」・・・・と ファイルを切り替えてデータを保存する |
-W | ローテーションの回数を指定します。 ※ローテーション回数でファイルが上書きされ、ファイルの肥大化を防ぎます。 ※ローテーションされると最初に取得していたデータが消えるので注意 ※ディスク容量の圧迫を防止できます ※「-w」と「-W」を併用して利用することが多い 例: # tcpdump -nn -i eth0 -s 0 -w /tcpdump-file.pcap -C 100 -W 3 -> 100Mごとにファイルを切り替え、3ファイルでローテーションされます。 合計「100×3=300M」の容量内でデータを取得します。 「tcpdump-file.pcap」->「「tcpdump-file.pcap1」 ->「tcpdump-file.pcap2」とファイルが保存され 300Mを超えようとすると「tcpdump-file.pcap」が上書きされて データが消えます。 |
-G | 秒数を指定します。指定した秒数ごとの操作ができます。 ※「-w」と「-W 1」のオプションと「cronの設定(crontab)」を併用し、tcpdumpを実行したい時間から「-G」で指定した秒数だけログを取得できます。 特定の時間に限定してtcpdumpのログを採取したいときに利用します。 ※「-w /tmp/tcpdump-log%Y%m%d%H%M%S.pcap」のオプションと併用することで、「-G」で指定した秒数ごとにファイルを分割します。 例: #tcpdump -w /tmp/tcpdump-log%Y%m%d%H%M%S.pcap -W 1 -G 3 -> crontabに「* 2 * * * tcpdump -w /tmp/tcpdump-log%Y%m%d%H%M%S.pcap -W 1 -G 300」を登録すると毎日AM2時にtcpdumpが実行し、300秒(5分)経過したらtcpdumpが停止します。 「-W 1」があることでtcpdumpが停止します。 「-w」の「%Y%m%d%H%M%S」箇所を削除するとファイル名が同じになり、cronでの定期的なtcpdumpを実行してもログファイルは毎回上書きされます。ディスク容量の枯渇を考慮して適宜設定します。 #tcpdump -w /tmp/tcpdump-log%Y%m%d%H%M%S.pcap -G 3 -> 3秒ごとにファイルを分割してtcpdumpのログを取得し続けます。 tcpdumpを停止するまで取り続けます。 ---表示例--- /tmp/tcpdump-log20220429173604.pcap /tmp/tcpdump-log20220429173607.pcap /tmp/tcpdump-log20220429173610.pcap ・・・ |
-X | パケットの中身をASCIIで表示します。 ※16進数も同時に表示 ※暗号化していない通信の場合はこのオプションですべて内容が見れます。 例: # tcpdump -nn -i eth0 -X -> ---表示例--- 0x1010: 4611 5ac0 a0c8 267b 6f69 873d b810 f009 F.Z…&{oi.=…. 0x1020: add1 7ff6 8fa9 e1ff 0c4a cc26 b466 2451 ………J.&.f$Q 0x1030: ae09 f9a4 0583 ce19 eae5 c3e6 6952 3d68 …………iR=h |
-x | パケットの中身を16進数で表示します。 例: # tcpdup -nn -i eth0 -x -> ---表示例--- 0x1010: c9a3 2e19 9d89 3b52 ac99 2532 6493 a40b 0x1020: d551 aff4 3d9e dcd2 2a52 754c 61b0 da2a 0x1030: 3e36 87e1 8abb 1536 d875 a829 f38c c254 |
tcpdumpのフィルター条件について
tcpdumpのオプションを活用しながら、監視する範囲を絞り込むための
フィルター条件については、以下のリンクを参照してください
コメント