9 个稳定版本
1.4.1 | 2024 年 2 月 15 日 |
---|---|
1.4.0 | 2023 年 6 月 17 日 |
1.3.0 | 2023 年 4 月 6 日 |
1.2.0 | 2023 年 1 月 20 日 |
1.0.1 | 2022 年 12 月 31 日 |
#662 在 网络编程
每月 35 次下载
225KB
839 行
pktstrings
是否曾在 PCAP 上运行过 strings
并发现一些有趣的内容,但又因无法确定是哪个数据包中发生的而感到沮丧?
Pktstrings 类似于 Unix strings
命令,但具有数据包感知能力。
它会在您的 PCAP 中找到任何看起来像是 ASCII 字符串的内容,并输出字符串所在的包号以及 IP 5 元组(如果不是 IP,则显示 MACs + Ethertype)。
构建前需要 libpcap 头文件(请参阅 依赖项)。
功能
- 支持离线 PCAP 和实时网络捕获。
- 使用 BPF 表达式过滤要分析的包。
- 在尝试查找字符串之前对包进行正则表达式过滤。
- 带有本地缓存的 DNS 解析器(使用
--feature resolve
启用选项)。 - 支持 Grep 友好(默认)和复制友好(
-b
,--block-print
)输出选项。 - 支持 802.1Q 网络;如果存在,显示 VLAN ID 和 IP。
依赖项
Pktstrings 使用 pcap crate,因此需要在构建之前安装 libpcap(在 Windows 上为 Npcap/WinPcap)。遵循 pcap crate 提供的说明以获取适合您系统的正确安装说明。
https://github.com/rust-pcap/pcap#installing-dependencies
安装
从 crates.io 安装二进制文件:cargo install pktstrings
使用可选的 DNS 解析器标志(-r, --resolve-dns
)安装:cargo install pktstrings --features=resolve
要禁用颜色输出进行安装:cargo install pktstrings --features=bland
从克隆的源安装:cargo install --path .
运行
默认安装位置是 ~/.cargo/bin/pktstrings
。运行 pktstrings 并使用 -h
获取帮助和可用选项。
关于 BPF 和正则表达式
Pktstrings 提供两种方法在转储字符串时过滤输出噪音:BPF 表达式和正则表达式。应优先选择 BPF 表达式,因为它们是迄今为止削减到感兴趣数据包最快的方法。然而,有时能够执行自由形式的搜索而不是固定位置的搜索很有用;因此,pktstrings 也支持正则表达式作为进一步过滤到只包含感兴趣数据包的方法。基于正则表达式的过滤将整个数据包数据传递给 Rust 的 regex 引擎使用 regex::bytes crate;这意味着我们不仅可以匹配字符串表达式,还可以匹配数据包数据中的任意字节。用户提供的表达式具有隐式的 .*?
。
BPF 和正则表达式过滤器仅作为执行字符串搜索之前的一个预过滤阶段。一旦数据包匹配这些过滤器,数据将按照常规进行 ASCII 字符串转储。
示例
仅转储包含特定字符串的数据包中的字符串:pktstrings -f my_capture.pcap -s 'CTF_FLAG{.+}'
在本地网络上查找 mDNS 交谈:pktstrings -'udp port 5353'
到本地运行 HTTP 服务器的基本认证登录:pktstrings --'tcp port 80' -'POST.+login.php'
设置特定 cookie 的 HTTP 响应数据包:pktstrings -.pcap ---'ip src 192.168.1.100 and tcp port 80' -'Set-Cookie:.+\b[Dd]omain=.*some-http-server.com'
包含任意字节模式后跟有效UTF-8编码字符串的分组:pktstrings -f my_capture.pcap -s '(?-u)\x7b\xa9(?:[\x80-\xfe]|[\x40-\xff].)(?u:(.*))'
待办事项(可能)
- 其他字符串编码
- 支持更多协议
- 全面支持PCAPNG
依赖项
~4–16MB
~155K SLoC