Wireshark常用技巧
本节主要讲解wireshark使用的一些常用的技巧,其实主要是使用过程中,用的最为频繁的一些包的筛选规则。
Wireshark中有两种过滤器:
(1).捕获过滤器:告诉wireshark我们只需要捕获满足什么条件的包,而不满足条件的包则不需要捕获。由于捕获过滤器是在wireshark在捕获过程中采用的,所以捕获过滤器的过滤条件最多局限在传输层的协议,也就是可以通过ip和端口指定规则,而更加上层的应用层协议则不能用在捕获过滤器中。
语法: Protocol Direction Host(s) Value LogicalOperations Other expression
例子: tcp dst 10.1.1.1 80 or tcp dst 10.2.2.2 3128
解释:Protocol表示协议,Direction表示方向,Host指定IP地址,Value一般指定端口,可以使用逻辑操作连接其他的表达式来生成复合表达式。例如:
tcp.dstport==8888
捕获目的tcp端口为8888的包
ip.src == 10.1.1.1
捕获来源地址为10.1.1.1的包
ip.addr == 10.1.1.1
捕获目的或者来源地址为10.1.1.1的包
not icmp
捕获除了icmp包的所有包
有关更多的捕获过滤器请参考wireshark的文档
(2).显示过滤器:该过滤器是在已经抓到的包中筛选出自己想分析的数据包,也就是说该过滤器是在捕获工作已经完成之后做的,其数据基础就是已经捕获到的那些数据包,该过滤器支持的协议就是wireshark能够识别的所有协议,由于是在已经捕获下来的包中进行筛选,所以该过滤器中的条件表达式可以支持所有的上层协议,其筛选条件也可以根据每个协议的不同部分进行筛选。下面以HTTP协议为例子:
查看所有http请求的数据包(包括GET,POST等等的请求,只要是web请求都算)
所有POST请求的数据包
所有请求的URL中包含字符串”.jpg”的包
所有http响应状态码为200的包
可以看到HTTP协议有很多字段提供筛选,wireshark还支持matches操作符,进行正则筛选
查找所有http请求URL中包含 /mvc/字符串并且请求的是带参数的aspx页面的包
关于各种协议的字段文档可以查阅wireshark的文档,都有详细说明,包括协议的每个字段部分的含义。其实对于做app或者是web开发的来说常见的http筛选字段已经足够用了
此外wireshark除了可以根据协议的每个字段的内容值进行筛选之外,还可以指定数据包中的第几个字节的二进制数据值进行筛选,这种通过包中二进制数据进行筛选的方法一般在socket的私有二进制协议中比较有用,这些协议一般是私有定义的,并且是基于二进制的协议,例如第几个字节表示什么意思,wireshark肯定是不能识别这些包的,那么我们可以自己根据二进制数据进行筛选
筛选出ip源或目标地址为172.16.1.126 并且udp端口为50798 并且rtp包的第2个字节的值是0xE0的包,这样的包是rtp数据包一帧结束的包。
当然上面的例子我们是可以通过rtp协议的字段rtp.marker==1为条件来进行筛选的,举上面的例子是为了说明如何根据包中的二进制数据值进行筛选。
Wireshark有非常强大的抓包与过滤功能,本节也仅仅列举了其中最常用的筛选规则,在显示过滤器的规则中wireshark可以根据每一层的协议进行筛选,例如网络层(IP,ARP,ICMP等协议),传输层(TCP,UDP)等协议,应用层(HTTP,RTMP,RTSP等协议),各层协议的字段可以通过逻辑与(&&,and),或(||,or),非(|,not)等运算符连接成复合表达式进行过滤