パケットキャプチャのパケットキャプチャの
すすめすすめ
ならず者技術屋ならず者技術屋
Hiroki “sabotage” MoriHiroki “sabotage” Mori
2015/05/152015/05/15
TCP の話
• パケット交換網で通信するための仕組みとして作ら
れました
• HTTP などでは一塊のデータとして受け取ったり送
ったりしていますが、通信途中ではバラバラになっ
ています
• 接続してデータの送受信して切断が一般的な流れで
す
• 同じレイヤーに UDP という仕組みもあり DNS など
で利用されています
TCP の通信の流れ
クライアント サーバ
listen
established
close
データの送受信
接続要求
通信の内容を調べる
• Wireshark(GUI) とか tcpdump( コマンドライン ) と
かで通信内容を調べることができます
• 昔は Sniffer という製品が有名でした
• tcpdump は BSD 由来です
• 普通の http は丸見えです
• https は通信は暗号化されているのでデータ見ても
なんだかわかりません
miruo( みるお ) とは
• KLab の @pandax381 さんが作ったパケットキャプ
チャツール「見やすい tcpdump 」
• 2011 年くらいに Linux 版が作られgithubで公
開されていました
• 先月 BSD/Mac 対応されました
• tcpdump と同じ libpcap を使っています
• 元々はサーバ間の接続障害などを調べるために作っ
たみたいです
• HTTP 通信についてはヘッダーのダンプ機能があり
ます
iOS で使ってみました
USB 接続
Internet
Remote
Vertual
Interface
(rvi)
Apple の Technical Q&A QA1176
HTTP アクセスの確認
sh-3.2$ rvictl -s <iPhone Identifier>
Starting device ...... [SUCCEEDED] with interface rvi0
sh-3.2$ ifconfig -vv rvi0
rvi0: flags=3005<UP,DEBUG,LINK0,LINK1> mtu 0 index 11
type: 0x1 family: 1 subfamily: 0
link quality: -1 (unknown)
desc: ……
sh-3.2$ sudo ./miruo -i rvi0 -m http: -live | grep HTTP
DPI:HTTP:RequestLine >>>> GET / HTTP/1.1
DPI:HTTP:Header >>>>>>>>> Host: m.yahoo.co.jp
DPI:HTTP:ResponseLine >>> HTTP/1.1 200 OK
DPI:HTTP:RequestLine >>>> GET /images/mtop/4.3.6/css/all.css HTTP/1.1
DPI:HTTP:Header >>>>>>>>> Host: i.yimg.jp
DPI:HTTP:RequestLine >>>> GET /bdv/yahoo/javascript/smartphone/flow_
request_stream.js HTTP/1.1
DPI:HTTP:Header >>>>>>>>> Host: ai.yimg.jp
おまけ
• 実は rvi で使えなかったので、ちょっといじって使
えるようにしてプルリクしてマージしてもらいまし
た
Ehter
Header
IP
Header
TCP
Header
Data
DTL_EN10MB
rvi0
IP
Header
TCP
Header
Data
https://github.com/KLab/miruo/pull/7
en0
DTL_RAW

Packet