import dpkt したよ #ssmjp 2014/02/28

Post on 30-Jun-2015

2.194 views 3 download

description

2014年2月の #ssmjp での発表資料。 dpkt の紹介。

Transcript of import dpkt したよ #ssmjp 2014/02/28

import dpktしたよ2014/02/28 #ssmjp @th0x0472

1

パケットみてますか?

Wireshark

tshark

tcpdump

Network Monitor

etc...

2

pcapファイルを読んで何かするならPython + dpkt もよいですよ。

今日報告すること

3

公式サイトによると

"Fast, simple packet creation and parsing.

We have no docs, but only sample code for now. "

dpktってなに?

4

ソースみてみる% pwd

~/dpkt-1.8

% find ./ -name '*py' | wc -l

72

% find ./ -name '*py' | xargs grep -v '^$' | wc -l

7318

5

入手&導入dpktで検索すればイッパツ。

Debian系ならパッケージある。それで入れるのがお手軽。

最近のMac向けのパッケージはないみたい。

Windowsは試してない。(やる気もない)

6

僕が出来るコト

pcapを読む。読んでパケットをごにょごにょする。

7

これはムリpcap-ng を読み書きできない。最近のWireshark/tshark使うときはまった。

tshark -F pcap -w <filename>

通信はできない。

8

使用例1

pcapファイル内の全パケットを順に読んで、code blockに通す

主流ぽい。

スクリプトにするならこうかな。

9

コードの例import dpkt

p = dpkt.pcap.Reader(open(filename,'rb'))

for t,buf in p: eth = dpkt.ethernet.Ethernet(buf) ip = eth.data ...

10

コードの説明for t,buf in p:

t にタイムスタンプが入る

buf にパケットデータがはいる(L2だからフレームと言うべき?)

あとは好きに出来る

11

使用例2pcapファイルを読んで、任意のパケットをアレコレ好きに出来る

目当てのパケットが決まっていたり、お試し(試行錯誤)する場合おすすめ

インタプリタで使うのがおすすめ

12

コードの例

>>> import dpkt>>> p = dpkt.pcap.Reader(open(filename,'rb'))>>> p.readpkts()

13

コードの説明

p.readpkts() 各パケットのタイムスタンプとパケットデータのタプルのリスト

[(ts1,pdata1), (ts2,pdata2), ...]

14

コードの説明

p.readpkts()[n][1] で、pcapファイル中 n番目のパケットデータにアクセスできる

(リストのカウント0始まりだからn番目じゃなくてn−1番目じゃね?とか細かいことは(ここでは)気にしない)

15

デモをやりました

16

おまけ

Python だけなの?→ PerlもRubyも、pcapを読み書きするためのライブラリはありました。でもそれ以上はしらべてません。

17

おまけ

lbpcap...

→使用例2のインタプリタで1つ取り出してごにょごにょがやりたかったんですよぅ

18

おまけ

pcapファイル中のパケットの情報の集計する、統計とるなら、tshark + Excel の方が・・・→ そうですね。

19

おしまいご清聴ありがとうございました。 

20