TCPDump 是网络工程师、安全研究员、运维人员的必备工具,结合 Wireshark 可以更直观地分析数据包。
TCPDump 是 Linux/Unix 系统下的一个强大的命令行网络抓包工具,它能够捕获流经网络接口的数据包,并以可读的形式显示出来。
它支持丰富的过滤规则,可以精确抓取特定协议、IP、端口的数据包,是网络故障排查、安全分析、协议学习的利器。

1. 安装 TCPDump
在部分 Linux 发行版中TCPDump 已经预装。如果没有,可以使用包管理器安装:
# Debian/Ubuntsudo apt install tcpdump# CentOS/RHELsudo yum install tcpdump# macOS (通过 Homebrew)brew install tcpdump
验证安装:
tcpdump --version
2. 基本用法
(1) 查看可用网络接口
tcpdump -D
输出示例:
1.eth02.wlan03.lo (Loopback)
(2) 捕获所有网络流量
sudo tcpdump -i eth0-i eth0:指定网卡(默认是第一个非 loopback 接口)按Ctrl+C停止抓包
(3) 保存抓包数据到文件
sudo tcpdump -i eth0 -w capture.pcap
-w capture.pcap:保存为.pcap文件(可用 Wireshark 分析)
(4) 读取抓包文件
tcpdump -r capture.pcap
3. 过滤数据包
TCPDump 支持BPF(Berkeley Packet Filter)语法,可以精确过滤数据包。
(1) 按 IP 过滤
# 抓取来自 192.168.1.100 的流量sudo tcpdump -i eth0 host 192.168.1.100# 抓取目标 IP 是 8.8.8.8 的流量sudo tcpdump -i eth0 dst 8.8.8.8# 抓取源 IP 是 192.168.1.1 的流量sudo tcpdump -i eth0 src 192.168.1.1
(2) 按端口过滤
# 抓取 80 端口的 HTTP 流量sudo tcpdump -i eth0 port 80# 抓取目标端口 443 (HTTPS)sudo tcpdump -i eth0 dst port 443# 抓取源端口 22 (SSH)sudo tcpdump -i eth0 src port 22
(3) 按协议过滤
# 抓取 ICMP (Ping) 流量sudo tcpdump -i eth0 icmp# 抓取 TCP 流量sudo tcpdump -i eth0 tcp# 抓取 UDP 流量sudo tcpdump -i eth0 udp
(4) 组合过滤
# 抓取来自 192.168.1.100 的 80 端口流量sudo tcpdump -i eth0 "host 192.168.1.100 and port 80"# 抓取非 HTTP/HTTPS 的流量sudo tcpdump -i eth0 "not (port 80 or port 443)"
4. 高级用法
(1) 限制抓包数量
# 只抓 10 个包后停止sudo tcpdump -i eth0 -c 10
(2) 显示数据包内容(十六进制 + ASCII)
sudo tcpdump -i eth0 -X
(3) 抓取 HTTP 请求(显示 URL)
sudo tcpdump -i eth0 -A "tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)"
(4) 抓取 DNS 查询
sudo tcpdump -i eth0 port 53
5. 结语
TCPDump 是网络工程师、安全研究员、运维人员的必备工具,结合 Wireshark 可以更直观地分析数据包。掌握它,你就能像黑客一般洞察网络流量!
