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

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

Embed Size (px)

DESCRIPTION

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

Citation preview

Page 1: import dpkt したよ #ssmjp 2014/02/28

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

1

Page 2: import dpkt したよ #ssmjp 2014/02/28

パケットみてますか?

Wireshark

tshark

tcpdump

Network Monitor

etc...

2

Page 3: import dpkt したよ #ssmjp 2014/02/28

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

今日報告すること

3

Page 4: import dpkt したよ #ssmjp 2014/02/28

公式サイトによると

"Fast, simple packet creation and parsing.

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

dpktってなに?

4

Page 5: import dpkt したよ #ssmjp 2014/02/28

ソースみてみる% pwd

~/dpkt-1.8

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

72

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

7318

5

Page 6: import dpkt したよ #ssmjp 2014/02/28

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

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

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

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

6

Page 7: import dpkt したよ #ssmjp 2014/02/28

僕が出来るコト

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

7

Page 8: import dpkt したよ #ssmjp 2014/02/28

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

tshark -F pcap -w <filename>

通信はできない。

8

Page 9: import dpkt したよ #ssmjp 2014/02/28

使用例1

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

主流ぽい。

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

9

Page 10: import dpkt したよ #ssmjp 2014/02/28

コードの例import dpkt

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

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

10

Page 11: import dpkt したよ #ssmjp 2014/02/28

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

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

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

あとは好きに出来る

11

Page 12: import dpkt したよ #ssmjp 2014/02/28

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

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

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

12

Page 13: import dpkt したよ #ssmjp 2014/02/28

コードの例

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

13

Page 14: import dpkt したよ #ssmjp 2014/02/28

コードの説明

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

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

14

Page 15: import dpkt したよ #ssmjp 2014/02/28

コードの説明

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

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

15

Page 16: import dpkt したよ #ssmjp 2014/02/28

デモをやりました

16

Page 17: import dpkt したよ #ssmjp 2014/02/28

おまけ

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

17

Page 18: import dpkt したよ #ssmjp 2014/02/28

おまけ

lbpcap...

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

18

Page 19: import dpkt したよ #ssmjp 2014/02/28

おまけ

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

19

Page 20: import dpkt したよ #ssmjp 2014/02/28

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

20