wireshark 实用过滤表达式

本文详细介绍Wireshark中各种复杂过滤表达式的使用方法,包括IP地址、协议、端口及内容过滤,以及如何设置路由和调整网络配置以优化抓包效果。

首先说几个最常用的关键字,“eq” 和 “==”等同,可以使用 “and” 表示并且,“or”表示或者。“!" 和 "not” 都表示取反。


  一、针对wireshark最常用的自然是针对IP地址的过滤。其中有几种情况:

  (1)对源地址为192.168.0.1的包的过滤,即抓取源地址满足要求的包。

           表达式为:ip.src == 192.168.0.1

  (2)对目的地址为192.168.0.1的包的过滤,即抓取目的地址满足要求的包。

           表达式为:ip.dst == 192.168.0.1

  (3)对源或者目的地址为192.168.0.1的包的过滤,即抓取满足源或者目的地址的ip地址是192.168.0.1的包。

           表达式为:ip.addr == 192.168.0.1,或者 ip.src == 192.168.0.1 or ip.dst == 192.168.0.1

  (4)要排除以上的数据包,我们只需要将其用括号囊括,然后使用 "!" 即可。

           表达式为:!(表达式)

 

  二、针对协议的过滤

  (1)仅仅需要捕获某种协议的数据包,表达式很简单仅仅需要把协议的名字输入即可。

                表达式为:http

  (2)需要捕获多种协议的数据包,也只需对协议进行逻辑组合即可。

           表达式为:http or telnet (多种协议加上逻辑符号的组合即可)

  (3)排除某种协议的数据包

           表达式为:not arp      !tcp

  三、针对端口的过滤(视协议而定)  

(1)捕获某一端口的数据包

           表达式为:tcp.port == 80

  (2)捕获多端口的数据包,可以使用and来连接,下面是捕获高端口的表达式

           表达式为:udp.port >= 2048

  四、针对长度和内容的过滤

  (1)针对长度的过虑(这里的长度指定的是数据段的长度)

           表达式为:udp.length < 30   http.content_length <=20

  (2)针对数据包内容的过滤

      表达式为:http.request.uri matches "vipscu"  (匹配http请求中含有vipscu字段的请求信息)

 

  通过以上的最基本的功能的学习,如果随意发挥,可以灵活应用,就基本上算是入门了。以下是比较复杂的实例(来自wireshark图解教程):

tcp dst port 3128

显示目的TCP端口为3128的封包。

ip src host 10.1.1.1

显示来源IP地址为10.1.1.1的封包。

host 10.1.2.3

显示目的或来源IP地址为10.1.2.3的封包。

src portrange 2000-2500

显示来源为UDP或TCP,并且端口号在2000至2500范围内的封包。

not imcp

显示除了icmp以外的所有封包。(icmp通常被ping工具使用)

src host 10.7.2.12 and not dst net 10.200.0.0/16

显示来源IP地址为10.7.2.12,但目的地不是10.200.0.0/16的封包。

(src host 10.4.1.12 or src net 10.6.0.0/16) and tcp dst portrange 200-10000 and dst net 10.0.0.0/8

显示来源IP为10.4.1.12或者来源网络为10.6.0.0/16,目的地TCP端口号在200至10000之间,并且目的位于网络10.0.0.0/8内的所有封包。

       1.以管理员身份运行cmd

        2.route add 本机ip mask 255.255.255.255 网关ip

        如:route add 172.16.51.115 mask 255.255.255.255 172.16.1.1

        使用完毕后用route delete 172.16.51.115 mask 255.255.255.255 172.16.1.1删除,否则所有本机报文都经过网卡出去走一圈回来很耗性能。

        此时再利用wireshark进行抓包便可以抓到本机自己同自己的通信包,这样配置的原因是将发往本机的包发送到网关,而此时wireshark可以捕获到网卡驱动的报文实现抓包。

        但这样有一个缺点,那就是本地请求的URL的IP只能写本地的IP地址,不能写localhost或127.0.0.1,写localhost或127.0.0.1还是抓不到包。

route add  10.8.152.171 mask 255.255.255.255 10.8.152.51
route delete  10.8.152.171 mask 255.255.255.255 10.8.152.51

 

本地网卡检测不到

第一步

1、打开windows设备管理器。

2、查看-显示隐藏的设备

