htbzwd 发表于 2015-4-26 07:04:44

用Python做个网络抓包工具之为Winpcapy写个过滤器filter

  目前在完成一个网络抓包工具,用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 filter
if(pcap_compile(fp, &fcode, filter, 1, NetMask) < 0)
{
printf(stderr,"\nError compiling filter: wrong syntax.\n");
pcap_close(fp);
return -3;
}
//set the filter
if(pcap_setfilter(fp, &fcode)
页: [1]
查看完整版本: 用Python做个网络抓包工具之为Winpcapy写个过滤器filter