tcpdump 是一款强大的网络抓包工具,常用于 Linux 系统中网络故障排查和网络数据包分析。它可以捕获网络接口上的数据包,并以多种方式进行输出显示,帮助网络管理员和开发人员深入了解网络通信情况。
目录
📦 第一部分:安装与基础
1. 安装 tcpdump
- Debian/Ubuntu:
sudo apt install tcpdump
- RHEL/CentOS:
sudo yum install tcpdump
- macOS:
自带,或通过brew install tcpdump
更新版本。
2. 基础命令
- 抓取所有流量(默认首个网卡):
sudo tcpdump
- 指定网卡(如 eth0、en0):
sudo tcpdump -i eth0
- 限制抓包数量:
sudo tcpdump -c 10
(抓10个包后停止)- 显示IP而非主机名:
sudo tcpdump -n
🎯 第二部分:关键过滤技巧
1. 按主机过滤
- 抓取特定源/目的IP:
tcpdump host 192.168.1.100
tcpdump src 192.168.1.1 && dst 10.0.0.5
2. 按端口过滤
- 抓取特定端口流量:
tcpdump port 80
tcpdump portrange 8000-8080
3. 协议过滤
- 过滤特定协议(TCP/UDP/ICMP):
tcpdump tcp
tcpdump icmp
4. 高级逻辑
- 组合条件(
and
/or
/not
):
tcpdump "src 192.168.1.1 and (port 80 or port 443)"
🔍 第三部分:深度解析与输出控制
1. 详细输出模式
- 显示数据包详情:
tcpdump -vv
(更详细的信息)
tcpdump -X
(十六进制 + ASCII 输出)
2. 保存与读取抓包文件
- 保存到文件:
tcpdump -w capture.pcap
- 读取文件分析:
tcpdump -r capture.pcap
3. 时间戳控制
- 格式化时间戳:
tcpdump -tttt
(年-月-日 时:分:秒)
🛠 第四部分:高级使用技巧
1. 抓取特定流量特征
- HTTP GET/POST 请求:
tcpdump -s 0 -A 'tcp port 80 and tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420'
- 抓取 DNS 查询:
tcpdump -i any port 53
2. 性能优化
- 快速模式(避免域名解析):
tcpdump -n -l
- 限制抓包大小:
tcpdump -s 100
(每个包截断至前100字节)
3. 分析TCP连接状态
- 三次握手(SYN/SYN-ACK/ACK):
tcpdump 'tcp[tcpflags] & (tcp-syn|tcp-ack) != 0'
📊 第五部分:输出分析与示例
示例1:TCP包分析
15:30:45.123456 IP 192.168.1.10.54321 > 93.184.216.34.80: Flags [S], seq 123456789, win 65535, options [mss 1460], length 0
[S]
: SYN 标志(连接建立)- seq: 初始序列号
- win: 接收窗口大小
- mss: 最大分段大小
示例2:HTTP请求解析
GET /index.html HTTP/1.1
Host: example.com
User-Agent: curl/7.68.0
- 可直接看到HTTP头部信息(需结合
-A
或-X
选项)。
⚠️ 注意事项
- 权限问题: 抓包需要 root 或
sudo
权限。- 数据安全: 敏感信息(密码、Cookie)可能被捕获,慎用并遵守法律法规。
- 资源占用: 高速网络下抓包可能导致高负载,使用
-c
/-s
限制。
🧰 辅助工具推荐
- Wireshark: 图形化分析
.pcap
文件。- tshark: Wireshark 的命令行版本。
- ngrep: 基于正则表达式的网络包过滤。
💡 总结
掌握 tcpdump 的关键点:
- 过滤语法精准定位目标流量。
- 输出解析理解协议细节。
- 文件操作结合工具深入分析。
通过实践场景(如调试 API 调用、分析网络延迟),逐步提升网络排查能力!