SSブログ

tcpdump覚え書き [Linux]

なんか知らんが、先日行った北海道のルータのパケットを調査するハメになりtcpdumpをお勉強。今まではGUIありのEtherealだったんで書式とか知らなかったんで。
tcpdumpを使えば「ルータが接続を維持する為に作成する不要なパケットを調査」とか「ルータに叩き落とされたパケットの推測」が行なえるハズだ。
# そこ! 「入社8年目で今更かよ」とか言わない!!

tcpdumpの基本的な使い方は「tcpdump を使いこなそう」が詳しい。

使い方を上記のサイトから自分用に抜粋してみた。

# tcpdump [option] [filter]
で、optionには
-w file … fileへ保存
-r file … fileから読み出し(-wで作ったヤツ)
-n … 名前解決しない
-X … ASCIIで表示
-x … 16進数で表示
-i … I/Fの指定(eth0とかppp0とか)
filterでは
tcp … tcpのみ表示
udp … udpのみ表示
src … 送信元
dst … 送信先
host [hostname/ip] … ホスト名の指定
net [network address/subnet mask] … ネットワークの指定
port [port no] … ポートの指定
がある。複数条件を使う場合には and(&)、or(|)、not(!)なんかの演算子で指定。 演算子はおおよそ予想が付くハズ(&&とか||も)。
で、filterにはこれに加えてtcpなんかのバイトをそのまま式で指定できる。
実際に使いそうなのは13バイト目でSYN、ACK、FINなんかのフラグが入っているところ。
'tcp[13] & 2 == 2' … FINパケットで絞込み
'tcp[13] & 17 == 17' … FIN+ACKパケットで絞込み
'tcp[13] & 18 == 18' … SYN+ACKパケットで絞込み
'tcp[13] & 16 == 16' … ACKパケットで絞込み
192.168.12.10に出入りするFIN+ACKを見たければ
# tcpdump -n src or dst host 192.168.12.10 and 'tcp[13] & 17 == 17'
と指定。
ちなみにTCPの13バイト目には
1ビット目 … FIN (+1)
2ビット目 … SYN (+2)
3ビット目 … RST (+4)
4ビット目 … PSH (+8)
5ビット目 … ACK (+16)
6ビット目 … URG (+32)
だ。ビット演算してフィルタのパラメータを指定しましょう。

今回のようにIP:192.168.11.2で網を張るなら

# tcpdump -n src or dst host 192.168.11.2 and port 80
ってするとOK。こんな感じの出力になるハズ。
23:52:07.205738 192.168.11.2.33345 > 66.249.89.99.http: S 2203411105:2203411105(0) win 5840  (DF)
23:52:07.229448 66.249.89.99.http > 192.168.11.2.33345: S 2078573383:2078573383(0) ack 2203411106 win 8190 
23:52:07.229525 192.168.11.2.33345 > 66.249.89.99.http: . ack 1 win 5840 (DF)
23:52:07.229826 192.168.11.2.33345 > 66.249.89.99.http: P 1:365(364) ack 1 win 5840 (DF)
23:52:07.253822 66.249.89.99.http > 192.168.11.2.33345: . ack 365 win 7826
23:52:07.254057 66.249.89.99.http > 192.168.11.2.33345: . ack 365 win 6432 [tos 0x10]
23:52:07.371512 66.249.89.99.http > 192.168.11.2.33345: . 1:1333(1332) ack 365 win 6432 [tos 0x10]
23:52:07.371694 192.168.11.2.33345 > 66.249.89.99.http: . ack 1333 win 7992 (DF)
23:52:07.371718 66.249.89.99.http > 192.168.11.2.33345: P 1333:2397(1064) ack 365 win 6432 [tos 0x10]
23:52:07.371742 192.168.11.2.33345 > 66.249.89.99.http: . ack 2397 win 10656 (DF)
23:52:07.371758 66.249.89.99.http > 192.168.11.2.33345: F 2397:2397(0) ack 365 win 6432 [tos 0x10]
23:52:07.374855 192.168.11.2.33345 > 66.249.89.99.http: F 365:365(0) ack 2398 win 10656 (DF)
23:52:07.397579 66.249.89.99.http > 192.168.11.2.33345: . ack 366 win 6432 [tos 0x10]
ちなみに相手はGoogle(.co.jp)

詳細見たければ

# tcpdump -w /tmp/netdmp
とかでファイルに保存して
# tcpdump -r /tmp/netdmp -nX src or dst host 192.168.12.10 and port 80
のように後で覗く。保存したファイルはお客さんから送ってもらっても解析可能だ。 多分、Etherealでも解析できると思う。

今まで機会がほとんど無かったんで使ってなかったけど、やっぱり定番ツールだけあってスゲェ便利だ。気掛りだと思っていたfilterの指定も結構直感的で分りやすいね。これでGUIが無くても大丈夫。


nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

今日の運動RSS AutoDiscovery ブログトップ

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。