51
59

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

tcpdumpの使い方

Last updated at Posted at 2016-12-04

Wiresharkの方が新しく強力なイメージがあるが、tcpdumpも開発が続いているし機能面では負けていない印象。

使い方例

全ての通信をキャプチャ。

# tcpdump

ポート80への送受信のみキャプチャ。

# tcpdump port 80

ポート22(ssh)以外への送受信をキャプチャ。

# tcpdump port not 22

ポート80番への受信パケットだけを表示する

tcpdump dst port 80

ポート80番からの送信パケットだけを表示する

# tcpdump src port 80

-nn をつけるとアドレスやポート番号を名前に変換しない(No Nameの略か?)。基本的につけた方が見やすいと思う。
-X をつけるとパケットの中身(HTTPならリクエストやレスポンス)も表示。
-A をつけると16進ダンプでなくテキストのみ表示。

# tcpdump -nn -X dst port 80

宛先IPアドレス 1.2.3.4 のみキャプチャ。

# tcpdump -nn -X host 1.2.3.4

条件のAND指定

# tcpdump -nn 'src host xx.xx.xx.xx and dst port 80'

宛先port 80かつSYNフラグのたったパケットだけ。

# tcpdump -nn dst port 80 and '(tcp[tcpflags] & tcp-syn)' != 0

Macでローカルホスト同士の通信を見る場合は-i lo0をつける。-i allでもいいかもしれない。

# tcpdump -i lo0

ICMPをキャプチャ

# tcpdump -nn icmp

指定できるプロトコルのリスト

ether fddi mopdl ip ip6 arp rarp decnet lat sca moprc icmp icmp6 tcp udp

よく使うオプション

表示形式
-nn      アドレスやポート番号を名前に変換しないで表示します。
-X       16進とASCII文字で表示を行います。
-A       ASCII文字で表示を行います。
-ttttt   最初に表示したパケットからの経過時間(delta)を表示
-vvv     詳細を出力します。

キャプチャ
-i       キャプチャするインターフェースを指定します。-iオプションを指定しない場合はループバックを除いた一番小さいインターフェースが指定されます。(大体の場合はeth0ですね。)
-s       キャプチャするサイズを指定します。-s0ですべてキャプチャします。デフォルトは65535

ファイルへの入出力
-w <ファイル名>      生データをそのままファイルに書き込みます。WireSharkやEtherealで開く場合に便利です。
-r <ファイル名>      -wで書き込んだファイルを読み込んで表示する
  • -nn(アドレスやポートを名前でなく番号で表示)はつけた方がよい
  • HTTPのように中身をテキストでちゃんと見たいというときだけ -A をつけるとよい
  • 中身に興味がなければ-X、-A どちらもつけないのが見やすい

出力の見方

形式

src > dst: flags data-seqno ack window urgent options

フラグの意味

S (SYN)
F (FIN)
P (PUSH)
R (RST)
W (ECN CWR)
E (ECN-Echo)
. (フラグなし)

URG, ACK は urg, ack という文字列で表示される

TCPヘッダの構造
TCPヘッダ.png

ECE ECN-Echo (ECE) フラグは TCP ピアが TCP 3-way ハンドシェイク間に ECN 対応であることを示すために、また TCP セグメントが 11 に設定されている IP ヘッダーの ECN フィールドとの接続で受け取られたことを示すために使用されます。TCP 3-way ハンドシェイクに関する情報は RFC 793 をご覧ください。
CWR Congestion Window Reduced (CWR) フラグが送信ホストにより設定され、ECE フラグ セットと TCP セグメントを受信したことを示します。輻輳ウィンドウは TCP により保持される内部の変数で、送信ウィンドウのサイズを管理します。

19:24:49.347860 IP 13.113.156.215.40206 > 10.4.3.221.d-s-n: Flags [P.], seq 266:297, ack 1, win 211, options [nop,nop,TS val 852763 ecr 854483], length 31
        0x0000:  4500 0053 908d 4000 fe06 33ee 0d71 9cd7
        0x0010:  0a04 03dd 9d0e 1f96 9c50 949a eba9 fc37
        0x0020:  8018 00d3 90c8 0000 0101 080a 000d 031b
        0x0030:  000d 09d3 666f 6f62 6172 2076 616c 7565
        0x0040:  3d30 2e39 3935 3732 3230 3032 3833 3330
        0x0050:  3935 39
4 = IPのバージョン番号(4はIPv4を表す)
5 = IPヘッダの長さ(4 * 5 = 20バイト)
00 = サービスタイプ
0053 = IPヘッダを含むパケットの全長。0x0050の3バイト目が終端になっていることに注目。
(中略)
0d71 9cd7 = 13.113.156.215。送信元IPアドレス
0a04 03dd = 10.4.3.221。受信IPアドレス
ここからTCPヘッダ
9d0e = 40206。送信元ポート
1f96 = 8086。受信ポート
0x20の行の最初にある8(4ビット)がTCPヘッダのサイズ。8→32バイト。
51
59
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
51
59

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?