パケットをバイトで解析する・その1
Lisp Packet Generator を作る・その1 - Shammerismの手始めに、LispでMACアドレスを取得してそれをそのままパケットファイルに書き出そうと思ったが、ちょっと現実的でもなさそうだ。過去にC言語でそれをやっているが(この記事)、これをそのままLispで実行できなそうだ。なので、パケットをバイナリで見てみることにする。使うパケットは手元にあった適当なもの。とりあえず、TCPのSYNだけを取り出してみた。
$ tshark -r SYN.pcap 1 0.000000 192.168.10.254 00:1f:a0:10:05:86 192.168.10.146 00:0c:29:35:c9:82 74 35029 → 80 [SYN] Seq=0 Win=5792 Len=0 MSS=1460 SACK_PERM=1 TSval=414999262 TSecr=2633257476 WS=64 TCP $
これを-xで見てみる。
$ tshark -x -r SYN.pcap 0000 00 0c 29 35 c9 82 00 1f a0 10 05 86 08 00 45 00 ..)5..........E. 0010 00 3c cc 40 40 00 40 06 d7 9a c0 a8 0a fe c0 a8 .<.@@.@......... 0020 0a 92 88 d5 00 50 49 48 ae 9e 00 00 00 00 a0 02 .....PIH........ 0030 16 a0 ae e0 00 00 02 04 05 b4 04 02 08 0a 18 bc ................ 0040 62 de 9c f4 52 04 01 03 03 06 b...R..... $
パケットの冒頭はL2ヘッダで、DestMACが先頭にあるはず。上記のDestMACは、0000c.2935.c982。-xで見ても先頭が00 0c 29 35 c9 82になっている。これに続いてSrcMACがあるはず。上記のSrcMACは001f.a010.0586。-xの方の、c9 82 の続きは、00 1f a0 10 05 86となっていて、とりあえず順番通りに見える。
とりあえずここまではよさそうだ。
念の為、このSYNをodでも見てみる。
$ od -t x1 SYN.pcap 0000000 0a 0d 0d 0a 60 00 00 00 4d 3c 2b 1a 01 00 00 00 0000020 ff ff ff ff ff ff ff ff 04 00 3c 00 54 53 68 61 0000040 72 6b 20 28 57 69 72 65 73 68 61 72 6b 29 20 32 0000060 2e 30 2e 32 20 28 76 32 2e 30 2e 32 2d 30 2d 67 0000100 61 31 36 65 32 32 65 20 66 72 6f 6d 20 6d 61 73 0000120 74 65 72 2d 32 2e 30 29 00 00 00 00 60 00 00 00 0000140 01 00 00 00 20 00 00 00 01 00 00 00 ff ff ff ff 0000160 09 00 01 00 06 00 00 00 00 00 00 00 20 00 00 00 0000200 06 00 00 00 6c 00 00 00 00 00 00 00 ed e5 04 00 0000220 5b 53 6a 4a 4a 00 00 00 4a 00 00 00 00 0c 29 35 0000240 c9 82 00 1f a0 10 05 86 08 00 45 00 00 3c cc 40 0000260 40 00 40 06 d7 9a c0 a8 0a fe c0 a8 0a 92 88 d5 0000300 00 50 49 48 ae 9e 00 00 00 00 a0 02 16 a0 ae e0 0000320 00 00 02 04 05 b4 04 02 08 0a 18 bc 62 de 9c f4 0000340 52 04 01 03 03 06 00 00 6c 00 00 00 0000354 $
000c.2935.c982を探すと、半分より下のところにある。そもそも、tsharkで見た場合と表示される数字の羅列の数も異なる。tsharkでは1行16個が4行と12個の数字で合計76個、一方、odでは1行16個が14行と12個の数字で合計236個。差は160個、つまり、10行分。この10行分は何なのだろうか。