基于Python3+Scapy的网络数据包批量分析工具

  • 项目源码
  • 适用范围以及使用说明
  • 背景
  • 环境准备及运行说明
  • 常见协议分析识别
  • TCP协议识别
  • UDP协议识别
  • 输出TXT文档信息
  • SSL NAME
  • DNS NAME
  • 后续


项目源码

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的流,显示完美。

  1. 提取HTTP协议信息
    GET
  2. python求包络信号_运维


  3. python求包络信号_python求包络信号_02

  4. POST
  5. python求包络信号_wireshark_03


  6. python求包络信号_wireshark_04

  7. 以下几种字段都可以做到相应的匹配。
    PUT
    HEAD
    OPTIONS
    此处HTTP协议类型的数据流还可以进一步细分,本项目当前只支持识别以上字段开头的数据流,其他的字段留给大家自己去定制。
  8. 提取HTTPS协议信息
    主要提取了443端口的Client Hello数据流中的域名信息。
  9. python求包络信号_python求包络信号_05

UDP协议识别

  1. 提取DNS协议信息
    主要提取了数据流中的DNS域名请求信息。
    [70]是指数据流编号,后面跟着此数据流的五元组,下面第一行是请求的该DNS域名,第二行是该域名对应的hex字符串,由空格对应上面域名的小数点分隔符,每开头的两个字符代表该段的长度,如:0c表示第一段有12个字符

输出TXT文档信息

输出的文档是一个TXT的文档,汇总了上面识别的各个数据流的结果以及下面的域名信息,这些都是作者在反复看Wireshark分析数据包之后很难一下子就汇总的信息。本项目也算是给网络数据包分析带来一个新姿势,可以说开发这个分析工具还是给作者带来了一些方便的,也希望这个项目能方便到大家

SSL NAME

python求包络信号_运维_06

DNS NAME

python求包络信号_python_07

后续

这个项目会继续完善下去,现在存在的问题还是有一些,后面准备用到Django和Flask对本项目进行重构,然后加上数据可视化分析,或许会更直观,也能惠及到更多的网络分析人员!