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のフィルタフィルタに関する主なコードは以下のとおりです.
最初の行には、いくつかのパラメータの宣言が表示されます.詳細は、完全なコードを参照してください.次に、私が書いたfilterセクションのコードを示します.
もちろん基本的には翻訳に向いているように見えますが、技術的な含有量はありません.このコードはwinpcapyのサンプルbasic_に置くことができます.dump_ex.pyパッケージのコード行をキャプチャする前に(
)でフィルターを「tcp」に設定できるようになりました.
検証するならpcap_を使ってもいいですdumpはバッグを保存し、wiresharkで表示します.後で完全なコードファイルを提供します.
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で表示します.後で完全なコードファイルを提供します.