tcpdump

网络数据包截获分析工具。支持针对网络层、协议、主机、网络或端口的过滤。并提供and、or、not等逻辑语句帮助去除无用的信息。

格式

tcpdump [-aAbdDefhHIJKlLnNOpqStuUvxX#] [ -B size ] [ -c count ]
[ -C file_size ] [ -E algo:secret ] [ -F file ] [ -G seconds ]
[ -i interface ] [ -j tstamptype ] [ -M secret ] [ --number ]
[ -Q in|out|inout ]
[ -r file ] [ -s snaplen ] [ --time-stamp-precision precision ]
[ --immediate-mode ] [ -T type ] [ --version ] [ -V file ]
[ -w file ] [ -W filecount ] [ -y datalinktype ] [ -z postrotate-command
]
[ -Z user ] [ expression ]
#常用选项
-a #以主机名来显示
-c #达到数量后就不再抓包
-d #友好格式显示
-dd #友好格式显示
-ddd #十进制格式显示
-e #显示链路层信息
-f #以数字格式显示IP
-i #指定设备
-n #不转换主机名和IP地址
-N #不显示域名
-q #快速输出,只显示少量指标
-r #从指定的文件读取数据
-s #指定数据包大小
-S #用绝对数字显示TCP关联数
-t #不显示时间
-tt #显示时间戳
-T #指定输出的类型
-v #详细显示指令执行过程。
-vv #显示详细过程
-x #十六进制输出
-w #将输出内容写到指定文件

使用示例:

# 查看网卡
[root@ubuntu ~]# tcpdump -D
1.eth0 [Up, Running, Connected]
2.eth2 [Up, Running, Connected]
3.any (Pseudo-device that captures on all interfaces) [Up, Running]
4.lo [Up, Running, Loopback]
5.eth1 [Up, Disconnected]

#不指定任何参数,监听第一块网卡上经过的数据包。主机上可能有不止一块网卡,所以经常需要指定网卡。
[root@ubuntu ~]# tcpdump

#监听特定网卡
[root@ubuntu ~]# tcpdump -i eth0

#监听特定主机,监听主机10.0.0.100 的通信包,注意:出、入的包都会被监听。
[root@ubuntu ~]# tcpdump host 10.0.0.100

#特定来源、目标地址的通信
#特定来源
[root@ubuntu ~]# tcpdump src host hostname
#特定目标地址
[root@ubuntu ~]# tcpdump dst host hostname

#如果不指定src跟dst,那么来源或者目标是hostname的通信都会被监听
[root@ubuntu ~]# tcpdump host hostname

#面试题
[root@ubuntu ~]# tcpdump -i eth0 -nn icmp and src host 10.0.0.6 and dst host 10.0.0.7

#特定端口
tcpdump port 3000

#监听TCP/UDP,服务器上不同服务分别用了TCP、UDP作为传输层,假如只想监听TCP的数据包
tcpdump tcp

#来源主机+端口+TCP,监听来自主机10.0.0.100在端口22上的TCP数据包
tcpdump tcp port 22 and src host 10.0.0.100

#监听特定主机之间的通信
tcpdump ip host 10.0.0.101 and 10.0.0.102

#10.0.0.101和除了10.0.0.1之外的主机之间的通信
tcpdump ip host 10.0.0.101 and ! 10.0.0.1

#详细示例
tcpdump tcp -i eth1 -t -s 0 -c 100 and dst port ! 22 and src net 192.168.1.0/24 -w ./target.cap

(1)tcp: ip icmp arp rarp 和 tcp、udp、icmp这些选项等都要放到第一个参数的位置,用来过滤数据报的类型
(2)-i eth1 : 只抓经过接口eth1的包
(3)-t : 不显示时间戳
(4)-s 0 :设置为0表示使用默认值262144字节抓取每个包,以便与tcpdump的旧版本兼容
(5)-c 100 : 只抓取100个数据包
(6)dst port ! 22 : 不抓取目标端口是22的数据包
(7)src net 192.168.1.0/24 : 数据包的源网络地址为192.168.1.0/24
(8)-w ./target.cap : 保存成cap文件,方便用wireshark分析

#限制抓包的数量,如下,抓到1000个包后,自动退出
tcpdump -c 1000

#保存到本地,tcpdump默认会将输出写到缓冲区,只有缓冲区内容达到一定的大小,或者tcpdump退出时,
才会将输出写到本地磁盘,可以加上-U强制立即写到本地磁盘(一般不建议,性能相对较差)
tcpdump -n -vvv -c 1000 -w /tmp/tcpdump_save.cap
作者:于浩  创建时间:2025-05-20 14:25
最后编辑:于浩  更新时间:2025-06-17 17:31