用Python做个网络抓包工具之为Winpcapy写个过滤器filter
来源:互联网 发布:添加usb虚拟打印机端口 编辑:程序博客网 时间:2024/06/05 10:46
用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)<0)
{
fprintf
(stderr,
"\nError setting the filter\n"
);
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
(
'\nError compiling filter: wrong syntax.\n'
)
pcap_close(adhandle)
sys.exit(
-
3
)
## set the filter
if
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查看。稍后提供比较完整的一个代码文件。
- 用Python做个网络抓包工具之为Winpcapy写个过滤器filter
- 自己动手写网络抓包工具
- 自己动手写网络抓包工具
- 自己动手写网络抓包工具
- 网络抓包工具
- 网络抓包工具。
- 网络抓包工具
- 网络--抓包工具
- 网络抓包工具
- 网络抓包工具
- 网络抓包工具
- 网络抓包工具
- 网络抓包工具之wareshark 用法
- 网络抓包工具Wireshark Capture Filter 技巧
- 网络抓包工具分析
- Jpcap 网络抓包工具
- Wireshark网络抓包工具
- 网络抓包工具Wireshark
- 黑马程序员_IO流知识总结
- AbstractQueuedSynchronizer在工具类ReentrantLock、Semaphore、CountDownLatch、CyclicBarrier中的应用
- 了解产品设计中的BRD、MRD、PRD、FSD需求文档
- 浅谈 Linux 内核开发之网络设备驱动
- loadrunner11安装
- 用Python做个网络抓包工具之为Winpcapy写个过滤器filter
- java的数组
- 【7-1】Linking的阅读
- SSDT Hook 实现
- org.hibernate.engine.internal.Versioning.increment(Versioning.java:130)异常详解
- 电子商务宋明军
- Mysql错误:Duplicate entry '127' for key 'PRIMARY'的解决方法
- 设计Linux系统网络设备驱动程序
- 使用 网卡混杂模式 编写网络抓包程序