TCPdump 使用详解
一、基本语法
tcpdump [选项] [过滤表达式]
二、常用选项(Options)
| 选项 |
说明 |
示例 |
-i |
指定监听的网络接口 |
-i eth0, -i wlan0, -i any |
-n |
不解析主机名 |
显示 IP 而非域名 |
-nn |
不解析主机名和端口名 |
显示数字端口(如 80 而非 http) |
-v |
显示详细信息(叠加 -vv, -vvv) |
|
-q |
快速模式(减少输出) |
|
-c num |
只捕获前 num 个包后停止 |
-c 10 |
-s num |
设置捕获包长度(字节),-s 0 表示完整包 |
-s 0 |
-w file |
将捕获包写入文件 |
-w capture.pcap |
-r file |
从文件读取包 |
-r capture.pcap |
-X |
十六进制+ASCII 显示包内容 |
|
-XX |
包含以太网头部 |
|
-e |
显示数据链路层(MAC)头部 |
|
三、常见用法示例
1. 抓取指定接口流量
tcpdump -i eth0
2. 高效输出(推荐)
tcpdump -i any -nn
3. 限量抓包
tcpdump -i wlan0 -c 10 -nn
4. 保存原始包
tcpdump -i any -nn -s 0 -w capture.pcap
5. 分析已保存包
tcpdump -r capture.pcap -nn
6. 按协议过滤
tcpdump -i any 'tcp' # TCP 流量
tcpdump -i any 'udp' # UDP 流量
tcpdump -i any 'icmp' # ICMP(ping)
7. 按主机过滤
tcpdump -i any 'host 192.168.1.100'
8. 按端口过滤
tcpdump -i any 'port 80' # HTTP
tcpdump -i any 'port 22' # SSH
9. 组合过滤
tcpdump -i any 'host 192.168.1.100 and port 443'
tcpdump -i any 'not port 22 and not port 53'
10. HTTP 请求分析
tcpdump -i any -A 'tcp port 80 and (tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420 or tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x504f5354)'
11. ICMP 抓包
tcpdump -i any 'icmp'
四、过滤表达式语法(BPF)
基础语法
[原语] [逻辑操作符] [原语]...
常用原语类型
1. 协议类型
| 表达式 |
说明 |
tcp |
仅 TCP |
udp |
仅 UDP |
icmp |
ICMP(ping) |
ip |
IPv4 |
ether |
以太网帧 |
2. 主机过滤
| 表达式 |
说明 |
host 192.168.1.1 |
双向通信 |
src host 1.1.1.1 |
源 IP 过滤 |
dst host 8.8.8.8 |
目标 IP 过滤 |
3. 网络过滤
| 表达式 |
说明 |
net 192.168.1.0/24 |
子网过滤 |
src net 10.0.0.0/8 |
源网络过滤 |
4. 端口过滤
| 表达式 |
说明 |
port 80 |
TCP/UDP 80 端口 |
src port 53 |
DNS 源端口 |
portrange 80-8080 |
端口范围 |
5. 方向标识
| 表达式 |
说明 |
src |
源方向 |
dst |
目标方向 |
src or dst |
双向 |
6. 数据内容匹配
| 表达式 |
说明 |
tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420 |
HTTP GET 首部 |
tcp[tcpflags] & tcp-syn != 0 |
SYN 包 |
7. 广播/多播
| 表达式 |
说明 |
broadcast |
ARP 请求 |
multicast |
多播流量 |
8. 包长度过滤
| 表达式 |
说明 |
greater 100 |
包长 >100 |
less 500 |
包长 <500 |
逻辑运算符
组合示例
# 源 IP 192.168.1.100 且目标端口 443
tcpdump 'src host 192.168.1.100 and dst port 443'
# 抓 HTTP/HTTPS 流量
tcpdump 'port 80 or port 443'
# 抓 DNS 查询
tcpdump 'udp port 53 and dst port 53'
五、实际应用场景
场景 | 命令示例
| 场景 |
命令 |
| 网页打不开 |
tcpdump -i any -nn 'host example.com' |
| 检查防火墙 drop |
查找请求无响应 |
| 分析 DNS 查询 |
tcpdump -i any -nn 'port 53' |
| 查看广播流量 |
tcpdump -i any 'broadcast' |
| 抓手机 App 流量 |
tcpdump -i wlan0 -w app.pcap |
六、保存与分析
抓包保存
tcpdump -i any -s 0 -w debug.pcap -c 100
分析工具
| 工具 |
描述 |
| Wireshark |
图形化分析 |
| tshark |
命令行分析 |
| CloudShark |
在线分析 |
七、注意事项
权限要求
sudo tcpdump -i any -nn
性能影响
- 长时间抓包可能导致系统性能下降
- 生产环境需谨慎使用
其他注意事项
- 使用单引号包裹过滤表达式
- 复杂逻辑需用括号明确优先级
-s 0 可捕获完整包(避免数据截断)
- 敏感数据抓包后及时清理
- BPF 表达式学习建议参考[官方文档]
(注:此版本通过以下优化提升阅读体验)
- 采用表格化展示核心参数
- 增加代码块高亮和注释说明
- 使用场景化表格快速查找
- 补充官方文档链接等实用信息
- 优化标题层级(# > ## > ###)
- 增加数据内容匹配的详细示例
- 完善逻辑运算符优先级说明
- 补充保存分析的完整工具链说明
评论框