パケットをバイトで解析する・その2
パケットをバイトで解析する・その1 - Shammerismの最後の疑問、DestMACが始まるまでの10行程度のバイナリ情報は一体何か。とりあえずこれはさておき、他のパケットを見てみる。他のパケットでも同様かを見て、それから判断すればいいと思う。
前回の記事ではSYNを見たので、今度はその続きのSYN/ACKを見てみる。
$ tshark -r SYNACK.pcap 1 0.000000 192.168.10.146 00:0c:29:35:c9:82 192.168.10.254 00:1f:a0:10:05:86 74 80 → 35029 [SYN, ACK] Seq=0 Ack=1 Win=5792 Len=0 MSS=1460 SACK_PERM=1 TSval=2633262388 TSecr=414999262 WS=64 TCP $ $ $ $ tshark -x -r SYNACK.pcap 0000 00 1f a0 10 05 86 00 0c 29 35 c9 82 08 00 45 00 ........)5....E. 0010 00 3c 00 00 40 00 40 06 a3 db c0 a8 0a 92 c0 a8 .<..@.@......... 0020 0a fe 00 50 88 d5 81 c2 c5 49 49 48 ae 9f a0 12 ...P.....IIH.... 0030 16 a0 54 93 00 00 02 04 05 b4 04 02 08 0a 9c f4 ..T............. 0040 65 34 18 bc 62 de 01 03 03 06 e4..b..... $
SYN/ACKなので、SYNのDestMACとSrcMACが入れ替わった形になるはず。で、実際にそうなっている。問題は次だ。前回同様にodを取得する。
$ od -t x1 SYNACK.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 1f a0 10 0000240 05 86 00 0c 29 35 c9 82 08 00 45 00 00 3c 00 00 0000260 40 00 40 06 a3 db c0 a8 0a 92 c0 a8 0a fe 00 50 0000300 88 d5 81 c2 c5 49 49 48 ae 9f a0 12 16 a0 54 93 0000320 00 00 02 04 05 b4 04 02 08 0a 9c f4 65 34 18 bc 0000340 62 de 01 03 03 06 00 00 6c 00 00 00 0000354 $
やはり多い。でも、仮にこの前半部分、つまり、DestMACが始まるまでの部分がSYNと一緒だとすれば、何らかのメタ情報である可能性が高くなる。10行ずつのdiffを取ってみる。
$ od -t x1 SYNACK.pcap | head -n 10 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 1f a0 10 $ od -t x1 SYN.pcap | head -n 10 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 $ $ $ $ od -t x1 SYN.pcap | head -n 10 > SYN.txt $ od -t x1 SYNACK.pcap | head -n 10 > SYNACK.txt $ diff SYN.txt SYNACK.txt 10c10 < 0000220 5b 53 6a 4a 4a 00 00 00 4a 00 00 00 00 0c 29 35 --- > 0000220 5b 53 6a 4a 4a 00 00 00 4a 00 00 00 00 1f a0 10 $
違いはDestMACの入れ替わりだけだ。仮説が正しい場合、SYNとハンドシェイク最後のACKは全部同じになりそうだがどうなるか。
$ od -t x1 ACK.pcap | head -n 10 > ACK.txt $ diff SYN.txt ACK.txt 9,10c9,10 < 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 --- > 0000200 06 00 00 00 64 00 00 00 00 00 00 00 ed e5 04 00 > 0000220 9b 72 6a 4a 42 00 00 00 42 00 00 00 00 0c 29 35 $
どうやら仮説は違うっぽい。ackのodの結果は以下。
$ od -t x1 ACK.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 64 00 00 00 00 00 00 00 ed e5 04 00 0000220 9b 72 6a 4a 42 00 00 00 42 00 00 00 00 0c 29 35 0000240 c9 82 00 1f a0 10 05 86 08 00 45 00 00 34 cc 41 0000260 40 00 40 06 d7 a1 c0 a8 0a fe c0 a8 0a 92 88 d5 0000300 00 50 49 48 ae 9f 81 c2 c5 4a 80 10 00 5b 99 a1 0000320 00 00 01 01 08 0a 18 bc 62 e0 9c f4 65 34 00 00 0000340 64 00 00 00 0000344 $
違いのある行は0000200と0000220だ。0000160より前は同じ。TCPヘッダは変わっているのでそれなのだろうか。でも、tsharkの結果と比較すると、0000200や0000220に格納されている情報がTCPヘッダとは考えにくい。一体この情報は・・・