Pythonでネットをして包んでツールのWinpcapyのためにフィルタfilterを書きます

2119 ワード

現在、Pythonで実現されたネットワークキャプチャツールが完成しています.Windowsでパッケージをキャプチャするには、Winpcapが優先されます.自然Winpcapというシステムの下層とハードウェアに近いプログラムは一般的にc言語で書かれており、彼が提供した開発インタフェースも原生的にcである.しかし、javaや.Net、vbまであるようですが、winpcapの公式サイトで探してもいいです.
WinpcapyはPython言語のWinpcapのパッケージで、google codeでこのプロジェクトを見つけ、ソースコードをダウンロードすることができます.実はwinpcapのc言語のコードのヘッダファイルと比較して発見することができて、Winpcapyは主にctypeでwinpcapが提供するc関数といくつかのデータ構造をPythonの関数とデータ構造に転化して、c言語が1つのpcapのようです.h,winpcapyはwinpcapyです.pyは、このモジュールをコードにインポートすれば、c言語と同じようにwinpcapを使用することができます.また、ソースコードはwinpcapyを提供する.pyのほか、winpcap開発パッケージのようにいくつかのsampleが提供されています.この2つのsampleを比較すると、winpcapyのsampleは基本的にc言語で書かれたsampleをPython言語の書き方に翻訳しているので、対応関係は明らかです.しかし、sampleにはfilterのコードが入っていないので、winpcap sampleのpcap_を真似しました.filter.c,自分でPython版のpcapを書きます_filter.
pcap_filter.cのフィルタフィルタに関する主なコードは以下のとおりです.
//pcap_t *fp;

//struct bpf_program fcode;

//bpf_u_int32 NetMask;

//char *filter;



NetMask=0xffffff;



//compile the filter

if(pcap_compile(fp, &fcode, filter, 1, NetMask) < 0)

{

	printf(stderr,"
Error compiling filter: wrong syntax.
"); pcap_close(fp); return -3; } //set the filter if(pcap_setfilter(fp, &fcode)<0) { fprintf(stderr,"
Error setting the filter
"); pcap_close(fp); return -4; }

最初の行には、いくつかのパラメータの宣言が表示されます.詳細は、完全なコードを参照してください.次に、私が書いたfilterセクションのコードを示します.
fcode = bpf_program()

NetMask = 0xffffff

filter = "tcp"



## compile the filter

if pcap_compile(adhandle,byref(fcode),filter,1,NetMask) < 0:

	print('
Error compiling filter: wrong syntax.
') pcap_close(adhandle) sys.exit(-3) ## set the filter if pcap_setfilter(adhandle,byref(fcode)) < 0: print('
Error setting the filter
') pcap_close(adhandle) sys.exit(-4)

もちろん基本的には翻訳に向いているように見えますが、技術的な含有量はありません.このコードはwinpcapyのサンプルbasic_に置くことができます.dump_ex.pyパッケージのコード行をキャプチャする前に(
res=pcap_next_ex( adhandle, byref(header), byref(pkt_data))

)でフィルターを「tcp」に設定できるようになりました.
検証するならpcap_を使ってもいいですdumpはバッグを保存し、wiresharkで表示します.後で完全なコードファイルを提供します.