python多引擎pcap分析工具包。

pypcapkit的Python项目详细描述


Pypcapkit

pcapkit项目是一个开放源码的python程序,主要用于解析和分析pcap,它是一个流pcap文件提取器。支持dictdumper,支持多种输出报告格式。

< Buff行情>

请注意,整个项目支持python 3.4或更高版本。


关于

pcapkit是一个独立的开放源码库,仅使用dictdumper作为其格式化输出转储程序。

< Buff行情>

有一个名为jspcapy的项目可以在pcapkit上工作,这是一个用于提取pcap的命令行工具,但现在不推荐使用。

与流行的PCAP文件提取程序(如scapydpktpyshark等)不同,PCAPKit使用流式处理策略读取输入文件。即逐帧读取,减少内存占用,并以某种方式提高效率。

模块结构

pcapkit中,所有文件可以描述为以下六个部分。

  • interface(pcapkit.interface)--pcapkit库的用户界面,它标准化并简化了该库的使用
  • 基金会(<代码> PCAKIT.BASIC < /代码>)-综合文件I/O和协议分析,协调所有网络中的信息交换K层
  • 重新组装(pcapkit.rejomby)——基于rfc815中描述的算法,实现IP和TCP数据包的数据报重新组装
  • ipsuite(pcapkit.ipsuite)——internet协议套件的构造函数集合
  • 协议(pcapkit.protocols)——所有协议系列的集合,包括详细的实现和方法
  • 实用程序(pcapkit.utilities)——四个实用程序函数和类的集合
  • coreKit(pcapkit.coreKit)--用于pcapkit实现的核心实用程序
  • 工具包(pcapkit.toolkit)——用于实现的功能工具
  • dumpkit(pcapkit.dumpkit)--用于pcapkit实现的转储实用程序

 src=

发动机比较

此外,由于pcapkit的复杂性,它的提取过程每包大约需要0.01秒,这还不够理想。因此,pcapkit引入了替代的提取引擎来加速此过程。到目前为止,pcapkit支持scapydpkt,以及pyshark。另外,pcapkit支持两种多处理策略(server&;pipeline)。有关详细信息,请参阅文档。

<表><广告>发动机性能(每包秒数)< /广告><正文>dpkt0.0003609057267506917scapy0.0024434357844035默认值0.017523006995519管道0.0145042414863079服务器<代码>0.04667099356651306pyshark0.0792640733718872

< /P>

安装

< Buff行情>

注意pcapkit支持3.4以后的python版本

只需运行以下命令即可从pypi安装当前版本:

pip install pypcapkit

或从Git存储库安装最新版本:

git clone https://github.com/JarryShaw/PyPCAPKit.git
cd pypcapkit
pip install -e .
# and to update at any time
git pull

而且由于PCAPKit支持各种提取引擎和广泛的插件功能,因此您可能需要安装可选引擎:

# for DPKT only
pip install pypcapkit[DPKT]# for Scapy only
pip install pypcapkit[Scapy]# for PyShark only
pip install pypcapkit[PyShark]# and to install all the optional packages
pip install pypcapkit[all]# or to do this explicitly
pip install pypcapkit dpkt scapy pyshark

< /P>

用法

文档

接口

<表><广告>名称说明 < /广告><正文>提取PCAP文件分析应用层数据包重新组装FRagmented数据报跟踪跟踪TCP数据包流

格式
<表><广告>名称说明 < /广告><正文>jsonjavascript对象表示法(json)格式 plistMacOS属性列表(plist)格式 树状图文本格式 pcapPCAP格式
<表><广告>名称说明 < /广告><正文>raw没有特定层链接数据链路层 互联网层 传输层 应用程序应用程序层
发动机 <表><广告>名称说明 < /广告><正文>默认引擎 mpserver具有服务器处理策略的多处理引擎 具有流水线策略的多处理引擎 引擎 引擎 引擎

协议 <表><广告>名称说明 <泰德><正文>无有效载荷原始数据包数据arp地址解析协议 以太网以太网协议 第二层隧道协议 首先打开最短路径rarp反向地址解析协议 vlan802.1q客户VLAN标记类型 验证标题主机标识协议 IPv6逐跳选项ip互联网协议 ipsec互联网协议安全性 ipv4互联网协议版本4 ipv6互联网协议版本6 ipv6框架IPv6的片段头 IPv6的目标选项 ipv6路由IPv6的路由头网络数据包交换 mh机动性标题tcp传输控制协议 用户数据报协议 http超文本传输协议

文档可以在pcapkit的子模块中找到。或者,您可以在test文件夹中找到使用示例。有关详细信息,请参阅源代码--docstrings应该可以帮助您:)

pshelppython中的函数应该总能帮助您解决问题。

cli用法

< Buff行情>

以下部分最初在jspcapy中描述,该部分现已弃用并合并到此存储库中。

如帮助手册中所示,它非常易于使用:

$ pcapkit --help
usage: pcapkit [-h] [-V] [-o file-name] [-f format] [-j] [-p] [-t] [-a] [-v]
               [-F] [-E PKG] [-P PROTOCOL] [-L LAYER]
               input-file-name

PCAP file extractor and formatted exporter

positional arguments:
  input-file-name       The name of input pcap file. If ".pcap" omits, it will
                        be automatically appended.

