Wireshark技巧-协议过滤规则与显示规则

Wireshark开发与使用 admin 6915℃ 0评论

过滤规则

过滤规则是在Wireshark通过Winpcap抓取报文的时候,就对抓到的报文内容进行了过滤,规则比较难懂,但是对于熟悉协议的童鞋来说,也还是比较好理解的,下面以一些例子进行说明。

1、只抓取HTTP报文

tcp port 80

在设置这个规则的时候,必须先了解HTTP协议。通常HTTP协议都是走TCP 80端口,因此只要将规则设置成tcp port 80,这里不关心源端口,或者目的端口,只要源或者目的端口任意一个是80,那么则符合该规则。但是有的童鞋又会说,有的HTTP协议也走8080端口,是的,那么我们将8080端口也加入规则:

tcp port 80 or tcp port 8080

了解计算机语言的童鞋应该对这个不陌生,使用or将两个条件连接起来,只要其中一个条件符合,即结果就是符合该规则。规则语法中除了支持or外,还支持and和not,and表示两个条件必须为真,结果才为真,例如:

tcp port 80 and host 192.168.0.1

以上规则表示主机为192.168.0.1并且端口为80的报文

not表示非,例如我想抓取除主机为192.168.0.1并且端口为80的所有报文,那么过滤规则是:

not (tcp port 80 and host 192.168.0.1)

2、只抓取arp报文

ether proto 0x0806

ether表示以太网头部,而proto表示以太网头部的proto字段,0x0806则为以太网头部的ARP协议类型。如果只抓取IP报文,规则为:

ether proto 0x08000

3、只抓取IP负载长度大于300个字节的报文

ip[2:2] > 300

[]表示偏移,IP协议头部偏移值为2,熟悉IP协议或者通过Wireshark查看IP报文头部,可以得知偏移2的位置正是ip.tot_length,两个字节,因此冒号后面还有一个2。对于其他协议(ether/ip/tcp/udp)的位置,都可以以类似的方法设置规则。

例如,需要抓取源IP地址为192.168.0.101的所有报文,那么可以这样设置规则:

ip[12:4]=0xc0a80065

偏移值12为IP头部的源地址,4个字节,0xc0a80065正是192.168.0.101IP地址的主机字节序的十六进制。当然,要想对源地址进行过滤,还有更加简单的办法:

src host 192.168.0.101

对于wireshark过滤规则,只要了解相应的协议(主要是IP/TCP/UDP),理解了它的基本语法,还是不算太复杂的。当然,如果觉得这个复杂,那么下面要讲到的显示规则,则显得要简单很多了。

更多关于过滤规则的说明可以参考:

http://www.tcpdump.org/tcpdump_man.html

显示规则

显示规则是对抓取后的报文再次进行刷选,刷选规则基本不需要学习,因为Wireshark已经给了足够多的提示,只需简单的进行输入或者动鼠标即可。

先举一个例子,看下图:

设置Wireshark显示规则

从上图可以看出,当用户选择tcp的源端口字段时,状态栏上就显示相应的显示规则,然后用户在显示规则的输入框中输入tcp时,就会出现智能提示,供用户选择相应的规则名称,输入条件即可。

对于任何Wireshark可以解析的协议,都支持通过以上方法设置相应的显示规则,例如只显示向baidu发送的http请求报文,显示规则为:

http.request.method==GET and http.host eq www.baidu.com

怎么样,比过滤规则要简单吧?

既然显示规则比过滤规则要简单很多,那么为什么还需要过滤规则呢?因为现在网络上跑的应用太多了,如果在100台规模的内网的出口抓取报文,不设置任何过滤规则,估计不到1分钟,Wireshark就会崩掉,因为报文太多了,每个报文都抓取,会将系统的内存全部吃掉。

因此在做协议分析的时候,我们只需关心我们想要的报文,其他不相干的报文统统扔掉,这样既有利于分析,也同时好对这次抓取的报文进行保存。

转载请注明:协议分析与网络安全 » Wireshark技巧-协议过滤规则与显示规则

喜欢 (5)or分享 (0)
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址