wireshark过滤抓包与过滤查看

在分析网络数据和判断网络故障问题中,都离不开网络协议分析软件(或叫网络嗅探器、抓包软件等等)这个“利器”,通过网络协议分析软件我们可以捕获网络中正常传输哪些数据包,通过分析这些数据包,我们就可以准确地判断网络故障环节出在哪。网络协议分析软件众多,比如ethereal(wireshark的前身),wireshark,omnipeek,sniffer,科来网络分析仪(被誉为国产版sniffer,符合我们的使用习惯)等等,本人水平有限,都是初步玩玩而已,先谈谈个人对这几款软件使用感受,wireshark(ethereal)在对数据包的解码上,可以说是相当的专业,能够深入到协议的细节上,用它们来对数据包深入分析相当不错,更重要的是它们还是免费得,但是用wireshark(ethereal)来分析大量数据包并在大量数据包中快速判断问题所在,比较费时间,不能直观的反应出来,而且操作较为复杂。像omnipeek,sniffer,科来网络分析仪这些软件是专业级网络分析软件,不仅仅能解码(不过有些解码还是没有wireshark专业),还能直观形象的反应出数据情况,这些软件会对数据包进行统计,并生成各种各样的报表日志,便于我们查看和分析,能直观的看到问题所在,但这类软件是收费,如果想感受这类专业级的软件,我推荐玩科来网络分析仪技术交流版,免费注册激活,但是只能对50个点进行分析。废话不多说,下面介绍几个wireshark使用小技巧,说的不好,还请各位多指点批评。


目前wireshark最新版本是1.7的,先简单对比下wireshark的1.6和1.7版本。


下面是wireshark的1.6版本的界面图:




点击图中那个按钮,进入抓包网卡选择,然后点击option进入抓包条件设置,就会打开如下图的对话框。




如果想抓无线网卡的数据吧,就把图中那个勾去掉,不然会报错。点击Capture Filter进入过滤抓包设置(也可以在这个按钮旁边,那个白色框直接写过滤语法,语法不完成或无法错误,会变成粉红色的框,正确完整的会变成浅绿色),Filter name是过滤条件命名,Filter string 是过滤的语法定义,设置好了,点击new会把你设置好的加入到过滤条件区域,下次要用的时候,直接选者你定义这个过滤条件名。


下面是wireshark的1.7版本的界面图:




界面有所变化,同样是点击option进入过滤编辑,如下图:




如果,左边的双击左边网卡可以直接进入过滤抓包设置对话框,中间是点击option后进入的对话框,再双击网卡进入下面的过滤抓包设置对话框,后面就跟wireshark的1.6版本一样了。


下面聊聊过滤抓包语法,Filter string中怎么写语法。大家可以看看capture Filter原来已有的怎么定义的。




要弄清楚并设置好这个过滤条件的设置,得弄清楚TCP/IP模型中每层协议原理,以及数据包结构中每个比特的意思。上面这是抓得ARP,在数据链路层来看的,ARP是上层协议,在ethernet包结构表示的协议类型代码是 0x0806,如果站在网络层来说(ARP协议有时又称为2.5层的协议,靠近数据链路层),我们的过滤语法可以这样写:




这两个是等价的,抓得都是ARP包。或许有的朋友这里不太明白,建议去看《TCP/IP协议族》《TCP/IP协议详卷》等等原来书籍,先理解数据包结构。从这个设置来看,可以看出wireshark的过滤抓包多么深入了。


现在我简单讲讲过滤抓包语法以及怎样设置想要的过滤抓包语法(Filter string该填写什么东西)。


组合过滤语法常使用的连接:


过滤语法1 and 过滤语法2 只有同时满足语法12数据才会被捕获


过滤语法1 or 过滤语法2 只有满足语法1或者2任何一个都会被捕获


not 过滤语法 除该语法外的所有数据包都捕获




常用的过滤语法说明:


ether host D0F:9A:87:57:9E 定义捕获MAC为D0F:9A:87:57:9E的数据包,不管这个MAC地址是目标MAC还是源MAC,都捕获这个数据包


