
tcmdump 命令
tcpdump 是一款强大的 命令行网络抓包工具,用于捕获和分析网络接口上的数据包,支持多种协议(TCP/UDP/ICMP 等)和过滤规则,广泛应用于网络调试、安全分析和流量监控。
核心特点:
-
支持复杂过滤表达式(BPF 语法)。
-
可保存抓包数据(
.pcap文件)供后续分析(如 Wireshark)。 -
跨平台(Linux/macOS/Windows 通过 WinDump)。
1、基础语法
tcpdump [选项] [过滤表达式]
2、常用选项详解
| 选项 | 作用 | 示例 |
|---|---|---|
-i <接口> |
指定监听的网络接口(如 | tcpdump -i eth0 |
-n |
禁用域名解析(直接显示 IP) | tcpdump -n |
-v |
增加输出详细程度( | tcpdump -v |
-c <数量> |
捕获指定数量的包后退出 | tcpdump -c 10 |
-w <文件> |
将抓包数据写入文件( | tcpdump -w capture.pcap |
-r <文件> |
读取抓包文件进行分析 | tcpdump -r capture.pcap |
-s <长度> |
设置抓包长度(默认 262144 字节) | tcpdump -s 0
(抓取完整包) |
-A |
以 ASCII 格式显示数据包内容(如 HTTP 文本) | tcpdump -A port 80 |
-X |
同时以 HEX 和 ASCII 显示数据包内容 | tcpdump -X |
-q |
简洁输出(减少协议层级信息) | tcpdump -q |
2、过滤表达式
1. 基础过滤规则
| 表达式 | 作用 | 示例 |
|---|---|---|
host <IP> |
过滤指定主机的流量(IP 或域名) | tcpdump host 192.168.1.100 |
port <端口> |
过滤指定端口的流量 | tcpdump port 80 |
src <IP> |
过滤源地址为指定 IP 的流量 | tcpdump src 192.168.1.1 |
dst <IP> |
过滤目标地址为指定 IP 的流量 | tcpdump dst 8.8.8.8 |
net <网段> |
过滤指定网段的流量(CIDR 格式) | tcpdump net 192.168.1.0/24 |
2. 协议过滤
| 表达式 | 作用 | 示例 |
|---|---|---|
tcp |
仅捕获 TCP 协议流量 | tcpdump tcp |
udp |
仅捕获 UDP 协议流量 | tcpdump udp |
icmp |
仅捕获 ICMP 协议流量(如 ping) | tcpdump icmp |
3. 逻辑运算符
| 运算符 | 作用 | 示例 | ||
|---|---|---|---|---|
and
(或 |
逻辑与 | tcpdump src 192.168.1.1 and port 80 | ||
or
(或 ` |
`) |
逻辑或 | tcpdump port 80 or port 443 | |
not
(或 |
逻辑非 | tcpdump not icmp |
4、实用场景与示例
1. 基础抓包
# 捕获所有经过 eth0 的流量(Ctrl+C 停止)
tcpdump -i eth0
# 捕获所有 TCP 流量并显示 IP(不解析域名)
tcpdump -n tcp
2. 过滤指定主机和端口
# 捕获与 192.168.1.100 的 22 端口(SSH)通信
tcpdump -n host 192.168.1.100 and port 22
# 捕获源 IP 为 10.0.0.1 的 HTTP 流量
tcpdump -n src 10.0.0.1 and port 80
3. 捕获 HTTP 请求内容
# 显示 HTTP GET/POST 请求的 URL 和头部(ASCII 格式)
tcpdump -A -s0 port 80 | grep -E 'GET|POST'
4. 抓包保存与读取
# 保存抓包数据到文件(适合长时间捕获)
tcpdump -i eth0 -w traffic.pcap
# 读取抓包文件并过滤分析
tcpdump -r traffic.pcap 'tcp port 443'
5. 高级过滤
# 捕获 ICMP 不可达错误(如防火墙拦截)
tcpdump 'icmp[0] == 3'
# 捕获 TCP SYN 包(检测端口扫描)
tcpdump 'tcp[tcpflags] & tcp-syn != 0'
5、输出解析
示例输出:
14:25:30.123456 IP 192.168.1.100.54321 > 8.8.8.8.53: 12345+ A? example.com. (32)
-
时间戳:
14:25:30.123456 -
协议:
IP(IPv4) -
源地址:
192.168.1.100.54321(IP + 源端口) -
目标地址:
8.8.8.8.53(IP + 目标端口,DNS 服务) -
包内容:DNS 查询(
A? example.com)
6、常见问题解决
1. 权限不足
-
错误:
tcpdump: eth0: You don't have permission to capture on that device -
解决:使用
sudo或以 root 用户运行:
sudo tcpdump -i eth0
2. 接口列表查询
tcpdump -D # 列出所有可用网络接口
3. 过滤 MAC 地址
tcpdump ether host 00:11:22:33:44:55 # 捕获指定 MAC 的流量
7、与 Wireshark 结合使用
-
保存抓包数据:
tcpdump -i eth0 -w traffic.pcap
-
使用 Wireshark 分析:
wireshark traffic.pcap
8、总结
-
核心命令:
tcpdump -i eth0 -n 'tcp port 80' # 监控 HTTP 流量
tcpdump -w traffic.pcap # 保存抓包数据
-
适用场景:
-
-
网络故障排查(如连接超时、丢包)。
-
安全分析(检测异常流量、端口扫描)。
-
协议学习(观察 TCP 握手、DNS 查询)。
-
掌握 tcpdump 可快速定位网络层问题,结合过滤表达式和 .pcap 文件分析,是运维和开发人员的必备技能。

2136

被折叠的 条评论
为什么被折叠?



