tcpdump 强大的功能和灵活的策略,主要体现在过滤器(BPF)强大的表达式组合能力。
本节主要分享一些常见的所谓高级用法,希望读者能够举一反三,根据自己实际需求,来灵活使用它。
1. 抓取指定客户端访问 ssh 的数据包
$tcpdump-nieth0src192.168.1.100anddstport22
2. 抓取从某个网段来,到某个网段去的流量
$tcpdump-nieth0srcnet192.168.1.0/16anddstnet10.0.0.0/8or172.16.0.0/16
3. 抓取来自某个主机,发往非 ssh 端口的流量
$tcpdump-nieth0src10.0.2.4andnotdstport22
4. 当构建复杂查询的时候,你可能需要使用引号,单引号告诉 tcpdump 忽略特定的特殊字符,这里的 ()
就是特殊符号,如果不用引号的话,就需要使用转义字符
$tcpdump-nieth0
'src10.0.2.4and(dstport3389or22)'
5. 基于包大小进行筛选,如果你正在查看特定的包大小,可以使用这个参数
小于等于 64 字节:
$tcpdump-niless64
大于等于 64 字节:
$tcpdump-nieth0greater64
等于 64 字节:
$tcpdump-nieth0length==64
6. 过滤 TCP 特殊标记的数据包
抓取某主机发送的 RST
数据包:
$tcpdump-nieth0srchost192.168.1.100and
'tcp[tcpflags]&(tcp-rst)!=0'
抓取某主机发送的 SYN
数据包:
$tcpdump-nieth0srchost192.168.1.100and
'tcp[tcpflags]&(tcp-syn)!=0'
抓取某主机发送的 FIN
数据包:
$tcpdump-nieth0srchost192.168.1.100and
'tcp[tcpflags]&(tcp-fin)!=0'
抓取 TCP 连接中的 SYN
或 FIN
包
$tcpdump
'tcp[tcpflags]&(tcp-syn|tcp-fin)!=0'
$tcpdump
'icmp[icmptype]!=icmp-echoandicmp[icmptype]!=icmp-echoreply'
8. 抓取端口是 80,网络层协议为 IPv4, 并且含有数据,而不是 SYN、FIN 以及 ACK 等不含数据的数据包
$tcpdump
'tcpport80and(((ip[2:2]-((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2))!=0)'
解释一下这个复杂的表达式,具体含义就是,整个 IP 数据包长度减去 IP 头长度,再减去 TCP 头的长度,结果不为 0,就表示数据包有 data
,如果还不是很理解,需要自行补一下 tcp/ip
协议
9. 抓取 HTTP 报文,0x4754
是 GET
前两字符的值,0x4854
是 HTTP
前两个字符的值
$tcpdump-nieth0
'tcp[20:2]=0x4745ortcp[20:2]=0x4854'
-
嵌入式
+关注
关注
5082文章
19104浏览量
304785 -
Linux
+关注
关注
87文章
11292浏览量
209318 -
网络
+关注
关注
14文章
7553浏览量
88727 -
数据包
+关注
关注
0文章
260浏览量
24385
发布评论请先 登录
相关推荐
评论