Network Programming の基礎を学んだ
- Network Ethernet ARP IP ICMP TCP UDP
概要
- こんにちは!ゴールデンウィーク明けから 基礎からわかるTCP/IP ネットワーク実験プログラミング(第2版) を読んでいました。この本は マスタリングTCP/IP―入門編―(第6版) の著者の一人である 村山公保先生 が書かれた本です。丁度今日に読み終えたので、なぜ読み始めたのかや何を学んだかなどの記録を残したいと思います。
読み始めたきっかけと目的
- この本を読もうと思ったきっかけは、システムプログラミングをしつつ、ネットワークプロトコル (Ethernet/ARP/IP/ICMP/TCP/UDP) を C 言語のプログラムレベルで理解したいと思ったからです。例えば TCP のヘッダの構造体は Ubuntu のどのパスに定義されていて、それを用いて、システムコールをどのように呼び出せば TCP のパケットを作って通信できるかなどです。大学/大学院の講義やマスタリングTCP/IP や普段の Web プログラミングを通して、基本的な通信の概念は知っていました。しかし、プロトコルをプログラムレベルでイメージできるほどは理解できていませんでした。そのため、ネットワークプロトコルの実装が C 言語のプログラムレベルでイメージできるようになることが、この本を読む目的でした。
学んだこと
この本を通して学んだことを列挙します。
- プログラムレベルでのプロトコルの解説
- ネットワークプロトコルに必要な構造体、システムコール、ライブラリ関数の使い方とそれらの調査方法
- socket システムコールを用いた
UDP Client/UDP Server
の実装 - socket システムコールを用いた
TCP Client/TCP Server
の実装 - パケットモニタリングを行い Ethernet/ARP/IP/ICMP/TCP/UDP の
ヘッダの解析
IP スキャン
/TCP ポートスキャン
/UDP ポートスキャン
の実装- ARP 要求パケットや ARP 応答パケットを用いた対象のホストの
ARP テーブルを書き換える攻撃手法
の実装 - ICMP redirect を用いた対象のホストの
ルーティングテーブルを書き換える攻撃手法
の実装 - IP ヘッダの TTL を用いた traceroute コマンドのようなものを実装
- TCP のヘッダを作成し、
SYN flood 攻撃
の実装 - TCP のヘッダを作成し、
ESTABLISHED な TCP のコネクションを強制的に切断する攻撃手法
の実装 - TCP のヘッダを作成し、
TCP ジャックをする攻撃手法
の実装
システムコールを用いた自作クライアントとサーバの実装、パケットモニタリング、攻撃手法の再現を通して、ネットワークプロトコルの構造や各レイヤーの関係性を学ぶことができました。読み応えのある非常に良い本でした。理解があやふやな箇所もあるので、期間を空けて本を読み直したいと思いました。