您当前的位置:首页 > 计算机 > 编程开发 > Python

python scapy-sniff实现抓包与分析

时间:04-01来源:作者:点击数:

今天遇到一个python来实现网络抓包与分析。想起以前测试过一个程序,虚拟仪器Labview调用winpcap的dll来实现抓包的可视化程序,以及使用wireshark来完成数据包的抓取和保存 。以下是笔者以前写的两个wireshark命令行的例程 。

1、Wireshark怎么自动保存网络数据包 。文章中阐述了在脚本中使用命令行工具dumpcap来完成定期保存抓包文件,并控制文件数量实现旧数据的清理。

2、树莓wireshark(tshark)实验。文中阐述了wireshark的命令行工具tshark的使用方法,比如tshark -i wlan0 -w capture.pcap 用网卡wlan0捕捉数据包写入capture.pcap文件。

两个命令行工具,都支持基本的捕获过滤器,并且可以写到文件,保存的文件都可以使用wireshark打开分析。tshark是wireshark的命令行工具,基本覆盖了wireshark的所有功能 ,但是dumpcap消耗的资源更少。在wireshark安装目录下,还有几个exe可执行文件,editcap主要用于处理已经抓到的数据包文件。mergecap的主要功能就是合并数据包文件。capinfos可以查看抓取到的数据包文件的信息。Text2pcap是读取ASCII hex转储的程序,将描述的数据写入pcap或pcapng文件。rawshark实现抓取本地环回的数据包(socket程序),wireshark不能无法抓取 。

今天使用python sniff来完成同样的功能。sniff()函数有几个参数:

1、iface: 指定在哪个网络接口上抓包,即网卡的名称,通常不指定即所有网络接口;

2、count: 表示要捕获数据包的数量,默认为0(不限制数量),是指符合filter条件的报文;

3、filter: 流量的过滤规则,使用 Berkeley Packet Filter (BPF)语法;

4、prn: 定义回调函数,每当一个符合filter的报文被探测到时,就会执行回调函数,通常使用lambda表达式来写回调函数。

ipconfig /all获取iface网卡名称,里面的“描述” 项就是。下面是笔者在ipython中测试的案例,过滤后只抓包192.168.15.219的特定接口的tcp数据包,回调函数只显示源地址和目的地址 。

为了不让sniff()函数太冗长,可以定义一个callback()函数让prn调用。wrpcap函数将包分10个为单位写入pcap*.pcap文件中,在目录下就会生成很多pcap文件,完成抓包 保存。

保存的文件可以使用wireshark来查看分析。

sniff函数可以指定本地离线文件来查看,sniff(offline=dump_file)。

最后,根据上面的方法,可以写入python脚本中来使用。代码托管在python/save_packets_in_pcap_format.py at main · laufei90/python (github.com)

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门