ether proto 0x0806 定义了所有数据包中只要ethernet协议类型是0x0806的数据包进行捕获。




如果我们用and来组合这两个语法:


ether host D0F:9A:87:57:9E and ether proto 0x0806(该语法等价于ether host D0F:9A:87:57:9E and arp)


表示我们只针对MAC为D0F:9A:87:57:9E的ARP包进行捕获。




arp 该语法只捕获所有的arp数据包


ip 该语法只捕获数据包中有IP头部的包。(这个语法可以用 ether proto 0x0800,因为ethernet协议中得0x0800表示ip)


host 192.168.1.1 该语法只捕获IP头部中只要有192.168.1.1这个地址的数据,不管它是源IP地址还是目标IP地址。




tcp 该语法只捕获所有是tcp的数据包


tcp port 23 该语法只捕获tcp端口号是23的数据包,不管源端口还是目标端口。




udp 该语法只捕获所有是udp的数据包


udp port 53 该语法只捕获udp端口号是23的数据包,不管源端口还是目标端口。


port 68 该语法只捕获端口为68的数据,不管是TCP还是UDP,不管该端口号是源端口,还是目标端口。




以上是常用的过滤抓包语法,灵活组合,就可以定位抓包。下面简单举几个例子。

这是个Radius的过滤抓包,如果不清楚它是TCP还是UDP,可以使用语法port 1645 or port 1646来定义。

这个过滤抓包语法的设置是,IP地址为172.16.1.102的除了TCP协议不捕获外,其他所有数据都捕获。


以上就是过滤抓包的语法简单说明和介绍,最后如下操作就可抓包了。




设置好就点击new,那么过滤抓包的名字就会加入进去,下次只有选择名字就可以直接抓了,点击ok之后,语法对的话,就会呈现浅绿色,语法不完整或错误就是粉红色,按下start就可以捕获自己想要的数据包了。


接下来,介绍下wireshark的过滤查看的数据包,在面对大量数据包,我们怎么快速锁定查找自己想要的数据包。Wireshark的过滤抓包查看语法深入包的细节了,草草看了至少有上百条语法。要很好的理解和运用这些语法,TCP/IP协议原理得清楚。有兴趣的朋友可以如下图深入查看过滤查看使用的语法。




下面我只简单介绍几个常用:


eth.addr eq 00:08:d2:00:09:10 查找MAC等于00:08:d2:00:09:10的数据包,不过源MAC还是目标MAC


eth.src eq 00:08:d2:00:09:10 查找源MAC地址为00:08:d2:00:09:10的数据包


eth.dst eq 00:08:d2:00:09:10 查找源MAC地址为00:08:d2:00:09:10的数据包


eth.type eq 0x0806 查找ethernet协议类型为0x0806(ARP包)的数据包


ip.addr eq 10.1.1.2 查找IP地址为10.1.1.2的数据包


tcp.dstport eq 80 查找TCP目标端口为80的数据包


tcp.srcport eq 80 查找TCP源端口为80的数据包


udp.srcport eq 53 查找UDP源端口为53的数据包


udp.dstport eq 53 查找UDP目标端口为53的数据包


ip.addr eq 10.1.1.2 and udp.srcport eq 53 定位查看IP地址为10.1.1.2,UDP源端口为53的数据包。


下面是演示图:




输入查看语法后,回车,wireshark查找数据,看数据包的大小决定查找时间,我抓了个300多M的包,过滤查找想要的包花了3分钟。




正在查找包

过滤查找出了自己想要的包了,


使用wireshark时,通过精确定位过滤捕获自己想要的包,这样捕获的包比较直观,而且捕获的包又小。回想起自己曾在核心上抓包,大量数据包对笔记本网卡的冲击太大了,造成笔记本死机,而且在几十万个包里,很难直观看到自己想要的包,对其进行分析,在这样的大的包使用过滤定位查看,也比较耗时间。有时候需要捕获大量的包分析流量,建议还是使用sniffer,科来这类更加专业级网络分析软件。

相关文档:http://www.clxp.net.cn/article.asp?id=2288

posted on 2012-02-29 12:15  猥琐丶欲为  阅读(4041)  评论(0编辑  收藏  举报