本文最后更新于23 天前,其中的信息可能已经过时,如有错误请发送邮件到big_fw@foxmail.com
Linux/UNIX 下命令行抓包分析工具,libpcap(抓包库)+ BPF(Berkeley Packet Filter) 内核过滤
一、tcpdump安装
# Ubuntu / Debian
sudo apt update
sudo apt install -y tcpdump
# CentOS / RHEL / Rocky
sudo yum install -y tcpdump
# macOS(Homebrew)
brew install tcpdump
# 检查是否安装成功
tcpdump --version
格式:
tcpdump [options] [filter expression]
2.1 常用选项
| 参数 | 作用 | 示例 |
|---|---|---|
-i any | 监听所有网卡(最常用) | tcpdump -i any |
-i eth0 | 指定网卡(eth0/ens33/lo) | tcpdump -i eth0 |
-n | 不解析主机名 / 端口号(IP / 数字显示,更快) | -n |
-nn | 不解析主机名 and 不解析端口名(最干净) | -nn |
-c N | 抓 N 个包后自动停止 | -c 100 |
-w file.pcap | 保存到 pcap 文件(给 Wireshark 分析) | -w test.pcap |
-r file.pcap | 读取 pcap 文件(离线分析) | -r test.pcap |
-e | 显示二层头(MAC地址) | -e |
-X | 显示十六进制 + ASCII内容(看 payload) | -X |
-A | 只显示 ASCII(文本协议如 HTTP) | -A |
-v/-vv/-vvv | 详细级别(越 v 越详细) | -vv |
-s 0 | 抓完整包(默认只抓前 96 字节) | -s 0 |
三.输出格式解读

四、过滤表达式
4.1按照ip过滤
tcpdump host 192.168.1.100 # 源或目的是这个IP
tcpdump src host 192.168.1.100 # 源IP
tcpdump dst host 192.168.1.100 # 目的IP
tcpdump net 192.168.1.0/24 # 整个网段
tcpdump src net 10.0.0.0/8
4.2按照端口过滤
tcpdump port 80 # 80端口(源或目的)
tcpdump src port 1234 #源端口是1234
tcpdump dst port 443
tcpdump port 80 or port 443 #80和443端口
tcpdump portrange 8000-8080 # 端口范围
tcpdump not port 22 # 排除 SSH
4.3按照协议过滤
tcpdump tcp # 只抓 TCP
tcpdump udp # 只抓 UDP
tcpdump icmp # 只抓 ICMP(ping)
tcpdump arp # 只抓 ARP
tcpdump ip6 # 只抓 IPv6
tcpdump not tcp # 排除 TCP
http,dns,https,ssh,等应用层协议不能直接过滤
需要写成 tcpdump port http
4.4组合过滤
# 源IP 192.168.1.10 且 目的端口 80 的 TCP
tcpdump tcp and src host 192.168.1.10 and dst port 80
# 抓取 192.168.1.0/24 访问 8.8.8.8 的流量
tcpdump net 192.168.1.0/24 and host 8.8.8.8
# 抓取非22端口的TCP流量
tcpdump tcp and not port 22
# 抓取 ICMP 或 ARP
tcpdump icmp or arp
and所有条件都需满足
or 只要有一个满足就行
not 取反
五、常用命令
5.1基础抓包
# 监听所有网卡,简洁输出
sudo tcpdump -i any -nn
# 抓100个包就停
sudo tcpdump -i any -nn -c 100
# 抓完整包并显示十六进制
sudo tcpdump -i any -nn -s 0 -X
# 抓包保存到文件(Wireshark可直接打开)
sudo tcpdump -i any -nn -s 0 -w mytrace.pcap
# 后台抓包(nohup + &)
sudo nohup tcpdump -i any -nn -s 0 -w /tmp/trace.pcap &
# 读取分析
tcpdump -r mytrace.pcap -nn -X


