2011年5月2日月曜日

tcpdumpの使い方

tcpdumpでパケットキャプチャする時のメモ

だいたいのコマンド
# tcpdump -Xi eth0 host HONTNAME
 15:01:27.673120 IP myhost.60792 > ldaphost.ldap: S 740785676:740785676(0) win 5840 <mss 1460,sackOK,timestamp 1721577951 0,nop,wscale 7>
        0x0000:  4500 003c 4fd3 4000 4006 8c92 ac18 8211  E..<O.@.@.......
        0x0010:  ac18 8414 ed78 0185 2c27 7e0c 0000 0000  .....x..,'~.....
        0x0020:  a002 16d0 a12b 0000 0204 05b4 0402 080a  .....+..........
        0x0030:  669d 31df 0000 0000 0103 0307            f.1.........

16進数は4ビットなので、最初のフィールド4500は
・バージョン番号
・ヘッダ長
・サービスタイプ
になる。
次の003cはパケット長、次の4fd3はIPパケットの識別子。フラグメントすると、同じ識別子が並ぶことになる。次の4000がフラグメント用のフィールド。

次の4006はTTLとプロトコル番号。TTLは64秒、プロトコルはTCP(6)になっている。次の8c92はヘッダのチェックサム。

次の32ビットは送信元IPアドレス。
ac18 8211なので、172.24.130.17を指す。
これで0x0000のフィールドはおしまい。

0x0010の最初は宛先IPアドレス。ac18 8414なので172.24.132.20。ヘッダ長に5が指定されていれば、32ビットx5のヘッダが出てきたので、ここでヘッダはおしまい。実データになる。

実データといっても、TCPなので、次はTCPヘッダがでてくる。
ed78は送信元のポート番号で60792。0185は宛先のポートで、389(LDAP)になる。

次の32bitはTCPのシーケンス番号。2c27 7e0cがシーケンス番号。その次はACK番号。今回はSYNパケットなので、0000 0000になる。これに対するACK応答の時に、シーケンス番号+1が返ってくる。

次の16bitはデータオフセット(TCPデータの開始位置)と、TCPのフラグになっている。a002なので、
10x4byte(32bit)、SYNパケット。

これがSYN/ACKになると、a012とかになる。

0 件のコメント:

コメントを投稿