精讲Wireshark过滤器表达式原理

sunnyroc  2024-08-15 17:24  阅读 859 次 评论 0 条

精讲Wireshark过滤器表达式原理 通讯总线 第1张今天我们来学习下Wireshark过滤器表达式原理精讲Wireshark过滤器表达式原理 通讯总线 第2张

前言

   Wireshark 是一款流行的网络协议分析工具,它允许用户通过过滤器表达式来筛选捕获的数据包。过滤器表达式基于特定语法来定义哪些数据包应该被显示或忽略。

1.过滤器操作

过滤器是Wireshark的核心功能,也是我们平时使用最多的一个功能。Wireshark提供了两个过滤器:抓包过滤器 和 显示过滤器。两个过滤器的过滤思路不同。

     抓包过滤器:重点在动作,需要的包我才抓,不需要的我就不抓。

    显示过滤器:重点在数据的展示,包已经抓了,只是不显示出来。

1.1. 抓包过滤器

抓包过滤器在抓包前使用,它的过滤有一个基本的语法格式:BPF语法格式

    BPF(全称 Berkeley Packet Filter),中文叫伯克利封包过滤器,它有四个核心元素:类型、方向、协议 和 逻辑运算符。

  • 类型Type:主机(host)、网段(net)、端口(port)
  • 方向Dir:源地址(src)、目标地址(dst)
  • 协议Proto:各种网络协议,比如:tcp、udp、http
  • 逻辑运算符:与( && )、或( || )、非( !)

 

四个元素可以自由组合,比如:

  • src host 192.168.31.1:抓取源IP为 192.168.31.1 的数据包
  • tcp || udp:抓取 TCP 或者 UDP 协议的数据包

 

1.2 抓包过滤器使用方式

使用抓包过滤器时,需要先停止抓包,设置完过滤规则后,再开始抓包。

精讲Wireshark过滤器表达式原理 通讯总线 第3张

停止抓包的前提下,点击工具栏的捕获按钮,点击选项。

在弹出的捕获选项界面,最下方的输入框中输入过滤语句,点击开始即可抓包。

精讲Wireshark过滤器表达式原理 通讯总线 第4张

提示:抓包过滤器的输入框,会自动检测语法,绿色代表语法正确,红色代表语法错误。

1.3 显示过滤器

显示过滤器在抓包后或者抓包的过程中使用。

1)语法结构

显示过滤器的语法包含5个核心元素:IP、端口、协议、比较运算符和逻辑运算符。

  • IP地址:ip.addr、ip.src、ip.dst
  • 端口:tcp.port、tcp.srcport、tcp.dstport
  • 协议:tcp、udp、http
  • 比较运算符:> < == >= <= !=
  • 逻辑运算符:and、or、not、xor(有且仅有一个条件被满足)

 

5个核心元素可以自由组合,比如:

  • ip.addr == 192.168.32.121:显示IP地址为 192.168.32.121 的数据包
  • tcp.port == 80 :显示端口为 80 的数据包

 

1.4 Wireshark 显示过滤器常见表达式

在过滤栏输入过滤语句,修改后立即生效。

 

协议过滤使用协议名称来过滤数据包,例如 iptcpudphttp等(注意过滤协议都是小写名称)。

 

示例:tcp 仅显示 TCP 协议的数据包。

精讲Wireshark过滤器表达式原理 通讯总线 第5张

 

地址过滤根据源地址或目的地址过滤数据包。

 

示例:ip.src == 221.176.200.30 仅显示源地址为 221.176.200.30 的数据包。

精讲Wireshark过滤器表达式原理 通讯总线 第6张

 

端口过滤根据端口号过滤数据包。

tcp.port eq 80 // 不管端口是来源的还是目标的都显示

tcp.port == 80

tcp.port eq 2722

tcp.port eq 80 or udp.port eq 80

tcp.dstport == 80 // 只显tcp协议的目标端口80