optional arguments:
  -h, --help            show this help message and exit
  -V, --version         show program's version number and exit
  -o file-name, --output file-name
                        The name of input pcap file. If format extension
                        omits, it will be automatically appended.
  -f format, --format format
                        Print a extraction report in the specified output
                        format. Available are all formats supported by
                        dictdumper, e.g.: json, plist, and tree.
  -j, --json            Display extraction report as json. This will yield
                        "raw" output that may be used by external tools. This
                        option overrides all other options.
  -p, --plist           Display extraction report as macOS Property List
                        (plist). This will yield "raw" output that may be used
                        by external tools. This option overrides all other
                        options.
  -t, --tree            Display extraction report as tree view text. This will
                        yield "raw" output that may be used by external tools.
                        This option overrides all other options.
  -a, --auto-extension  If output file extension omits, append automatically.
  -v, --verbose         Show more information.
  -F, --files           Split each frame into different files.
  -E PKG, --engine PKG  Indicate extraction engine. Note that except default
                        engine, all other engines need support of corresponding
                        packages.
  -P PROTOCOL, --protocol PROTOCOL
                        Indicate extraction stops after which protocol.
  -L LAYER, --layer LAYER
                        Indicate extract frames until which layer.

在大多数情况下,您应该指明输入PCAP文件的名称(扩展名可能省略),并且至少应指明输出格式(jsonplisttree)。一旦未指定格式,输出文件的名称必须具有正确的扩展名(*.json*.plist,或*.txt),否则将引发格式错误

对于verbose模式,提取时将打印详细信息(如下示例)。和自动扩展名标志对输出文件有效,指示是否应附加扩展名。

< /P>

样品

使用示例

test文件夹中所述,pcapkit非常容易使用,只需三个动词作为其主界面。下面显示了几种情况。

  • 提取一个pcap文件并将结果转储到一个特定的文件(不需要重新组合)

    importpcapkit# dump to a PLIST file with no frame storage (property frame disabled)plist=pcapkit.extract(fin='in.pcap',fout='out.plist',format='plist',store=False)# dump to a JSON file with no extension auto-completejson=pcapkit.extract(fin='in.cap',fout='out.json',format='json',extension=False)# dump to a folder with each tree-view text file per frametree=pcapkit.extract(fin='in.pcap',fout='out',format='tree',files=True)
  • 提取PCAP文件并从帧中提取IP数据包(IPv4和IPv6)(无输出文件)

    >>>importpcapkit>>>extraction=pcapkit.extract(fin='in.pcap',nofile=True)>>>frame0=extraction.frame[0]# check if IP in this frame, otherwise ProtocolNotFound will be raised>>>flag=pcapkit.IPinframe0>>>tcp=frame0[pcapkit.IP]ifflagelseNone
  • 提取一个pcap文件并重新组装tcp负载(没有输出文件或帧存储)

    importpcapkit# set strict to make sure full reassemblyextraction=pcapkit.extract(fin='in.pcap',store=False,nofile=True,tcp=True,strict=True)# print extracted packet if HTTP in reassembled payloadsforpacketinextraction.reassembly.tcp:forreassemblyinpacket.packets:ifpcapkit.HTTPinreassembly.protochain:print(reassembly.info)

cli示例

pcapkit的cli(命令行界面)有两种不同的访问方式。

  • 通过控制台脚本--直接使用命令名pcapkit[…](如示例所示)
  • 通过python模块--python-m pypcapkit[…]的工作原理与上面完全相同

下面是一些使用示例:

  • 导出到MacOS属性列表(xcode对此格式有特殊支持)
$ pcapkit in --format plist --verbose
?Loading file 'in.pcap'
 - Frame   1: Ethernet:IPv6:ICMPv6
 - Frame   2: Ethernet:IPv6:ICMPv6
 - Frame   3: Ethernet:IPv4:TCP
 - Frame   4: Ethernet:IPv4:TCP
 - Frame   5: Ethernet:IPv4:TCP
 - Frame   6: Ethernet:IPv4:UDP
?Report file stored in 'out.plist'
  • 导出到JSON文件(未指定格式)
$ pcapkit in --output out.json --verbose
?Loading file 'in.pcap'
 - Frame   1: Ethernet:IPv6:ICMPv6
 - Frame   2: Ethernet:IPv6:ICMPv6
 - Frame   3: Ethernet:IPv4:TCP
 - Frame   4: Ethernet:IPv4:TCP
 - Frame   5: Ethernet:IPv4:TCP
 - Frame   6: Ethernet:IPv4:UDP
?Report file stored in 'out.json'
  • 导出到文本树视图文件(不带扩展名自动更正)
pip install pypcapkit
0

< /P>

待办事项

  • [X]指定rawpacket
  • [X]介面动词
  • [X]查看文档字符串
  • [X]合并jspcapy
  • []编写文档
  • []实现IP和MAC地址容器
  • []实现选项列表提取器
  • []实施更多协议

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何使用jdbc和jsp将数据插入mysql?   Oracle Java 7密钥工具无法将pkcs11密钥库导入JKS:非PKCS 8编码   java使用接口获取Todo id或JPA getOne方法速度更快   Java获得给定日期的下个月的第一天   java使用单个“更新”按钮将测试表的自动增量值插入分数表   BottomNavigationView下坐标布局上的java Fab按钮   java在安卓 OnPreferenceClickListener中调用非静态方法   java在MediaStore中在哪里可以找到图像的文件路径   java Spring boot 2.2 activemq jetty冲突   java集合值在所有列表变量中都得到更新   java如何在SpringMVC+maven项目中获取web上下文路径?   java不可变类:空白的最后字段可能未被初始化   在Android中实现ads的java程序?   java将数据库任务与spring petclinic应用程序分离   同一实体列上的java双向关联不能为null