tcpdump - 命令使用
参考地址:
https://www.tcpdump.org/manpages/tcpdump.1.html
https://danielmiessler.com/study/tcpdump/
https://www.tcpdump.org/manpages/pcap-filter.7.html
命令格式:
tcpdump 参数 过滤器表达式
描述:
tcpdump 可以捕获系统中的网络数据包。
当 tcpdump 完成捕获数据包时,会有一个统计返回 (结果类似如下,最后三行):

captured
: 这是 tcpdump 已接收和处理的数据包数
received by filter
: 含义取决于运行 tcpdump 命令的操作系统
- 在某些操作系统上,它会对数据包进行计数,而不管它们是否与过滤表达式匹配,也不管 tcpdump 是否已读取并处理它们。
- 在某些操作系统上,它只计算被过滤器表达式匹配的数据包,而不管 tcpdump 是否已经读取和处理了它们
- 在某些操作系统上,它只计算被过滤器表达式匹配并被 tcpdump 处理的数据包
dropped by kernel
: 由于缓冲区空间不足,而被 tcpdump 丢弃的数据包数量,可以通过 - B 参数设置缓冲区大小。
参数:
参数较多,解释一部分
-A
: 以 ASCII 格式打印每个数据包 (减去其链路级报头)。便于抓取 http 请求。
-B (--buffer-size=buffer_size)
: 设置捕获缓冲区大小,单位为 KiB (1024 bytes).
-c
: 收到指定数据包后退出。
-e
: 显示 mac 地址
-w
: 将捕获到的数据包输出到文件中。文件名支持使用 strftime 格式 (例如: -w test-% H% M% S.pcap)
-r
: 从文件中读取数据包(使用 - w 选项保存的 pcap 文件)。如果文件为 -
,则使用标准输入。
-G
: 每隔多长时间输出一个文件 (文件名不能一样,否则会覆盖),单位秒 (s)
-C
: 当使用 -w
将数据包保存到文件时,单个文件保存的最大大小。1 代表将近 1M (1000000 bytes)
-D
: 显示操作系统中可以使用的网络接口
-E
: 通过提供加密密钥来解密 IPSEC 通信。
-F
: 指定一个文件,过滤器表达式将从这个文件中获取。
-i (--interface=interface)
: 指定捕获哪个网络接口的数据包,默认是 tcpdump -D
显示的第一个接口。
-l
: 在捕获到数据包时立即将输出写入标准输出,而不是等待填满缓冲区再写入标准输出。这样可以让输出实时地显示在屏幕上,而不是等到缓冲区满了再一次性显示在屏幕上。tcpdump -l | tee dat
or tcpdump -l > dat & tail -f dat
-n
: 不将 ip 解析成名称
-nn
: 不将 ip 解析成域名,不将端口解析成名称
-#
: 打印数据包编号
--print
: 当使用 -w
时,stdout 不会有数据包信息输出,加此参数可以同时输出。老版本不支持此参数
-Q
: 数据包方向 (in
,out
,inout
), 不是在所有平台都可以用
-q
: 打印更少的协议信息
-S
: 显示绝对的 seq 编号。默认单方向第一个条目显示绝对 seq 编号,后面的数据包显示的是相对的 seq 编号。(不知这么解释对不对) 看下图吧

