tcpdump(五)过滤实战

【例子1】抓取通过ens39网卡的,且来源是slave服务器或者目标的slave服务器的网络包。

[root@test ~]# tcpdump -i ens39 -c 1 'host slave'

【例子2】抓取通过eth0网卡的,且属于test和baidu.com之间通信的网络包,或者属于test和qiyi.com之间通信的网络包。

[root@test ~]# tcpdump -i ens32 -c 1 'host test and baidu.com or qiyi.com'

【例子3】获取使用ftp端口和ftp数据端口的网络包。

[root@test ~]# tcpdump 'port ftp or ftp-data'

在Linux系统中,/etc/services这个文件里面,存储着所有知名服务和传输端口的对应关系,这个对应关系是由IANA组织(the internet Assigned Numbers Authority,互联网数字分配机构)来全权负责的,可以到这个链接查询:https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml。

如果直接把/etc/services里的ftp对应的端口值从21改为了8888,那么tcpdump就会去抓端口含有8888的网络包了。

【例子4】获取test和baidu.com之间建立TCP三次握手中的第一个网络包,即带有SYN标记位的网络包,另外,目的主机不能是qiyi.com

[root@test ~]# tcpdump 'tcp[tcpflags] & tcp-syn != 0 and not dst host qiyi.com'

【例子5】 打印IP包长度超过576字节的网络包。

[root@test ~]# tcpdump 'ip[2:2] > 576'

【例子6】打印广播包和组播包,同时数据链路层不是通过以太网媒介进行的。

[root@test ~]# tcpdump 'ether[0] & 1 = 0 and ip[16] >= 224'

理解[2:2]这种语法格式

重点掌握 proto [expr : size]

proto 就是 protocol 的缩写,表示这里要指定的是某种协议的名称,比如ip、tcp、ether.

proto这个位置,我们可以指定的协议类型大体包括:

  • ether : 链路层协议
  • fddi : 链路层协议
  • tr : 链路层协议
  • wlan : 链路层协议
  • ppp : 链路层协议
  • slip : 链路层协议
  • link : 链路层协议
  • ip : 网络层
  • arp : 网络层
  • rarp : 网络层
  • tcp : 传输层
  • udp : 传输层
  • icmp : 网络层
  • ip : 网络层

proto [expr : size]中,expr用来指定数据报偏移量,表示从某个协议的数据报的第多少位开始提取内容,默认的起始位置是0.而size表示从偏移量的位置开始提取多少个字节,比如看到的1、2、3.

如果设置了expr,而没有设置size,则默认提取1个字节.比如ip[2:2],就表示提取出第3、4个字节。而ip[0]则表示提取ip协议头的第一个字节。

在提取了特定内容之后,我们就需要设置我们的过滤条件了,我们可用的“比较操作符”包括:>、<、>=、<=、=、!=、共6个。


ip[0] & 0xf != 5

译:如果首部长度不等于5,就满足了过滤条件。也就是说,要求IP包的首部中含有可选字段。


IP协议的第1-4位,表示IP版本号,其值可能是0100(IPv4)或者0110(IPv6).第5-8位表示首部长度,其值的单位是”4字节“。如果首部长度为默认的20字节的话,那么此值就应该为5.如果大于5,那么表示此IP包中包含了可选字段。

注意,“IP版本号”和“首部长度”合在一起,正好占一个字节,而ip[0],表示提取IP头从0字节开始的1字节的内容,也就是提取“IP版本号”和“首部长度”这两个域的合体。

tcpdump(五)过滤实战_第1张图片

而0xf中的0x表示十六进制,f是十六进制数,转换成8位的二进制数是“00001111”.可见,“ip[0] & 0xf”提取的就是IP的“首部长度”字段的值。

如果一个过滤表达式中含有多个过滤条件,那么我们可以使用逻辑关系符将它们串联起来。其中:

  • !或not : 表示 “否定”
  • && 与 and : 表示 “与”
  • || 与or : 表示 “或”

你可能感兴趣的:(tcpdump)