arn-c0de/fritzdump
GitHub: arn-c0de/fritzdump
FritzDump是一款用于捕获和分析FRITZ!Box网络流量的工具。
Stars: 1 | Forks: 0
# FritzDump
从FRITZ!Box捕获的实时数据包。
FritzDump登录到FRITZ!Box的隐藏数据包捕获页面,并将所选接口(LAN、Wi-Fi或WAN)的实时流量直接流式传输到Wireshark、ntopng、`.pcap`文件或stdout,让您可以实时查看和分析您自己网络的连接。无需通过Web UI点击:它为您处理登录并开始捕获。
支持旧MD5登录和当前PBKDF2登录(FRITZ!OS 7.24+ / 8.x)。
作者:arn-c0de · 许可证:MIT
## 工作原理
1. 对`login_sid.lua`(MD5或PBKDF2挑战/响应)进行身份验证。
2. 为所选接口打开盒子的内部`capture_notimeout`端点。
3. 将原始pcap流实时传输到您选择的目标。
## 设置
```
cp .env.example .env
chmod 600 .env
```
使用您的FRITZ!Box登录编辑`.env`:
```
FRITZ_HOST=192.168.178.1
FRITZ_USER=fritz-capture-user
FRITZ_PW=your-password
FRITZ_HTTPS=true
# 登录API仅在盒子的局域网IP上响应,其自签名证书没有
# IP SAN -> 验证无法通过那里,因此在受信任的局域网中请使用:
# FRITZ_HTTPS_INSECURE=true (加密,未认证;见下文安全部分)
```
提示:创建一个仅具有**"FRITZ!Box设置"**权限的专用FRITZ!Box用户。对于仅密码登录(无用户名),设置`FRITZ_USER=dslf-config`。
## 使用方法
检查登录并列出可用的接口ID:
```
./run.sh test
```
将默认设置(LAN + Wi-Fi 5 GHz + Wi-Fi 2.4 GHz)捕获到`./dumps/`:
```
./run.sh
```
使用`Ctrl-C`停止。
### 其他模式
```
./run.sh file 1-lan # write one interface to a .pcap file
./run.sh wireshark 1-lan # stream live into Wireshark
./run.sh ntopng 1-lan # stream live into ntopng
./run.sh raw 1-lan # raw pcap to stdout (pipe into your own tool)
```
您还可以直接调用Python工具:
```
./fritzdump.py --list # list interfaces
./fritzdump.py --iface 2-1 --to wireshark # WAN live into Wireshark
./fritzdump.py --iface 1-0 --to capture.pcap # write to a file
./fritzdump.py --iface 2-1 --to - | your-tool # raw pcap to stdout
./fritzdump.py --iface 2-1 --filter 'host 1.2.3.4' # pcap filter
./fritzdump.py --iface 2-1 --to cap.pcap --redact # headers only, no payload
```
### 红acted捕获(仅元数据)
传递`--redact`(或在`.env`中设置`FRITZ_REDACT=true`)以记录流量**不存储数据包内容**。每个帧被截断到其L2–L4头部:保留以太网(MAC地址)、IPv4/IPv6(IP地址、协议)和TCP/UDP/ICMP(端口、标志),丢弃应用程序有效负载。记录中保留原始帧长度,因此您仍然可以看到消息的**长度**和**流动方向**——只是不包含内容。
输出仍然是一个有效的pcap,可以在Wireshark/ntopng中正常打开(它显示"[捕获期间数据包大小受限]"以显示剥离的有效负载)。适用于每个目标(`--to wireshark | ntopng | file | -`)。
```
./run.sh file 1-lan # full capture (default)
FRITZ_REDACT=true ./run.sh file 1-lan # redacted: headers only
```
接口ID取决于您的型号/固件——运行`./run.sh test`以找到它们。以下默认值是FRITZ!Box 6591报告的:
- LAN桥接:`1-lan`
- Wi-Fi 5 GHz:`4-133`
- Wi-Fi 2.4 GHz:`4-135`
- WAN(示例):`2-1`
## 导出
捕获写入到`./dumps/`。当新的默认捕获开始时,首先删除旧的`dump_*`文件夹。`dumps/`文件夹以及所有`*.pcap`、`*.pcapng`和`*.eth`文件都是git忽略的。
## 安全注意事项
- 仅捕获您拥有或明确授权检查的网络上的流量。
- 永远不要提交`.env`或任何数据包捕获。
- **使用HTTPS**。纯HTTP以明文发送会话令牌和每个捕获的数据包,通过您的LAN/Wi-Fi;当您这样做时,工具会打印警告。
- **TLS验证,首次运行注意事项**。登录API(`login_sid.lua`)仅在盒子的**LAN IPv4**上响应——`fritz.box`主机名(IPv6/MyFRITZ)不返回登录挑战。在该LAN IP上,盒子提供一个**自签名证书,没有IP SAN**,因此HTTPS验证+主机检查永远无法通过,`--cacert`也不会有所帮助(主机名检查仍然在裸IP上失败)。因此,使用`--https`和验证,您将获得`CERTIFICATE_VERIFY_FAILED`,捕获将无法开始。您的选择:
- **受信任的有线LAN(常用选择):** `--https-insecure`(或`FRITZ_HTTPS_INSECURE=true`)。链接保持**加密**(凭据和数据包永远不会以明文形式存在)但**未认证**,因此LAN上的活动MITM可以冒充盒子。仍然比纯HTTP好。工具会大声警告并拒绝与`--cacert`结合使用。
- **Pin + verify**仅当您通过**在证书SAN中**(例如`fritz.box`)并且在该LAN上解析到该名称的主机名到达盒子时才有效;然后设置该名称为`FRITZ_HOST`,将`--cacert`/`FRITZ_CACERT`指向盒子的PEM,并保持验证。注意,盒子可能在其主机名上提供公开受信任的(Let's Encrypt)证书,在这种情况下不需要固定——但是该证书会旋转,因此不要固定其叶子。
- 导出在LAN IP上提供的证书(用于固定+验证情况):
openssl s_client -connect 192.168.178.1:443 -showcerts /dev/null | openssl x509 > fritzbox.pem
- 捕获过滤器(`--filter`)限制为BPF字符白名单。
- 当盒子提供时,始终使用当前PBKDF2登录。旧7.24之前的**MD5登录较弱,默认拒绝**以阻止强制降级;仅对于真正旧的固件,使用`--allow-legacy-login` / `FRITZ_ALLOW_LEGACY=true`启用它,理想情况下通过HTTPS。
- Pcap导出包含您的真实流量(包括来自任何未加密站点的凭据)。它们在`./dumps/`下以`chmod 600`写入,并且是git忽略的——分析完毕后删除它们。如果您只需要流量元数据(谁与谁交谈,消息大小),请使用`--redact` / `FRITZ_REDACT=true`,这样有效负载永远不会写入磁盘。
标签:FRITZ!Box, MD5, ntopng, PBKDF2, pcap文件, VivaGraphJS, Wireshark, 内核驱动, 句柄查看, 实时流量分析, 情报分析, 环境变量, 用户认证, 系统分析, 系统设置, 网络优化, 网络分析, 网络协议, 网络安全, 网络开发, 网络性能, 网络抓包, 网络故障排除, 网络数据, 网络流量, 网络编程, 网络诊断, 网络配置, 脚本工具, 逆向工具, 隐私保护