-s
: 指定从每个数据包中获取数据的字节数,而不是默认的 262144 字节。-s0
和默认值一样
-t
: 不显示时间
-tt
: 显示时间戳
-ttt
: 与上一条的时间增量,详细请看 man 手册
-tttt
: 可读性强的时间
-v
: 打印 IP 数据包中的 ttl,flags,总长度和选项等信息
-vv
: 更详细的输出。
-vvv
: 更详细的输出。
-X
: 数据包内容以 16 进制和 ascii 格式显示
-XX
: 同上,信息可能更多
过滤器表达式
过滤表达式由一个或多个原语组成。原语的编写主要分为三个层面:
类型:根据主机、网络、端口等信息过滤。如: host
、net
、port
、portrange
等。
- 例如:
host xxx.com(也可以写ip)
,net 192.168.1.0/24
,port 20(这里仅代表tcp和udp)
,portrange 6000-6008
传输方向:根据源和目的进行过滤。如: src
, dst
, src or dst
,src and dst
等。
- 例如:
src 192.168.1.10
,dst 192.168.1.20
src or dst 192.168.1.1
,src and dst 192.168.1.1
,src or dst port 20
dst net 128.3.0.0
协议:基于协议进行过滤。如: tcp
、udp
、icmp
、ip
、ip6
、arp
、rarp
、wlan
等。
- 例如:
arp net 128.3
,tcp port 21
,udp portrange 7000-7009
常用原语
tcpdump 捕获的数据包和表达式匹配结果为 true,才是我们也要的结果,表达式中可以使用 and(&&)
,or(||)
,not(!)
,
dst
: 目标主机。dst host 1.1.1.1
也可以写成 dst 1.1.1.1
. 因为默认是 host,host 可以被省略
src
: 源主机。
ether dst
: ether 的目标地址 (mac 地址)
ether src
: ether 的源地址 (mac 地址)
net
: 网络 (网段)
dst net
: 目标网络
src net
: 源网络
port
: 端口
dst port
: 目标端口
src port
: 源端口
portrange
: 端口范围
dst portrange
: 目标端口范围
src portrange
: 源端口范围
less
: 数据包的长度小于或等于指定长度。less 32
等同于 len <= 32
greater
: 数据包的长度大于或等于指定长度。less 32
等同于 len >= 32
例子:
1. 捕获源和目的是 soulchild.cn 相关的流量
tcpdump host soulchild.cn
2. 捕获 eth0 网卡的流量
tcpdump -i eth0
3. 根据源地址和目的地址捕获流量
|
|
4. 捕获源和目的是 1.2.3.0/24 网段的流量
tcpdump net 1.2.3.0/24
5. 捕获与指定端口相关的流量
|
|
6. 捕获指定协议的流量
|
|
7. 捕获指定端口范围的流量
tcpdump portrange 20-21
8. 根据数据包大小捕获流量
|
|
9. 将捕获的数据包保存至文件和从文件读取
|
|
10. 可读性较高的一种参数组合
tcpdump -ttnnvvS
11. 源地址是 10.5.2.3 发送到任意主机的 3389 端口的数据包
tcpdump -nnvvS src 10.5.2.3 and dst port 3389
12. 捕获从一个网络到另一个网络的数据包
tcpdump -nvX src net 192.168.0.0/16 and dst net 10.0.0.0/8 or 172.16.0.0/16
13. 捕获目的地址是 192.168.0.2 并且不是 icmp 的数据包
|
|
14. 捕获 192.168.0.2 进来的流量,并且不是 22 目的端口的流量
tcpdump -vv src 192.168.0.2 and not dst port 22
* 根据 tcp 状态进行选择
tcp 标志可用字段 tcp-fin
, tcp-syn
, tcp-rst
, tcp-push
, tcp-ack
, tcp-urg
, tcp-ece
, tcp-cwr
.
15. 捕获包含 rst 标志位的 tcp 数据包
|
|
15.1. 捕获包含 syn 标志位的 tcp 数据包
|
|
15.2. 捕获包含 syn 和 ack 的 tcp 数据包
|
|
16. 查找 http user-agent
tcpdump -vvAls0 | grep 'User-Agent:'
19. 获取 GET 请求
tcpdump -vvAls0 | grep 'GET'
20. 捕获 DNS 流量
tcpdump -vvAs0 port 53
21. 捕获 NTP 流量
tcpdump -vvAs0 port 123
22. 查找明文密码
tcpdump -lA port http or port ftp or port smtp or port imap or port pop3 or port telnet | egrep -i -B5 'pass=|pwd=|log=|login=|user=|username=|pw=|passw=|passwd= |password=|pass:|user:|username:|password:|login:|pass |user '
23. 捕获指定状态的 icmp 包
icmp 可用字段 icmp-echoreply
, icmp-unreach
, icmp-sourcequench
, icmp-redirect
, icmp-echo
, icmp-routeradvert
, icmp-routersolicit
, icmp-timxceed
, icmp-paramprob
, icmp-tstamp
, icmp-tstampreply
, icmp-ireq
, icmp-ireqreply
, icmp-maskreq
, icmp-maskreply
.
|
|
24. 查找带有 "Evil Bit" 的流量
IP 报头中有一位永远不会被合法应用程序设置,我们称之为 "Evil Bit"。
tcpdump 'ip[6] & 128 != 0'
这里有一个 tcpdump 高级用法的解释: https://blog.csdn.net/zhaojie0708/article/details/103496004

