mole 是一个非常强大且有趣的网络流量分析和模糊测试工具,它的名字来源于“Mole”(鼹鼠),寓意着它能像鼹鼠一样深入网络,挖掘和嗅探流量,甚至进行一些“破坏性”的测试。

mole 主要有两个核心功能:
- 网络流量嗅探与分析:捕获网络数据包,并对其内容进行实时分析。
- 模糊测试:向目标发送大量“畸形”或“随机”的数据,以发现目标软件或网络服务的安全漏洞。
核心功能详解
A. 流量嗅探与分析
这是 mole 最基础也是最强大的功能之一,它不仅仅是简单地抓包,而是可以对抓取到的数据进行智能解析和匹配。
主要特点:
- 实时过滤:可以实时地对网络流量进行过滤,只关注你感兴趣的数据,只查看特定 IP、特定端口、特定协议(如 HTTP, DNS, SMTP)的流量。
- 正则表达式匹配:这是
mole的王牌功能,你可以在数据包的载荷(Payload)中使用正则表达式来搜索特定的模式,这对于安全研究人员来说极其有用,可以用来发现:- 敏感信息泄露(如密码、API Key、Session ID)。
- 特定的攻击特征(如 SQL 注入、XSS 的尝试)。
- 特定应用的流量(如识别出某个软件的通信协议)。
- 输出友好:它会以清晰、结构化的方式展示匹配到的数据包,包括时间戳、源/目的 IP 和端口、协议以及载荷内容。
使用场景示例:
一个安全分析师想知道公司内部网络中是否有员工正在通过 HTTP 协议传输包含 "password" 字符串的数据,他就可以用 mole 来嗅探,并设置一个正则表达式来匹配。

B. 模糊测试
mole 的模糊测试功能允许你自动化地向目标发送大量异常数据,以测试目标程序的健壮性。
主要特点:
- 多种测试模式:支持多种模糊测试技术,如:
- 位翻转:对数据的特定位进行翻转(0变1,1变0)。
- 字节替换:用随机字节替换数据中的特定字节。
- 重复数据:将数据中的某一部分重复多次。
- 突变:结合多种技术进行随机变化。
- 可定制化:你可以自定义要测试的数据、目标 IP、端口、协议,以及如何对数据进行变异。
- 协议感知:虽然
mole本身不完全是协议感知的(像专业的 fuzzer 如 Sulley),但它可以与流量嗅探结合,先捕获一个合法的数据包,然后对这个数据包进行模糊测试。
使用场景示例:
一个开发者想测试自己编写的 TCP 服务器是否能够处理异常的输入,他可以用 mole 捕获一个正常的客户端请求,然后使用 mole 的模糊测试功能,将这个请求的载荷进行各种变异,并发送给服务器,观察服务器是否会崩溃或出现异常行为。
安装
mole 通常使用 Go 语言编写,因此安装非常简单。

前提条件: 你需要安装 Go 环境(版本 1.16 或更高)。
安装步骤:
- 打开终端。
- 使用
go install命令直接安装:go install -v github.com/odedlevin/mole/cmd/mole@latest
- 安装完成后,确保你的
GOPATH/bin目录在系统的PATH环境变量中。go install会自动处理,如果找不到命令,你可能需要手动添加。
基本用法与示例
mole 的命令行参数非常灵活,通常的模式是 mole [模式] [选项]。
模式 1: 嗅探模式
这是最常用的模式,用于捕获和分析流量。
基本语法:
mole sniff [options]
常用选项:
-i, --interface: 指定网络接口,如eth0,wlan0,如果不指定,mole会自动选择一个。-f, --filter: 设置 BPF 过滤器语法,和tcpdump类似。tcp port 80。-r, --regex: 设置要匹配的正则表达式。这是嗅探模式的核心。-o, --output: 将匹配到的数据包保存到文件。-v, --verbose: 显示详细信息。
示例 1:嗅探所有 HTTP 流量
# 监听 eth0 接口,只捕获 TCP 端口 80 的流量 sudo mole sniff -i eth0 -f "tcp port 80"
示例 2:嗅探包含 "api_key" 的流量
# 监听所有接口,使用正则表达式搜索包含 "api_key" 的数据包 sudo mole sniff -r "api_key"
注意:嗅探网络流量需要 root 权限。
模式 2: 模糊测试模式
用于向目标发送模糊数据。
基本语法:
mole fuzz [options]
常用选项:
-t, --target: 目标 IP 地址。-p, --port: 目标端口。-P, --protocol: 协议,目前主要是tcp。-d, --data: 初始的、合法的数据(Payload),这通常是你从真实通信中捕获的数据包。-m, --mutation: 指定变异方法,如bitflip,byte,repeat。-c, --count: 要发送的数据包数量。
示例 3:对一个简单的 TCP 服务进行模糊测试
假设你有一个运行在 0.0.1:9999 的服务,它期望接收 "LOGIN" 命令,你想测试它对畸形输入的反应。
# 1. 首先捕获一个合法的数据包 # 假设合法数据是 "LOGIN\n" echo -e "LOGIN\n" > initial_request.txt # 2. 使用 mole 对这个数据进行模糊测试 # 向 127.0.0.1 的 9999 端口发送 1000 个经过 "bitflip" 变异的数据包 sudo mole fuzz -t 127.0.0.1 -p 9999 -P tcp -d "$(cat initial_request.txt)" -m bitflip -c 1000
注意:模糊测试同样需要 root 权限,因为它需要创建原始套接字来发送自定义数据包。
高级技巧与注意事项
- 结合使用:
mole的真正威力在于将嗅探和模糊测试结合起来,先通过嗅探捕获一个合法的、有效的数据包,然后将其作为模糊测试的-d参数,这样你就能在真实协议的基础上进行高效的模糊测试。 - 性能考虑:
mole是用 Go 写的,性能不错,但在进行大规模、高频率的模糊测试时,可能会成为瓶颈,对于生产环境的极限测试,可能需要更专业的工具。 - 合法性:务必确保你有权限对目标网络或系统进行测试,未经授权的嗅探和攻击是非法的。 只在授权的测试环境(如你自己的实验室或客户明确授权的环境中)使用
mole。 - 学习曲线:虽然基本用法简单,但要充分发挥其威力,你需要熟悉正则表达式、BPF 过滤器以及基本的网络协议知识。
mole 是一个集网络嗅探和模糊测试于一体的“瑞士军刀”,它对于安全研究员、渗透测试人员和开发人员来说都是一个非常有价值的工具,它的设计理念简单而强大,使得快速的网络流量分析和安全测试变得非常便捷,如果你正在寻找一个轻量级但功能全面的网络分析工具,mole 绝对值得一试。
