Home / tcpdump

初めに

一般に、ヘッダとペイロードから成る構造を「パケット」と呼び、これをレベル(層)で使い分ける。

層と呼び名
UDP/TCPセグメント
IPデータグラム
データリンクフレーム

tcpdump

tcpdump をインストール

RedHat Linux 7.2 で動かしたいが、インストールされておらず、rpm も見つからなさそうなのでソースを get してビルドした。

-rwxrwxr-x    1 xxxxx   xxxxx     424567  6月 14 19:42 tcpdump-3.8.1/tcpdump

インストールはと言うと install-sh があるのだが、そうじゃなくて make install で行うらしい。

[root@xxxxx tcpdump]# ll /usr/local/sbin/
-rwxr-xr-x    1 root     root       424567  6月 14 19:48 tcpdump

これで目出度く tcpdump が動くようになった。

[root@xxxxxx ~]# tcpdump -n ip multicast -T rtp

19:54:24.064740 IP 192.168.0.x.32772 > 239.xxx.0.xxx.9999: udp/rtp 1316 c33  36311 1436815718
19:54:24.074740 IP 192.168.0.x.32772 > 239.xxx.0.xxx.9999: udp/rtp 1316 c33  36312 1436815808
19:54:24.084740 IP 192.168.0.x.32772 > 239.xxx.0.xxx.9999: udp/rtp 1316 c33  36313 1436815988
19:54:24.094740 IP 192.168.0.x.32772 > 239.xxx.0.xxx.9999: udp/rtp 1316 c33  36314 1436816078
19:54:24.104740 IP 192.168.0.x.32772 > 239.xxx.0.xxx.9999: udp/rtp 1316 c33  36315 1436816258

ポート番号は何か適当な文字列で表示されるかと思ったが、数値で表示された。何故か判らない...
因みに -nn とすると強制的に数値表示になる。これ、大抵のマニュアルに書かれていない。

rtp での書式

マニュアルを見ても詳しい解説が無いのでソースを見る。print-udp.c に rtp_print() がそれらしい。後半を示す。

   +--------------------------- 半固定
   |      +-------------------- UDPヘッダから取ったサイズ?
   |      |   +---------------- 固定の c の後にペイロードタイプが付く。
   |      |   |  +------------- 拡張フラグなら +、マーカ有りなら * が入るらしい。
   |      |   |  |  +---------- sequence number
   |      |   |  |  |       +-- time-stamp
   |      |   |  |  |       | 
udp/rtp 1316 c33  36311 1436815718

雑メモ

保存は -w file だけど、その時に 68bytes でカットされない為には -s 0 とするそうな。中身が重要な時は必須。


WireShark(ethereal)

Wiresharkでdump表示 2012-10-27

言わずと知れた Wireshark。
しょっちゅう使う訳でもなく、それでもたまに使っても何とかなるのが素晴らしいが、それに甘んじているせいか、効率的な使用法がいつまで経っても身に付かない... orz

今回はフレーム間を跨いだデータを見なきゃならなくなって、その場合、フレーム毎に(ダンプデータの)アドレス表示される処が、どうにも具合が悪い。
つまりフラグメント化されたようなデータを眺めたい時にアドレス表示が連続しないのとヘッダー部分の読み飛ばしがメンドイ。

早いとこ見たいので、まず考えたのが Analyze メニューにある Follow UDP Stream(TCP も有り)。
ここで Hex Dump Raw 表示にして Save As でファイルに落とす。
要らないデータも混在してしまったが、ま、多少は我慢してテキストを AWK なんかでフィルタリングする。 (Wireshark でちゃんとフィルタリングすれば良いんだろうが...)

なんとも情ない方法のような気がしつつ、また、フレーム情報を残しながら連続したデータ表示する方法は無いものか?と思う。
Wireshark 表示向け AWK なんてのが有れば最高なんだけどなぁ~。

(2014-2-2) 久し振りにやってみると適当な表示フィルタを掛けてくれ、望むデータが得られた。
e.g. (ip.addr eq x.x.x.x and ip.addr eq y.y.y.y) and (udp.port eq 1072 and udp.port eq 5004)
フィルタが設定されてからダイアログ起動するので、気に入らなければ予め自分で修正しておけば良いのか?と思うが、Follow UDP Stream を起動する度に設定されてしまう...

フィルタは兎も角、ヘッダ類を削除してくれるツールは無いものか…

Wireshark 添付ツール

色々付いてるが良く判らない
因みに capinfos ツールの出力表示例

>capinfos  xxx
File name:           xxx
File type:           Wireshark/tcpdump/... - libpcap
File encapsulation:  Ethernet
Number of packets:   582
File size:           793442 bytes
Data size:           784106 bytes
Capture duration:    23 seconds
Start time:          Sun Feb 02 15:27:51 2014
End time:            Sun Feb 02 15:28:13 2014
Data byte rate:      34657.79 bytes/sec
Data bit rate:       277262.30 bits/sec
Average packet size: 1347.26 bytes
Average packet rate: 25.72 packets/sec

キャプチャファイル xxx は Linux側 tcpdump で採ったもの。

tcpdump -nn udp port 5004 -wxxx

Wiresharkのファイル書き込み 2009-10-17

Wireshark(Ethereal)は受信データをファイルへ書き出す事が出来るが、何か特別な方法を使ってるかも知れない、と思ってソースを見てみた。

wireshark-1.2.2.tar.bz2
ぱっと見て理解できるような量でないが、何となぁくルートにある pcapio.c な気もする。
このソースの冒頭に書かれてあるコメントを見ると、libpcap や WinPcap にあるものが使えない場合があるので書いたんだ、みたいな理由が書かれてある。

さて、知りたかった書き込み関数は fwrite() を使ってるようで、ん~、特別なトリックなんて無いって事だろうか...


© 2008 usskim    http://usskim.web.fc2.com/
inserted by FC2 system