3、非即插即用驱动程序

4、NetGroup Packet Filter Driver 右键属性—驱动程序—启动类型,修改类型为“系统”

第二步:

解决方法:

  • 以管理员方式运行 cmd.exe
  • 输入net start npf, 打开网络抓包服务。
  • 运行 Wireshark Legacy , 选择你要抓包的网卡。

在cmd下输入net start npf,打开网络抓包服务

执行时如果遇到权限问题,可在C:\Windows\System32目录下右键–>以管理员权限执行cmd.ext,让后在cmd里执行上述命令即可。

第三步:

运行wireshark ,此时网卡已经可以正常检测到了。

 

<think>嗯,用户这次的问题很明确,就是要找Wireshark中按消息长度过滤表达式写法。从引用内容来看,用户应该是个网络技术人员,最近在写Wireshark过滤器教程,工作很忙还抽空研究这个,挺认真的。 用户提到的几个引用里,[5]直接给出了关键信息:frame.len字段和比较运算符的使用示例。不过要注意区分用户说的"消息长度"具体指什么——是数据帧全长还是载荷长度。引用[3]特别强调了捕获过滤器和显示过滤器的语法差异,这点必须重点说明。 用户之前构思的教程框架很系统(概念/语法/示例/技巧),这次提问可能就是在准备"过滤语句编写"章节的内容。考虑到用户要写教程,回复时应该: 1 明确区分两种过滤器的语法差异(WinPcap语法 vs Wireshark自有语法) 2 给出帧全长和传输层载荷两种长度的过滤方案 3 补充实用细节比如单位转换(bytes转bits) 4 提供典型应用场景的示例(比如定位大文件传输) 用户引用[4]提到捕获过滤器用"less"和"greater"关键字,这和显示过滤器完全不同,需要单独说明。另外引用[5]的contains示例虽然和长度无关,但说明用户关注精准匹配,回复中可以类比强调运算符的精确用法。 最后要注意用户工作繁忙,回复要直接高效,避免冗余信息。但考虑到要写入教程,技术细节必须严谨,比如帧长度包含14字节帧头这种专业点也要注明。 </think>在Wireshark中通过消息长度过滤需区分**捕获过滤器**和**显示过滤器**两种语法,具体写法如下: --- ### 一、捕获过滤器(Capture Filter) **语法规则:** 使用 `less`、`greater` 等长度关键字,结合长度值(单位:字节) **表达式:** ```bash # 过滤长度 ≤100 字节的帧 frame.len <= 100 # 过滤长度 >1500 字节的帧 frame.len > 1500 ``` **关键点:** 1. 长度字段:`frame.len`(含帧头和CRC校验) 2. 运算符:`==`、`!=`、`<`、`>`、`<=`、`>=` 3. **仅支持WinPcap/BPF语法**(不可用 `&&`/`||` 等逻辑符混合协议过滤)[^3][^4] --- ### 二、显示过滤器(Display Filter) **语法规则:** 直接使用 `frame.len` 字段配合比较运算符 **表达式:** ```bash # 精确匹配100字节的帧 frame.len == 100 # 过滤500-1000字节的帧 frame.len >= 500 && frame.len <= 1000 ``` **高级用法:** ```bash # 组合协议和长度(例:HTTP且长度>1KB) http && frame.len > 1000 # 排除小包(长度<64字节的无效帧) !(frame.len < 64) ``` --- ### ⚠️ 注意事项 1. **单位统一为字节**(1字节=8比特),如过滤1500字节需写 `frame.len == 1500` 2. 捕获过滤器长度值需用十进制(如 `less 128`) 3. 显示过滤器支持复杂逻辑组合(例:`(tcp.len > 1000) || (udp.length < 128)`)[^5] --- ### 🌰 实用场景示例 1. **定位大文件传输:** ```bash tcp.len > 1000 && tcp.port == 80 # 过滤HTTP大流量 ``` 2. **检测网络攻击(如Ping洪水):** ```bash icmp && frame.len < 100 # 过滤异常小ICMP包 ``` 3. **分析数据分片:** ```bash ip.frag_offset > 0 || frame.len >= 1480 # 抓取分片包或接近MTU的包 ``` > 📌 **提示:** Wireshark状态栏实时显示当前包的 `frame.len` 值,可右键快速生成过滤条件[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值