tcpdump 是 Linux/Unix 系统下的网络抓包工具,可以捕获和分析网络数据包,用于网络调试、安全分析、流量监控等场景。它支持过滤特定协议、端口、IP 地址等,是网络工程师和安全分析师的必备工具。
1. tcpdump 基本语法
tcpdump [选项] [过滤表达式]
| 选项 | 说明 |
|---|---|
-i eth0 | 指定监听的网卡(默认 any) |
-n | 不解析主机名(显示 IP 而非域名) |
-nn | 不解析主机名和端口(显示数字) |
-c 10 | 只捕获 10 个包后退出 |
-w file.pcap | 保存抓包数据到文件(.pcap 格式) |
-r file.pcap | 读取 .pcap 文件并分析 |
-v | 显示详细信息 |
-vv | 显示更详细信息 |
-X | 以十六进制和 ASCII 显示数据 |
-A | 以 ASCII 显示数据(适合 HTTP 分析) |
-s 0 | 捕获完整数据包(默认只抓前 96 字节) |
-q | 安静模式(减少输出) |
2. 常用过滤表达式
| 表达式 | 说明 |
|---|---|
host 192.168.1.1 | 抓取与 192.168.1.1 相关的包 |
src 192.168.1.1 | 抓取源 IP 是 192.168.1.1 的包 |
dst 192.168.1.1 | 抓取目标 IP 是 192.168.1.1 的包 |
port 80 | 抓取 80 端口的包 |
src port 22 | 抓取源端口是 22(SSH)的包 |
dst port 443 | 抓取目标端口是 443(HTTPS)的包 |
tcp | 只抓取 TCP 包 |
udp | 只抓取 UDP 包 |
icmp | 只抓取 ICMP(ping)包 |
net 192.168.1.0/24 | 抓取整个子网的包 |
not port 22 | 排除 SSH 流量 |
and / or | 组合条件(如 port 80 or port 443) |
3. tcpdump 使用示例
(1)基本抓包
tcpdump -i eth0 # 监听 eth0 网卡的所有流量
tcpdump -n # 不解析主机名(显示 IP)
tcpdump -nn # 不解析主机名和端口(显示数字)
(2)抓取特定 IP 的流量
tcpdump host 192.168.1.100 # 抓取与 192.168.1.100 相关的包
tcpdump src 192.168.1.100 # 抓取来自 192.168.1.100 的包
tcpdump dst 192.168.1.100 # 抓取目标为 192.168.1.100 的包
(3)抓取特定端口的流量
tcpdump port 80 # 抓取 HTTP 流量
tcpdump port 22 # 抓取 SSH 流量
tcpdump port 443 # 抓取 HTTPS 流量
tcpdump src port 53 # 抓取 DNS 查询(UDP 53)
(4)抓取 TCP/UDP/ICMP 流量
tcpdump tcp # 只抓取 TCP 包
tcpdump udp # 只抓取 UDP 包
tcpdump icmp # 只抓取 ICMP(ping)包
(5)组合过滤条件
tcpdump "port 80 or port 443" # 抓取 HTTP 和 HTTPS 流量
tcpdump "src 192.168.1.100 and dst port 22" # 抓取来自 192.168.1.100 的 SSH 流量
tcpdump "not port 22" # 排除 SSH 流量
(6)抓取 HTTP 请求(ASCII 显示)
tcpdump -A -s 0 port 80 # 显示 HTTP 请求内容
(7)保存抓包数据
tcpdump -w capture.pcap # 保存到文件
tcpdump -r capture.pcap # 读取并分析文件
(8)抓取特定长度的包
tcpdump greater 1000 # 抓取长度 > 1000 字节的包
tcpdump less 100 # 抓取长度 < 100 字节的包
(9)抓取广播/多播流量
tcpdump ether broadcast # 抓取广播包
tcpdump ether multicast # 抓取多播包
4. 高级用法
(1)抓取 VLAN 流量
tcpdump -i eth0 vlan # 抓取 VLAN 流量
(2)抓取 ARP 包
tcpdump arp # 抓取 ARP 请求/响应
(3)抓取 DNS 查询
tcpdump -n -i eth0 port 53 # 抓取 DNS 查询(UDP 53)
(4)抓取 MySQL 查询
tcpdump -i eth0 -s 0 -A port 3306 # 抓取 MySQL 流量
(5)抓取 VoIP(SIP/RTP)流量
tcpdump -n udp port 5060 # SIP 流量
tcpdump -n udp portrange 10000-20000 # RTP 流量
5. 常见问题
(1)权限问题
tcpdump 需要 root 权限:
sudo tcpdump -i eth0
(2)如何停止抓包?
按 Ctrl + C 停止。
(3)如何分析 .pcap 文件?
- 使用
tcpdump -r file.pcap查看 - 使用 Wireshark 进行图形化分析
6. 总结
tcpdump是 Linux 下的网络抓包工具,适用于调试、安全分析。- 常用选项:
-i(指定网卡)-n(不解析主机名)-w(保存抓包数据)-A(显示 ASCII 内容)
- 常用过滤:
host、port、tcp、udp、icmpand/or组合条件
- 高级用法:
- 抓取 HTTP、DNS、MySQL、VoIP 等特定流量
- 保存
.pcap文件并用 Wireshark 分析
掌握 tcpdump 可以快速定位网络问题!🚀