探索

wireshark过滤命令详解

时间:2010-12-5 17:23:32  作者:娱乐   来源:娱乐  查看:  评论:0
内容摘要:抓包十分钟,过滤两小时。Wireshark里最让人上头的不是那堆花花绿绿的包,而是你明明知道要找什么,却敲不出那条能一击命中的过滤条件。 先分清两个基本概念。抓包界面顶部那个绿色箭头旁边写的是显示过滤

抓包十分钟,滤命令详过滤两小时。滤命令详Wireshark里最让人上头的滤命令详不是那堆花花绿绿的包,而是滤命令详你明明知道要找什么,却敲不出那条能一击命中的滤命令详过滤条件。

先分清两个基本概念。滤命令详抓包界面顶部那个绿色箭头旁边写的滤命令详是显示过滤器——它只管把你已经抓到的包里符合条件的那部分显示出来,数据还在,滤命令详只是滤命令详藏起来了。真正决定抓什么包的滤命令详是捕获过滤器,在抓包开始前设置,滤命令详语法和显示过滤器完全不同,滤命令详用的滤命令详是BPF(Berkeley Packet Filter)那套东西。很多人栽在这里,滤命令详把显示过滤器的滤命令详语法填到捕获过滤器里,结果什么都抓不到,还以为是网卡坏了。

显示过滤器才是日常主力。最基础的玩法就是直接敲协议名:tcp、udp、http、dns,回车,完事。但这么干太粗糙,好比进图书馆只说“给我书”,不告诉管理员要哪本。

要精准就得组合条件。逻辑与是and或&&,逻辑或是or或||,取反用not或!。比如排查某个IP的HTTP流量,敲ip.addr == 192.168.1.10 and http。注意,这里用的是==而不是=,单等号在Wireshark里不认。

有时候你会遇到一个坑:明明过滤了ip.addr == 10.0.0.5,结果出来的包里源地址和目的地址都不包含这个IP。因为ip.addr同时匹配源和目的,只要包的任一端是10.0.0.5就会显示。想精确区分,就得用ip.src和ip.dst。这俩字段名差一点,语义差很多。

端口过滤也常用。抓HTTP的80端口,tcp.port == 80,但这同样匹配源端口或目的端口。要是只想看从某IP发往80端口的包,写ip.src == 192.168.1.10 and tcp.dstport == 80。别把tcp.dstport写成tcp.destport,Wireshark不认全拼。

字符串匹配是进阶玩法。排查HTTP请求里的关键字,用http.request.uri contains "login"。想抓某个TCP流里的特定内容,tcp.payload contains "password"。这里有个小技巧:contains区分大小写,不区分的话用matches加正则,比如http.request.uri matches "(?i)admin"。

真正让我觉得Wireshark封神的是follow tcp stream的替代品——tcp.stream eq 0。当你在一个会话里看到乱序的包,想整体看某条TCP连接的全部数据,不用右键跟流,直接过滤tcp.stream eq 5,数字是流的编号。排查慢请求时,配合tcp.time_delta > 1能快速找出间隔超过1秒的包,延迟问题一目了然。

还有一类场景:排查DNS解析故障,只看响应包里的错误码,dns.flags.rcode != 0。看TLS握手,过滤tls.handshake.type == 1只留ClientHello。这些字段名记不住没关系,Wireshark的自动补全和提示框会告诉你当前协议有哪些可用字段,多敲几次自然就熟了。

最后说个反直觉的坑。显示过滤器里用!=排除某个值,比如ip.src != 192.168.1.1,结果往往不是你想要的。因为如果包里没有IP字段(比如ARP包),这个条件也成立。正确写法是not ip.src == 192.168.1.1或者!(ip.src == 192.168.1.1)。这种细节,网上教程很少提,踩过坑才记得住。

过滤条件写多了会形成肌肉记忆。真正的高手看一眼抓包文件,随手敲几行过滤,几十万包瞬间缩到几十个,问题定位比翻聊天记录还快。这不是天赋,就是多抓、多敲、多踩坑。

最近更新
热门排行
copyright © 2026 powered by 力不从心网   sitemap