一、核心功能
tcpdump 是 Linux/Unix 下基于 libpcap 的网络抓包与分析工具,支持以下核心功能 :
- 实时抓取网络流量:捕获 TCP/UDP/ICMP 等协议数据包。
- 精准过滤:按 IP、端口、协议、报文内容等条件筛选数据包。
- 数据保存与解析:生成 .pcap 文件供 Wireshark 等工具分析。
- 网络诊断:检测丢包、延迟、路由异常等网络问题。
二、参数解析与常用命令
基础参数
参数 | 说明 | 示例 |
---|---|---|
-i <接口> | 指定抓包网卡(any 表示所有接口) | tcpdump -i eth0 |
-n | 禁用域名解析(显示 IP 地址) | tcpdump -n |
-nn | 禁用域名和端口解析(提升速度) | tcpdump -nn |
-s <字节> | 设置抓包长度(-s0 抓取完整报文) | tcpdump -s0 |
-w <文件> | 保存为 .pcap 文件 | tcpdump -w traffic.pcap |
-c <数量> | 抓取指定数量包后自动退出 | tcpdump -c 10 |
-v /-vv /-vvv | 显示详细输出(协议细节逐级增加) | tcpdump -vv |
-A | 以 ASCII 格式显示报文内容(便于阅读) | tcpdump -A |
高级参数
参数 | 说明 | 示例 |
---|---|---|
-e | 显示数据链路层信息(MAC 地址、VLAN Tag) | tcpdump -e |
-p | 关闭混杂模式(仅抓目标为本机的包) | tcpdump -p |
-X | 同时显示十六进制和 ASCII 内容 | tcpdump -X |
-l | 行缓冲模式(适合管道输出) | `tcpdump -l |
三、过滤器语法
1. 基础过滤
-
按 IP/端口过滤:
tcpdump host 192.168.1.100 # 抓取与指定 IP 相关的流量 tcpdump port 80 # 抓取 80 端口流量 tcpdump src 10.0.0.1 and dst port 443 # 源 IP + 目标端口组合过滤
-
按协议过滤:
tcpdump icmp # 仅抓 ICMP 包 tcpdump tcp # 仅抓 TCP 包
2. 逻辑运算符
支持 and
(与)、or
(或)、not
(非)组合条件:
tcpdump 'src 192.168.1.100 and (port 80 or port 443)' # 复合条件
tcpdump 'icmp and not src 10.0.0.1' # 排除特定源 IP
3. 高级内容过滤
- 按报文内容匹配(十六进制或字符串):
tcpdump 'tcp[20:4] = 0x47455420' # 匹配 TCP 载荷中的 "GET "(HTTP 请求) tcpdump -A 'udp and udp[8:2] = 0x1337' # 匹配 UDP 特定字段
四、实用场景案例
1. 基础抓包与保存
# 抓取 eth0 网卡的前 100 个完整包,保存为文件
tcpdump -i eth0 -s0 -c 100 -w traffic.pcap
2. 诊断 HTTP 请求
# 抓取 80 端口的 HTTP GET 请求
tcpdump -A -s0 'tcp port 80 and (tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420)'
3. 分析 TCP 握手过程
# 抓取 SYN 或 ACK 包,观察三次握手
tcpdump -nn 'tcp[tcpflags] & (tcp-syn|tcp-ack) != 0'
输出示例:
21:26:49.013621 IP 172.20.20.1.15605 > 172.20.20.2.5920: Flags [S], seq 992042666 # SYN 包 21:27:07.030487 IP 124.192.132.54.80 > 172.20.20.1.15605: Flags [S.], seq 2147006684, ack 992042667 # SYN-ACK 包
4. 检测 TLS 握手(HTTPS)
# 抓取 Client Hello 报文(TLS 握手起始包)
tcpdump -nnX 'tcp[20]==22 && tcp[25]==1'
5. 排查网络延迟
# 抓取 ICMP 包分析丢包与延迟
tcpdump -i eth0 icmp -vv
五、输出解析与技巧
- 时间戳:
21:26:49.013621
表示时分秒.微秒。 - SEQ/ACK 号:数据包序列号和确认号。
- Win 窗口:接收窗口大小,反映网络拥塞情况。
六、注意事项
- 权限要求:需 root 权限或
sudo
执行。 - 性能影响:高频抓包可能占用 CPU/内存,建议限制抓包数量(
-c
)或长度(-s
)。 - 安全风险:避免在公网暴露敏感数据,推荐使用
-w
保存后离线分析。
通过灵活组合参数与过滤器,tcpdump 可高效完成网络监控、协议调试及安全审计。