一、概述
在 macOS 系统中进行网络抓包,可以帮助开发者调试网络问题、分析数据传输、检测安全漏洞等。本文将介绍几种常用的抓包工具和方法。
二、使用 Wireshark(图形化工具)
2.1 安装 Wireshark
方法一:使用 Homebrew 安装
# 安装 Homebrew(如果还没有)
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# 使用 Homebrew 安装 Wireshark
brew install --cask wireshark方法二:官网下载
访问 https://www.wireshark.org/download.html 下载 macOS 版本的安装包。
2.2 配置权限
安装后首次运行可能需要配置权限:
# 方法一:使用 sudo 运行(不推荐)
sudo /Applications/Wireshark.app/Contents/MacOS/Wireshark
# 方法二:配置 ChmodBPF(推荐)
sudo /Applications/Wireshark.app/Contents/Resources/Extras/ChmodBPF/ChmodBPF2.3 开始抓包
选择网络接口
- 打开 Wireshark
- 在主界面选择要监听的网络接口(通常是
en0用于 Wi-Fi,en1或其他用于以太网) - 双击接口名称开始捕获
使用过滤器
捕获前过滤(Capture Filter):
host 192.168.1.1 # 只捕获与指定主机的通信 port 80 # 只捕获80端口的数据 tcp port 443 # 只捕获HTTPS流量显示过滤器(Display Filter):
http # 只显示HTTP协议 tcp.port == 8080 # 显示8080端口的TCP流量 ip.addr == 192.168.1.100 # 显示特定IP的流量 http.request.method == "POST" # 只显示POST请求分析数据包
- 点击某个数据包查看详细信息
- 右键点击 → Follow → TCP Stream 可以查看完整的TCP会话
- 使用 Statistics 菜单查看统计信息
三、使用 tcpdump(命令行工具)
tcpdump 是 macOS 自带的命令行抓包工具,功能强大。
3.1 基础用法
# 查看所有网络接口
tcpdump -D
# 监听指定接口(需要 sudo 权限)
sudo tcpdump -i en0
# 保存到文件
sudo tcpdump -i en0 -w capture.pcap
# 指定抓包数量
sudo tcpdump -i en0 -c 100
# 显示详细信息
sudo tcpdump -i en0 -v
sudo tcpdump -i en0 -vv # 更详细
sudo tcpdump -i en0 -vvv # 最详细3.2 常用过滤器
# 按主机过滤
sudo tcpdump -i en0 host 192.168.1.1
# 按端口过滤
sudo tcpdump -i en0 port 80
sudo tcpdump -i en0 port 80 or port 443
# 按协议过滤
sudo tcpdump -i en0 tcp
sudo tcpdump -i en0 udp
sudo tcpdump -i en0 icmp
# 按源或目标过滤
sudo tcpdump -i en0 src 192.168.1.100
sudo tcpdump -i en0 dst 192.168.1.100
# 组合过滤
sudo tcpdump -i en0 'tcp port 80 and host 192.168.1.1'3.3 高级选项
# 不解析主机名(加快速度)
sudo tcpdump -i en0 -n
# 不解析端口名
sudo tcpdump -i en0 -nn
# 显示数据包内容(十六进制和ASCII)
sudo tcpdump -i en0 -X
# 只显示特定长度的数据包
sudo tcpdump -i en0 -s 0 # 捕获完整数据包
# 添加时间戳
sudo tcpdump -i en0 -tttt3.4 读取 pcap 文件
# 读取之前保存的文件
tcpdump -r capture.pcap
# 使用过滤器读取
tcpdump -r capture.pcap 'port 80'
# 转换为可读格式
tcpdump -r capture.pcap -A四、使用 Charles Proxy(HTTP/HTTPS 专用)
Charles 是专门用于 HTTP/HTTPS 调试的强大工具。
4.1 安装
访问 https://www.charlesproxy.com/download/ 下载并安装。
4.2 配置 HTTPS 抓包
安装 SSL 证书
- 打开 Charles
- 菜单:Help → SSL Proxying → Install Charles Root Certificate
- 在钥匙串中找到 Charles 证书,双击并设置为"始终信任"
启用 SSL Proxying
- Proxy → SSL Proxying Settings
- 勾选 Enable SSL Proxying
- 添加要监控的域名(或使用
*:443监控所有)
配置系统代理
- Proxy → macOS Proxy(自动配置系统代理)
4.3 抓包移动设备
- 确保手机和电脑在同一网络
- 在 Charles 中:Proxy → Proxy Settings,记下端口号(默认8888)
在手机上配置 HTTP 代理:
- iOS:设置 → Wi-Fi → 配置代理 → 手动
- Android:Wi-Fi 设置 → 代理 → 手动
- 输入 Mac 的 IP 地址和端口
- 在手机浏览器访问
chls.pro/ssl下载并安装证书
五、其他实用工具
5.1 mitmproxy(命令行 HTTP/HTTPS 代理)
# 安装
brew install mitmproxy
# 启动 Web 界面
mitmweb
# 命令行模式
mitmproxy
# 保存流量
mitmdump -w traffic.log5.2 ngrep(网络版 grep)
# 安装
brew install ngrep
# 搜索特定字符串
sudo ngrep -d en0 'password'
# 搜索 HTTP 请求
sudo ngrep -d en0 -q 'GET|POST'5.3 Proxyman(现代化的图形工具)
- 官网:https://proxyman.io/
- 类似 Charles,界面更现代
- 支持自动 SSL 证书安装
六、实战示例
示例 1:抓取特定网站的 HTTP 流量
# 使用 tcpdump
sudo tcpdump -i en0 -n -s 0 -w google.pcap 'host www.google.com and tcp port 80'
# 使用 Wireshark 过滤器
http.host == "www.google.com"示例 2:分析 DNS 查询
# tcpdump
sudo tcpdump -i en0 -n port 53
# Wireshark 过滤器
dns示例 3:监控本地应用的网络请求
# 监控本地回环接口
sudo tcpdump -i lo0 -A示例 4:抓取 HTTPS 流量并解密
使用 Charles Proxy:
- 安装并信任 Charles Root Certificate
- 启用 SSL Proxying(Proxy → SSL Proxying Settings)
- 添加需要抓取的域名(例如:
*.example.com:443) - 访问目标网站,即可在 Charles 中看到解密后的内容
示例 5:过滤特定应用的流量
# 使用 lsof 查找应用使用的端口
lsof -i -n -P | grep "应用名称"
# 然后使用 tcpdump 监听该端口
sudo tcpdump -i en0 port 端口号七、常用过滤表达式速查表
Wireshark 显示过滤器
| 过滤器 | 说明 |
|---|---|
ip.addr == 192.168.1.1 | 显示源或目标IP为指定地址的数据包 |
ip.src == 192.168.1.1 | 只显示源IP |
ip.dst == 192.168.1.1 | 只显示目标IP |
tcp.port == 80 | 显示TCP端口为80的数据包 |
tcp.flags.syn == 1 | 显示SYN包 |
http.request | 显示所有HTTP请求 |
http.response.code == 200 | 显示HTTP 200响应 |
dns | 显示所有DNS流量 |
ssl.handshake.type == 1 | 显示SSL握手 |
tcpdump 捕获过滤器
| 过滤器 | 说明 |
|---|---|
host 192.168.1.1 | 捕获与该主机相关的流量 |
net 192.168.1.0/24 | 捕获整个子网的流量 |
port 80 | 捕获端口80的流量 |
portrange 80-443 | 捕获端口范围的流量 |
tcp | 只捕获TCP流量 |
udp | 只捕获UDP流量 |
icmp | 只捕获ICMP流量 |
less 100 | 捕获长度小于100字节的包 |
greater 1000 | 捕获长度大于1000字节的包 |
八、注意事项
- 权限问题:抓包通常需要 sudo 或管理员权限
- 隐私和法律:仅抓取自己的流量,未经授权抓取他人流量可能违法
- 性能影响:长时间抓包会产生大量数据,注意磁盘空间
- HTTPS 解密:需要安装和信任 SSL 证书,注意安全风险
- 文件大小:使用
-s参数限制捕获的数据包大小 - VPN 影响:VPN 可能会影响抓包,需要在对应的虚拟接口上抓包
- 证书固定:某些应用使用证书固定(Certificate Pinning),即使安装了证书也无法解密
- 防火墙:macOS 防火墙可能会阻止某些抓包操作
九、故障排除
问题 1:看不到网络接口
# 检查权限
ls -la /dev/bpf*
# 如果没有权限,重新安装 ChmodBPF
sudo /Applications/Wireshark.app/Contents/Resources/Extras/ChmodBPF/ChmodBPF
# 重启 Mac 后再试问题 2:无法捕获 HTTPS 内容
- 确保已安装并信任 SSL 证书
- 检查应用是否使用了证书固定(Certificate Pinning)
- 在钥匙串中验证证书是否被标记为"始终信任"
问题 3:tcpdump 显示 "Permission denied"
# 使用 sudo
sudo tcpdump -i en0
# 检查当前用户是否在 admin 组
groups
# 如需要,添加当前用户到 admin 组
sudo dseditgroup -o edit -a $USER -t user admin问题 4:Wireshark 闪退或无法启动
# 重新安装 Wireshark
brew uninstall --cask wireshark
brew install --cask wireshark
# 或者下载最新版本从官网安装问题 5:抓包文件太大
# 限制单个文件大小(100MB)
sudo tcpdump -i en0 -w capture.pcap -C 100
# 限制捕获包的数量
sudo tcpdump -i en0 -w capture.pcap -c 10000
# 只捕获包头部分(96字节)
sudo tcpdump -i en0 -w capture.pcap -s 96十、进阶技巧
10.1 自动化抓包脚本
#!/bin/bash
# 保存为 capture.sh
INTERFACE="en0"
DURATION=60 # 抓包时长(秒)
OUTPUT_FILE="capture_$(date +%Y%m%d_%H%M%S).pcap"
echo "开始抓包,持续 $DURATION 秒..."
sudo timeout $DURATION tcpdump -i $INTERFACE -w $OUTPUT_FILE
echo "抓包完成,文件保存为: $OUTPUT_FILE"
echo "文件大小: $(ls -lh $OUTPUT_FILE | awk '{print $5}')"10.2 使用 tshark(Wireshark 命令行版)
# 安装(如果通过 Homebrew 安装了 Wireshark,tshark 已包含)
# 列出接口
tshark -D
# 基本捕获
sudo tshark -i en0
# 只显示特定字段
sudo tshark -i en0 -T fields -e ip.src -e ip.dst -e tcp.port
# 导出为 JSON
sudo tshark -i en0 -T json > capture.json10.3 远程抓包
# 在远程 Mac 上抓包并实时传输到本地 Wireshark
ssh user@remote-mac "sudo tcpdump -i en0 -U -w -" | wireshark -k -i -10.4 分析已有的 pcap 文件
# 统计协议分布
tshark -r capture.pcap -q -z io,phs
# 统计会话信息
tshark -r capture.pcap -q -z conv,tcp
# 提取 HTTP 对象
tshark -r capture.pcap --export-objects http,./exported_http/
# 查找特定内容
tshark -r capture.pcap -Y 'http contains "password"'十一、推荐学习资源
官方文档
- Wireshark 用户指南:https://www.wireshark.org/docs/wsug_html_chunked/
- tcpdump 手册:
man tcpdump
在线资源
- Wireshark 过滤器参考:https://wiki.wireshark.org/DisplayFilters
- tcpdump 教程:https://danielmiessler.com/study/tcpdump/
书籍推荐
- 《Wireshark网络分析就这么简单》
- 《Wireshark网络分析的艺术》
十二、总结
通过本教程,你应该已经掌握了在 macOS 系统上进行网络抓包的多种方法:
- Wireshark:适合需要图形化界面和深度分析的场景
- tcpdump:适合快速抓包和服务器环境
- Charles/mitmproxy:适合 HTTP/HTTPS 调试
- 其他工具:根据具体需求选择
建议初学者从 Wireshark 开始,熟悉网络协议和数据包结构后,再使用命令行工具以提高效率。
记住:
- 抓包需要管理员权限
- 注意隐私和法律问题
- 合理使用过滤器减少数据量
- 定期清理抓包文件释放空间
祝你抓包顺利!🎯