tcp.srcport == 80 // 只显tcp协议的来源端口80

udp.port eq 15000

 

示例:tcp.dstport == 80 仅显示目标端口为 80 的数据包。

精讲Wireshark过滤器表达式原理 通讯总线 第7张

 

逻辑运算符使用逻辑运算符来组合多个过滤条件。

 

  • and 或 &&:逻辑与,所有条件必须满足。
  • or 或 ||:逻辑或,至少一个条件满足。
  • not 或 !:逻辑非,排除条件。

     

示例:tcp.port >= 20 and tcp.port <= 80仅显示 TCP 协议且端口为 20到80 的数据包。

 示例:排除arp包,如!arp   或者   not arp

 

比较运算符对数值进行比较。

 

  • >:大于
  • <:小于
  • >=:大于等于
  • <=:小于等于
  • ==:等于

 

udp.length == 26 这个长度是指udp本身固定长度8加上udp下面那块数据包之和

tcp.len >= 7   指的是ip数据包(tcp下面那块数据),不包括tcp本身

ip.len == 94 除了以太网头固定长度14,其它都算是ip.len,即从ip本身到最后

frame.len == 119 整个数据包长度,从eth开始到最后

eth —> ip or arp —> tcp or udp —> data

示例:tcp.len >= 100 仅显示 TCP 数据包长度大于或等于 100 的数据包。

精讲Wireshark过滤器表达式原理 通讯总线 第8张

 

正则表达式使用正则表达式匹配字符串。

示例:http.host matches "int.dpool.sina.com.cn" 匹配 HTTP 请求中主机为 "int.dpool.sina.com.cn" 的数据包。

精讲Wireshark过滤器表达式原理 通讯总线 第9张

 

协议特定的过滤针对特定协议的字段进行过滤。

http.request.method == “GET”

http.request.method == “POST”

http.request.uri == “/img/logo-edu.gif”

http contains “GET”

http contains “HTTP/1.”

// GET包

http.request.method == “GET” && http contains “Host: “

http.request.method == “GET” && http contains “User-Agent: “

// POST包

http.request.method == “POST” && http contains “Host: “

http.request.method == “POST” && http contains “User-Agent: “

// 响应包

http contains “HTTP/1.1 200 OK” && http contains “Content-Type: “

http contains “HTTP/1.0 200 OK” && http contains “Content-Type: “

一定包含如下

Content-Type:

 

示例:http.request.uri contains "iplookup" 显示包含 "iplookup" 字符串的 HTTP 请求 URI。

精讲Wireshark过滤器表达式原理 通讯总线 第10张

 

括号:使用括号来分组逻辑表达式,确保运算符的优先级。

 

示例:((tcp or udp) and not icmp) 显示 TCP 或 UDP 协议的数据包,但不显示 ICMP。

 

协议分层路径使用协议分层路径来指定过滤条件。

 

示例:frame.number == 8 仅显示编号为 8 的帧。

 

范围过滤选择一系列连续的帧。

 

示例:frame.number >= 1 and frame.number <= 10 显示编号在 1 到 10 之间的帧。

 

精讲Wireshark过滤器表达式原理 通讯总线 第11张

   11.TCP参数过滤

tcp.flags 显示包含TCP标志的封包。

tcp.flags.syn == 0x02     显示包含TCP SYN标志的封包。

tcp.window_size == 0 && tcp.flags.reset != 1

精讲Wireshark过滤器表达式原理 通讯总线 第12张

      使用这些原则和示例,用户可以构建复杂的过滤器表达式来精确地捕获和分析网络流量。当然实际应用中还有很多其他高级用法,我们后续将继续讲解哈!

结束语

    

精讲Wireshark过滤器表达式原理 通讯总线 第13张

本篇文章来源于: 风云说通信

本文地址:https://www.roc666.com/2024/08/industry/bus/wireshark-2.html
版权声明:欢迎分享本文,转载请保留出处!

发表评论


表情