用Python做個網路抓包工具之為Winpcapy寫個過濾器filter

來源:互聯網
上載者:User

目前在完成一個網路抓包工具,用Python實現。在Windows上抓包首選的庫或介面自然是Winpcap。自然Winpcap這種接近系統底層和硬體的程式一般都是c語言寫的,他提供的開發介面原生也是c的。不過還好,人們已經為其他語言的使用提供了封裝,比如java和.net,好像連vb都有了,可以在winpcap官網上找找。

Winpcapy是Python語言對Winpcap的封裝,可以在google code上找到這個項目,並下載原始碼。其實和winpcap的c語言代碼標頭檔對比可以發現,Winpcapy主要是用ctype把winpcap提供的c函數和一些資料結構轉化成了Python的函數和資料結構,就像c語言是一個pcap.h,winpcapy就是一個winpcapy.py,只要在代碼中匯入這個模組,就能和c語言一樣使用winpcap了。另外,原始碼提供了winpcapy.py之外,也像winpcap開發包一樣提供了幾個sample。比較一下這兩套sample會發現,winpcapy的sample基本上就是把c語言寫的sample翻譯成了Python語言的寫法,對應關係是很顯而易見的。不過,sample裡面沒有filter方面的代碼,於是我就仿照winpcap sample中的pcap_filter.c,自己寫一個Python版的pcap_filter。

pcap_filter.c中關於過濾器filter的主要代碼是這些:

//pcap_t *fp;//struct bpf_program fcode;//bpf_u_int32 NetMask;//char *filter;NetMask=0xffffff;//compile the filterif(pcap_compile(fp, &fcode, filter, 1, NetMask) < 0){printf(stderr,"\nError compiling filter: wrong syntax.\n");pcap_close(fp);return -3;}//set the filterif(pcap_setfilter(fp, &fcode)<0){fprintf(stderr,"\nError setting the filter\n");pcap_close(fp);return -4;}

  開始幾行給出了幾個參數的聲明,具體請參見完整代碼。下面給出我寫的filter部分的代碼:

fcode = bpf_program()NetMask = 0xfffffffilter = "tcp"## compile the filterif pcap_compile(adhandle,byref(fcode),filter,1,NetMask) < 0:print('\nError compiling filter: wrong syntax.\n')pcap_close(adhandle)sys.exit(-3)## set the filterif pcap_setfilter(adhandle,byref(fcode)) < 0:print('\nError setting the filter\n')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查看。稍後提供比較完整的一個代碼檔案。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.