放射状

勉強のメモ。

コードリーディング:ping 三日目

これまでのあらすじ~ 放射氏は知らなかった。部下の中の人がICMPプロトコルについてそもそも知らないという事実を~

ICMP

wikipediaの記事ならここです。

マスタリングTCP/IP 入門編 第5版

マスタリングTCP/IP 入門編 第5版

もっともベタな入門書はこれです。もう5版が最新なのかー。うちには2版と3版しかないな。

パケットキャプチャ

コードを読みながら、変えながら、実際のパケットも見てみたいかと思います。windowsでのパケットキャプチャリングは煩雑なので(1分ぐらい調べてブラウザを閉じた)、linux上でキャプチャします。ほら、読むpingのコードもcentos7のですし。ぬるいプログラマは時としてwindowsを嫌うこともある。

インストール
yum install tcpdump
実行

細かいオプションは丁寧に解説して下さっているサイトがたくさんありますので、そちらに譲りたいと思います。

[root@localhost ~]# tcpdump icmp -X
実行結果

localから外部へping

21:15:41.752059 IP localhost.localdomain > 192.168.1.5: ICMP echo request, id 11918, seq 1, length 64
        0x0000:  4500 0054 44ae 4000 4001 71dd c0a8 01c8  E..TD.@.@.q.....
        0x0010:  c0a8 0105 0800 6146 2e8e 0001 6d88 9255  ......aF....m..U
        0x0020:  0000 0000 9e79 0b00 0000 0000 1011 1213  .....y..........
        0x0030:  1415 1617 1819 1a1b 1c1d 1e1f 2021 2223  .............!"#
        0x0040:  2425 2627 2829 2a2b 2c2d 2e2f 3031 3233  $%&'()*+,-./0123
        0x0050:  3435 3637                                4567
21:15:41.752343 IP 192.168.1.5 > localhost.localdomain: ICMP echo reply, id 11918, seq 1, length 64
        0x0000:  4500 0054 3d05 0000 8001 7986 c0a8 0105  E..T=.....y.....
        0x0010:  c0a8 01c8 0000 6946 2e8e 0001 6d88 9255  ......iF....m..U
        0x0020:  0000 0000 9e79 0b00 0000 0000 1011 1213  .....y..........
        0x0030:  1415 1617 1819 1a1b 1c1d 1e1f 2021 2223  .............!"#
        0x0040:  2425 2627 2829 2a2b 2c2d 2e2f 3031 3233  $%&'()*+,-./0123
        0x0050:  3435 3637

外部からlocalにping

21:16:26.210471 IP 192.168.1.5 > localhost.localdomain: ICMP echo request, id 1, seq 25, length 40
        0x0000:  4500 003c 3d30 0000 8001 7973 c0a8 0105  E..<=0....ys....
        0x0010:  c0a8 01c8 0800 4d42 0001 0019 6162 6364  ......MB....abcd
        0x0020:  6566 6768 696a 6b6c 6d6e 6f70 7172 7374  efghijklmnopqrst
        0x0030:  7576 7761 6263 6465 6667 6869            uvwabcdefghi
21:16:26.210527 IP localhost.localdomain > 192.168.1.5: ICMP echo reply, id 1, seq 25, length 40
        0x0000:  4500 003c 44b3 0000 4001 b1f0 c0a8 01c8  E..<D...@.......
        0x0010:  c0a8 0105 0000 5542 0001 0019 6162 6364  ......UB....abcd
        0x0020:  6566 6768 696a 6b6c 6d6e 6f70 7172 7374  efghijklmnopqrst
        0x0030:  7576 7761 6263 6465 6667 6869            uvwabcdefghi

というわけで、これを見て強く生きてほしい。

ほかの素晴らしい参考書

基礎からわかるTCP/IP アナライザ作成とパケット解析―Linux/FreeBSD対応

基礎からわかるTCP/IP アナライザ作成とパケット解析―Linux/FreeBSD対応

パケットキャプチャそのものを実装する手段が解説されています。
かなりの良書ですので、一読の価値、というか一通り読みながら自分で実装してみる価値はあると思います。ちなみについ先日自宅の本棚から発掘されたため、私はまだやっていません。今度やります。

しかしまあ

なかなかソースコードリーディングそのものまでたどりつきませんね! でもこうやって枝を辿っていくのも勉強になります。