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 log4j找不到log4jtest。房产?   我在java线程“awteventque1”中获得异常。lang.NullPointerException   java为什么在使用完整路径从文件系统读取文件时出错?   java如何迭代所有注册表项?   java中的安卓 Opencv SVM未正确训练   多线程Java ThreadPoolExecutor关闭特定线程?   如何使用Java NIO CreateDirectory方法设置目录所有者组?   java NatTable混合了固定宽度的列和可调整大小的填充剩余空间   java如何删除特定网络,即使该网络是由安卓上的其他设备创建的?   java Guava toJavaUtil()不存在   java对许多常量使用枚举是有效的memorywise?   java是否可以使用坐标定位JButton?   从WSDL生成java代码导致异常   java如何在安卓中导出javadoc   爬行JAX中的java NoClassDefFoundError错误   java为片段中的文本视图设置区域设置   发送最后一条消息后发生Java RMI RemoteException