Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
工具/GitLabGitLab/mike01/pypacker
数据包嗅探与分析Web代理与拦截网络安全渗透测试实用工具与框架红队
GitLabmike01/pypacker

pypacker

📦 最快最简单的Python数据包操作库

查看仓库
281823天前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

一般信息

这是 Pypacker:Python 中最快、最简单的底层数据包操作库。 参见下面的示例,了解您可以用它做什么。

如果您想支持此项目,可以通过 PayPal 使用 PayPal 捐赠 进行捐赠。

使用 Pypacker 可以做什么

  • 通过关键字或原始字节创建自定义数据包,并通过 Python 读取/更改其数据:examples/create_packets.py
  • 从 pcap 文件读取/写入数据包(仅支持 Wireshark/tcpdump pcap 格式):examples/pcap_read_write.py
  • 将多个 pcap 文件合并为一个文件。尝试读取损坏的 pcap 文件,并允许通过回调进行过滤:examples/pcap_merge.py
  • 发送/接收第 2 层数据包:examples/send_receive_l2.py
  • 拦截(并修改)数据包,例如用于 MITM:examples/interceptor3.py

先决条件

  • Python 3.x(CPython、Pypy、Jython 或其他解释器)
  • 可选:netifaces >=0.10.6(用于 utils)
  • 可选(用于 interceptor):
    • CPython
    • 基于 Linux 的系统,内核支持 NFQUEUE 目标。内核配置选项位于:
      • 网络选项 -> 网络数据包过滤 -> 核心 Netfilter -> NFQUEUE 目标
    • iptables(或 nftables)
      • 可以添加 NFQUEUE 相关规则,例如 "iptables -I INPUT 1 -j NFQUEUE --queue-num 0"
    • libnetfilter_queue 库(参见 http://www.netfilter.org/projects/libnetfilter_queue)

安装

一些示例:

  • 克隆最新版本
    • git clone https://gitlab.com/mike01/pypacker.git
    • cd pypacker
    • python setup.py install

由于复杂的身份验证机制,不再支持 pip/pypi,抱歉。

使用示例和文档

参见:

  • 上述示例
  • ./examples 目录中的示例
  • Gitlab Wiki:https://gitlab.com/mike01/pypacker/-/wikis/home

协议本身(参见 layerXYZ)通常没有太多文档,因为它们由各自的 RFC / 官方标准记录。

测试

测试执行如下:

  1. 将 Pypacker 目录添加到 PYTHONPATH。
  • cd pypacker
  • export PYTHONPATH=$(pwd):$PYTHONPATH
  1. 执行测试
  • python tests/test_pypacker.py

性能测试结果:

root@kitploit:~
硬件:Intel CPU,4 核 @ 3.2 GHz
Python:CPython v3.10

nr = 本机上的新结果
每轮测试次数:10000
=====================================
>>> 数据包解析 (Ethernet + IP + UDP + DNS):搜索 UDP 端口
耗时:0.1409761905670166s
nr = 70933 p/s
>>> 数据包解析 (Ethernet + IP + TCP + HTTP):搜索 TCP 端口
耗时:0.3157649040222168s
nr = 31669 p/s
>>> 数据包解析 (Ethernet + IP + TCP + HTTP):读取所有头部
耗时:0.5989120006561279s
nr = 16696 p/s
>>> 解析第一层 (IP + ICMP)
耗时:0.014587163925170898s
nr = 685534 p/s
>>> 创建/直接赋值 (仅 IP 头部)
耗时:0.02884364128112793s
nr = 346696 p/s
>>> 不修改时的 bin() (IP)
耗时:0.013646364212036133s
nr = 732795 p/s
>>> 修改并重新计算校验和后的输出 (IP)
耗时:0.07719659805297852s
nr = 129539 p/s
>>> 基本/第一层解析 (Ethernet + IP + TCP + HTTP)
耗时:0.019113540649414062s
nr = 523189 p/s
>>> 修改 Triggerlist 元素值 (Ethernet + IP + TCP + HTTP)
耗时:0.017654895782470703s
nr = 566415 p/s
>>> 修改动态字段 (Ethernet + IP + TCP + HTTP)
耗时:0.006037473678588867s
nr = 1656321 p/s
>>> 直接赋值与拼接 (Ethernet + IP + TCP + HTTP)
耗时:0.2050457000732422s
nr = 48769 p/s
.>>> pypacker 与 dpkt 与 scapy 的性能对比
比较 pypacker、dpkt 和 scapy 的性能(解析 Ethernet + IP + TCP + HTTP)
nr = 本机上的新结果
每轮测试次数:10000
>> 测试 pypacker 解析速度
nr = 194382 p/s
>> 测试 dpkt 解析速度
无法执行 dpkt 测试:ModuleNotFoundError("No module named 'dpkt'")
>> 测试 scapy 解析速度
nr = 2775 p/s

常见问题解答

如有任何疑问,请提交错误(将标记为“问题”)。

问:pypacker 有多快?

答:见上述结果。要查看您机器上的详细结果,请执行测试: python tests/test_pypacker.py PerfTestCase

问:支持哪些协议?

答:目前最低支持的协议有: Ethernet、Radiotap、IEEE80211、ARP、DNS、STP、PPP、OSPF、VRRP、DTP、IP、ICMP、PIM、IGMP、IPX、 TCP、UDP、SCTP、HTTP、NTP、RTP、DHCP、RIP、SIP、Telnet、HSRP、Diameter、SSL、TPKT、Pmap、Radius、BGP

问:是否计划支持 [xyz]?

答:新功能会在我需要或有人贡献时添加到 Pypacker 中——没有正式的计划在未来的版本中添加特定功能的支持。 贡献的一般指南可以在 HACKING 文件中找到。

问:我如何为此项目做贡献?

答:请使用 Gitlab 错误跟踪器提交错误/功能请求。在提交新问题之前,请阅读错误跟踪器以了解已知问题。补丁可以通过拉取请求发送。

问:Pypacker 在 Windows 3.11/XP/7/8/mobile 等系统上存在 xyz 问题。你能修复吗?

答:基本功能应该适用于任何操作系统。可选功能可能会出现问题(例如 interceptor)。

问:Pypacker 采用什么许可证?

答:采用 GPLv2 许可证(更多信息请参阅 LICENSE 文件)。

问:调用 copy.deepcopy(some_packet) 会引发异常 "TypeError: can't pickle Struct objects"。

答:尝试以下解决方法以能够 pickle Struct 对象:

root@kitploit:~
import struct, copyreg
def pickle_struct(s):
	return struct.Struct, (s.format,)

copyreg.pickle(struct.Struct, pickle_struct)

使用提示

性能相关

  • 为了获得最大性能,请通过以下索引符号从最低级别开始访问属性。这将仅在后台延迟解析所需层:
root@kitploit:~
pkt_eth, pkt_ip, pkt_tcp, pkt_http = pkt[
 	None,
	(None, lambda b: b.__class__ in [ip.IP, ip6.IP6]),
	(tcp.TCP, lambda c: c.dport==80),
	http.HTTP
]
...
  • 避免使用 "%s" 或 "%r" 格式转换数据包,因为这会触发后台解析:
root@kitploit:~
pkt = Ethernet() + IP() + TCP()
# 这会解析所有层
packet_print = "%s" % pkt
  • 避免使用单值索引符号 pkt[L] 搜索层,因为这会解析所有层直到找到 L 或达到最高层:
root@kitploit:~
packet_found = pkt[Telnet]
# 替代方案:使用多值索引符号。这将停止在任何不匹配的层进行解析:
packet_found = pkt[Ethernet,IP,TCP,Telnet]
  • 使用 pypy(完整数据包解析方面比 CPython 快约 3 倍)

  • 为了获得更高性能,禁用自动字段(影响调用 bin(...)):

root@kitploit:~
pkt = ip.IP(src_s="1.2.3.4", dst_s="1.2.3.5") + tcp.TCP()
# 禁用 IP 和 TCP 的校验和计算(以及任何其他更新)(仅此数据包实例)
pkt.sum_au_active = False
pkt.tcp.sum_au_active = False
bts = pkt.bin(update_auto_fields=False)
  • 增大接收/发送缓冲区以获得最大性能。可以使用以下命令完成 (取自:http://www.cyberciti.biz/faq/linux-tcp-tuning/):
root@kitploit:~
sysctl -w net.core.rmem_max=12582912
sysctl -w net.core.rmem_default=12582912
sysctl -w net.core.wmem_max=12582912
sysctl -w net.core.wmem_default=12582912
sysctl -w net.core.optmem_max=2048000
sysctl -w net.core.netdev_max_backlog=5000
sysctl -w net.unix.max_dgram_qlen=1000
sysctl -w net.ipv4.tcp_rmem="10240 87380 12582912"
sysctl -w net.ipv4.tcp_wmem="10240 87380 12582912"
sysctl -w net.ipv4.tcp_mem="21228 87380 12582912"
sysctl -w net.ipv4.udp_mem="21228 87380 12582912"
sysctl -w net.ipv4.tcp_window_scaling=1
sysctl -w net.ipv4.tcp_timestamps=1
sysctl -w net.ipv4.tcp_sack=1

其他相关

  • TCP/UDP 流的重组可以使用 tshark 通过管道实现 使用 "-i -" 和 "-z follow,prot,mode,filter[,range]"
  • 读取捕获文件时选择正确的“最低层”:使用 wireshark 打开文件,查看数据链路层的数据包详细信息。大多数情况下这可能是 Ethernet II,可以使用 layer12.ethernet.Ethernet 解析。 例如,当通过 wireshark/tshark 的 "-i any" 选项捕获时,这将导致 Linux cooked 捕获,由 layer12.linuxcc.LinuxCC 表示。
下载工具