25. 3つのコンポーネントに分割
o IO
Controller
◦ データの入出力を担当
◦ ネットワークインターフェースに送受信
◦ PCAP,
PCAPNGファイルに書き込み
o Address
Controller
◦ アドレス処理などを担当
◦ 文字列からアドレスなど
o Packet
Controller
◦ 様々なプロトコルのパケットを解析、作成などを担当
o Module
◦ 上の三つを使って書かれたモジュール群
Feb
26
2016 OSC
2016
Tokyo/Spring 25
26. Packet,
Address
Controller
o パケットやアドレスのバイナリの生成や、解析などを行う
o 簡単なインターフェースでパケットのデータを編集などを
可能にします
o 例えばARPパケットならこんな感じ
Feb
26
2016 OSC
2016
Tokyo/Spring 26
27. Packet,
Address
class
o Packet
class
◦ 各プロトコルに対応したパケットクラスがある
◦ TCPパケットなら pgen::tcp クラス
◦ (まだないけど)
HTTPパケットなら pgen::http
クラス
o Address
class
◦ MACアドレスとIPアドレスがある
◦ pgen::macaddress クラス
◦ pgen::ipv4addressクラス
◦ pgen::ipv6addressクラス
Feb
26
2016 OSC
2016
Tokyo/Spring 27
28. IO
Controller
o データの入出力を管理するクラス
◦ ネットワークインターフェース
◦ pcapファイル
◦ pcapNgファイル
o 既存のstreamクラスと使い方は全く一緒
o 以下以外の方法もあります
Feb
26
2016 OSC
2016
Tokyo/Spring 28
31. ユーザのミスを知らせる
o lengthに問題がある場合
◦ こんな感じに依存しあう値があると…
o 実装は…
◦ 高レイヤのフィールドから設定させる
(カプセル化の基本)
◦ パケット通信の基本どうりに作るぜ
Feb
26
2016 OSC
2016
Tokyo/Spring 31
E
T
H
I
P
U
D
P
D
a
t
a
データ長
UDP
length
IP
total
length
パケット長
49. More
Information
oライブラリの紹介サイト
http://libpgen.org
o OSPN
Press
に掲載していただきました。 (version1が)
http://www.ospn.jp/press/20160209no44-‐useit-‐oss.html
o僕のブログでも情報公開します
http://blog.slankdev.net
Feb
26
2016 OSC
2016
Tokyo/Spring 49
50. 最後に
o パケットで遊ぼう
o Thanks
my
packet
and
friends
Feb
26
2016 OSC
2016
Tokyo/Spring 50
命
よ
り
重
い
!
パ
ケ
ッ
ト
は