基于Python3+Scapy的网络数据包批量分析工具
项目源码
https://github.com/sunbcy/PcapAnalyzer
适用范围以及使用说明
目前该项目由作者独立维护,可以离线批量识别项目根目录下的所有数据包格式文件。识别并分析数据包中的HTTP、HTTPS、DNS等协议加密、解密的特征部分(主要是域名和请求的信息,不包含回包信息),当然想要识别的话,也可以把我上面的工具clone到本地自己做相应定制的。最后会输出一个TXT文档,包含了解密数据包中HTTP请求的部分以及加密数据包中域名的集合,具体内容都可以修改源代码定制。
本项目的特点:源码结构简单易懂,根据自己需要定制输出,对小白友好,适合网络协议分析学习。
背景
在工作中,一些岗位往往需要分析大量数据包,根据需要提取特征码用以分析。对于一些新手和小白来说,时常感到力不从心,作者在这方面曾经也是小白,感触颇深。当然在离线数据包分析这方面,有Wireshark这个强大的工具。但是实际工作中,作者发现当分析的数据包达到一定数量的时候,人力显的略微有那么点微不足道。这个时候脑子里响起“人生苦短,我用Python”的口号。
环境准备及运行说明
- ≥Python3.6(本工具下载到本地最好保证Python3.6以上,由于使用了大量的f-string)
- scapy模块–用于读取数据包
- scapy_ssl_tls模块–用于分析SSL/TLS部分的协议
- 运行脚本时确保PC内存尽量大一点(16G比较合适,8G可能有点吃力,数据包越大,分析时间越久,占用内存越多,内存少可能会出现卡顿现象。)
常见协议分析识别
根据网络层的proto字段可识别出TCP、UDP等常用协议以及FTP、SSH、IPv4、IPv6、Telnet、SMTP、DHCP、TFTP、POP3、IMAP4等协议。
TCP协议识别
跟Wireshark下的数据流简单对比下,GET和POST的流,显示完美。
-
提取HTTP协议信息
GET
POST
以下几种字段都可以做到相应的匹配。
PUT
HEAD
OPTIONS
此处HTTP协议类型的数据流还可以进一步细分,本项目当前只支持识别以上字段开头的数据流,其他的字段留给大家自己去定制。 -
提取HTTPS协议信息
主要提取了443端口的Client Hello数据流中的域名信息。
UDP协议识别
- 提取DNS协议信息
主要提取了数据流中的DNS域名请求信息。
[70]是指数据流编号,后面跟着此数据流的五元组,下面第一行是请求的该DNS域名,第二行是该域名对应的hex字符串,由空格对应上面域名的小数点分隔符,每开头的两个字符代表该段的长度,如:0c表示第一段有12个字符
输出TXT文档信息
输出的文档是一个TXT的文档,汇总了上面识别的各个数据流的结果以及下面的域名信息,这些都是作者在反复看Wireshark分析数据包之后很难一下子就汇总的信息。本项目也算是给网络数据包分析带来一个新姿势,可以说开发这个分析工具还是给作者带来了一些方便的,也希望这个项目能方便到大家!
SSL NAME
DNS NAME
后续
这个项目会继续完善下去,现在存在的问题还是有一些,后面准备用到Django和Flask对本项目进行重构,然后加上数据可视化分析,或许会更直观,也能惠及到更多的网络分析人员!