Tcpdump使用
一 介绍
tcpdump,是 Linux/Unix 系统下强大的网络抓包工具,能够捕获和分析网络流量。用简单的语言概括就是dump the traffic on a network,是一个运行在linux平台可以根据使用者需求对网络上传输的数据包进行捕获的抓包工具,windows平台有sniffer等工具,tcpdump可以将网络中传输的数据包的“包头”全部捕获过来进程分析,其支持网络层、特定的传输协议、数据发送和接收的主机、网卡和端口的过滤,并提供and、or、not等语句进行逻辑组合捕获数据包或过滤掉不用的信息。
二 语法及选项(按功能划分)
1. 基本语法
tcpdump [选项] [过滤表达式]
- 关于 proto:可选有 ip, arp, rarp, tcp, udp, icmp, ether 等,默认是所有协议的包
- 关于 dir:可选有 src, dst, src or dst, src and dst,默认为 src or dst
- 关于 type:可选有 host, net, port, portrange(端口范围,比如 21-42),默认为 host
2.命令选项
参数
2.1. 地址与名称解析选项
-a
192.168.1.1
→ router.local
)。tcpdump -a
(显示主机名而非 IP)-n
tcpdump -n
(不解析任何名称)-nn
80
不显示为 http
)。tcpdump -nn
(强制显示数字端口)-N
www.baidu.com
→ www
)。tcpdump -N
(简化主机名输出)-f
tcpdump -f
(避免 DNS 查询延迟)2.2. 数据链路层与协议选项
-e
tcpdump -e
(查看源/目标 MAC)-b
ip
/arp
/rarp
/ipx
)。tcpdump -b arp
(仅抓 ARP 包)-L
ETHERNET
/Wi-Fi
)。tcpdump -L -i eth0
2.3. 输出格式控制
-A
tcpdump -A port 80
(查看网页内容)-X
tcpdump -X port 443
(分析 HTTPS)-q
tcpdump -q
(简洁流量摘要)-v
-vv
/-vvv
更详细)。tcpdump -vv
(显示 TTL、服务类型等)-S
tcpdump -S
(分析序列号跳跃)2.4. 时间戳选项
-t
tcpdump -t
(仅输出协议数据)-tt
tcpdump -tt
(用于时间对齐分析)-ttt
tcpdump -ttt
(分析网络延迟)-tttt
tcpdump -tttt
(记录完整时间日志)2.5. 文件与输入输出控制
-w
.pcap
格式)。tcpdump -w traffic.pcap
-r
tcpdump -r traffic.pcap
-F
tcpdump -F filter.txt
-l
2.6. 包捕获控制
-c
tcpdump -c 10
(抓 10 个包)-s
tcpdump -s 100
(只抓前 100 字节)-P
tcpdump -P
(避免抓取无关流量)2.7. 高级解析与调试
-d
tcpdump -d \'port 80\'
-dd
tcpdump -dd \'icmp\'
-ddd
tcpdump -ddd \'host 1.1.1.1\'
-T
rpc
/snmp
)。tcpdump -T snmp
-u
tcpdump -u port 2049
2.8. 特殊场景选项
-D
tcpdump -D
(选择监控接口)-K
tcpdump -K
(抓取损坏的包)-U
tcpdump -w file.pcap -U
三 关键字及协议类型
1. 常见协议关键字
tcp
tcpdump tcp
udp
tcpdump udp
icmp
tcpdump icmp
ping
)arp
tcpdump arp
ip
tcpdump ip
ip6
tcpdump ip6
http
tcpdump port 80
https
tcpdump port 443
dns
tcpdump port 53
ssh
tcpdump port 22
ftp
tcpdump port 21
smtp
tcpdump port 25
dhcp
tcpdump port 67 or port 68
vrrp
tcpdump vrrp
stp
tcpdump stp
2.数据类型关键字
host
host 192.168.1.1
net
net 192.168.0.0/24
port
port 22
portrange
portrange 8000-9000
or
条件3.方向关键字
src
src 192.168.1.1
ether src 00:11:22:33:44:55
dst
dst port 53
ether dst 00:11:22:33:44:55
src or dst
host 192.168.1.1
src and dst
src 192.168.1.1 and dst 80
4.逻辑运算符
and
/&&
tcp && port 80
or
/`not
/!
!udp
()
(port 80 or 443) and host 1.1.1.1
\\( \\)
四 常用案例
抓取指定网卡上的所有数据包 tcpdump -i eth0不加任何参数的情况下,默认抓取第一块网卡的数据 tcpdump指定网卡上抓取关于指定IP的所有数据 tcpdump -i eth0 host 10.0.0.3在网卡(eth0)上抓取关于指定IP的所有数据,将主机名显示为IP地址不进行DNS解析 tcpdump -i eth0 host 10.0.0.3 -n抓取网卡(eth0)上的源地址是(10.0.0.3)的数据 tcpdump -i eth0 src 10.0.0.3抓取网卡(eth0)上的目的IP是(10.0.0.3)的数据 tcpdump -i eth0 dst 10.0.0.3抓取网卡(eth0)上的关于网段(10.0.0.0/24)的数据 tcpdump -i eth0 net 10.0.0.3抓取网卡(eth0)上的所有关于443端口的数据 tcpdump -i eth0 port 443抓取网卡(eth0)上关于icmp协议的数据 tcpdump -i eth0 icmp抓取网卡(eth0)上的icmp报文或者tcp报文 tcpdump -i eth0 icmp or tcp抓取指定数目的包 tcpdump -c 2 -i eth0将抓到包写入文件中 tcpdump -w 20250606.pcap -i eth0读取tcpdump保存文件 tcpdump -r 20250606.pcap从文件读取并过滤 tcpdump -r 20250606.pcap \'port 80\'增加抓包时间戳(-tttt选项) tcpdump -n -tttt -i eth0指定抓包的协议类型 tcpdump -i eth0 arp抓取特定目标ip和端口的包 tcpdump -i eth0 dst 10.0.0.3 and port 22tcpdump -i eth0 -nn -s0 -v port 80-i : 选择要捕获的接口,通常是以太网卡或无线网卡,也可以是 vlan 或其他特殊接口。如果该系统上只有一个网络接口,则无需指定。-nn : 单个 n 表示不解析域名,直接显示 IP;两个 n 表示不解析域名和端口。这样不仅方便查看 IP 和端口号,而且在抓取大量数据时非常高效,因为域名解析会降低抓取速度。-s0 : tcpdump 默认只会截取前 96 字节的内容,要想截取所有的报文内容,可以使用 -s number, number 就是你要截取的报文字节数,如果是 0 的话,表示截取报文全部内容。-v : 使用 -v,-vv 和 -vvv 来显示更多的详细信息,通常会显示更多与特定协议相关的信息。port 80 : 这是一个常见的端口过滤器,表示仅抓取 80 端口上的流量,通常是 HTTP。额外再介绍几个常用参数: -p : 不让网络接口进入混杂模式。默认情况下使用 tcpdump 抓包时,会让网络接口进入混杂模式。一般计算机网卡都工作在非混杂模式下,此时网卡只接受来自网络端口的目的地址指向自己的数据。当网卡工作在混杂模式下时,网卡将来自接口的所有数据都捕获并交给相应的驱动程序。如果设备接入的交换机开启了混杂模式,使用 -p 选项可以有效地过滤噪声。 -e : 显示数据链路层信息。默认情况下 tcpdump 不会显示数据链路层信息,使用 -e 选项可以显示源和目的 MAC 地址,以及 VLAN tag 信息。