问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Wireshark过滤器详解:从入门到精通的完整指南

创作时间:
作者:
@小白创作中心

Wireshark过滤器详解:从入门到精通的完整指南

引用
CSDN
1.
https://m.blog.csdn.net/shonencc/article/details/144270799

Wireshark过滤器是数据包分析的核心功能之一,掌握其使用方法对于网络工程师和安全分析师至关重要。本文将从过滤器的基本概念、原理、分类,到具体的使用方法和高级技巧,为您详细讲解Wireshark过滤器的方方面面。

前言

年底工作繁忙,终于抽出时间来更新这篇关于Wireshark过滤器的重要内容。Wireshark过滤器是工具使用的核心之一,掌握它能让你在数据包分析中事半功倍。本文将从过滤器介绍(概念、原理、分类)、过滤语句编写(基础语法)、过滤器使用举例(实践)到高级过滤技巧(提升)四个方面,帮助你全面掌握Wireshark过滤技术。

一、了解Wireshark过滤器概念、原理及分类

首先来看看Wireshark是如何捕获到数据包的:

  1. 如果是在网络拓扑中间的网元设备上抓包,为了不影响生产环境,我们一般是在交换机上做端口镜像,复制一份流量到分析主机的网卡;
  2. 如果是在网络终端设备上抓包(终端设备直接安装Wireshark),则无需做镜像,直接选择网卡进行抓包即可(网卡需设置为混杂模式);
  3. 在安装Wireshark时,需要安装npcap(winpcap)或Linux系统的libpcap。这是一个抓包工具(或者说是抓包驱动、数据包分析库),它真正负责抓包,然后再把包给到Wireshark来进行分析;
  4. 当网络流量特别大时,分析主机可能无法承受。这时,我们就只能选择性放弃一些不关注的数据包,只抓需要的数据包,来减小流量过大给分析主机带来的负担。这时,我们就要对流量进行“过滤”处理,即“捕获过滤”。

Wireshark的过滤器分为两种:捕获过滤器显示过滤器

捕获过滤器是在流量大的场景下使用,直接用BPF(Berkley Packet Filter)进行过滤,语法相对简单直接,但不能满足复杂的过滤场景。显示过滤器则能满足各种复杂的过滤需求,分析师可以根据各种不同的分析场景对已捕获的数据包进行筛选。

特别需要说明的是:Wireshark的捕获过滤器和显示过滤器使用的是2套不同的语法。捕获过滤器使用BPF语法,显示过滤器则使用Wireshark自主开发的一套更加复杂、灵活的过滤语法。

国产的科来过滤器有三种:分析(就是捕获)、显示和存储过滤器,都是用的同一套语法。科来过滤器功能不如Wireshark强大,但有些过滤条件设置更简单,还可以针对端点、会话和日志等进行过滤。

二、过滤语句编写

(一)捕获过滤器

捕获过滤器的位置:在Wireshark打开时,选择网卡的上方,可以输入捕获过滤条件。捕获过滤器语法规则如下:

捕获过滤的应用场景不多,不用过于浪费时间。Wireshark不是企业级的产品,一般是临时分析故障等才使用,不要想着用一台服务器直接安装Wireshark,部署到园区网或数据中心的固定位置去进行监控,这是一种得不偿失的选择。如果真有需要长期监控,请考虑企业级的流量分析解决方案。

(二)显示过滤器

显示过滤器的位置:分析主界面的最上方。点击前面蓝色的图标,可以选择Wireshark集成好的一些显示过滤语句:

显示过滤语法规则:

显示过滤器可以这样写:

  • ip.addr == 192.168.0.1
  • ip.len le 1500

比较运算符:

  • ==
  • le

逻辑运算符:

  • and
  • or
  • not

显示过滤器的背景颜色:当输入的过滤条件错误(或不完整)时,背景色为红色;当输入的过滤条件正确时,背景色变味绿色!

还有更简单的过滤条件生成办法:

  • 在Wireshark的数据包分析视图中,选中某个数据包的某一个指标,点击鼠标右键,右键菜单中有“作为过滤器应用”和“准备作为过滤器”;
  • 在数据包的字段解码视图中,选中具体的一个字段点右键,可以直接生成针对某个字段的过滤语句;
  • 点击显示过滤器右侧的加号,对过滤条件进行命名,下一次就可以直接选择调用了。

三、过滤器使用举例

(1)mac地址的过滤表达式写法

用“:”,“-”,“.”做分隔符号都行。

(2)IPv4过滤表达式写法

支持无类域间路由CIDR,直接过滤网段。

(3)IPv6过滤表达式写法

和IPv4类似。

(4)过滤字符串

字符串需要用双引号扩起来,可以使用lower()取小写字母这种函数匹配ASCii码的文本。可以用转义字符\x和\d表示16进制和十进制(匹配数据包原始数据)。

可以用“contains”做精确的字符串匹配;可以用“matches”做字符串模糊匹配,并且matches支持用正则输入过滤条件。

(5)时间过滤

时间格式如上图例所示,照着写就行了。

四、高级过滤技巧

(1)切片操作符

用[ ]进行切片操作,第一个数字代表从这个字段开始位置的偏移值(可以取负数,代表从末尾开始倒着数偏移值),第二个数字代表要取的字节数。

(2)“层”操作符

简单说,就是如果一个数据包(比如VPN),有2层2IP包头,在过滤IP地址的时候默认以第一层为准,那我们需要过滤内层的IP地址信息呢?答案就是添加“层”操作符,如下:

ip.addr#2 == 192.168.30.40

(3)成员操作符

成员很好理解,比如我要过滤端口80、443和8080,如果按之前的讲解,过滤表达式应该写为:

tcp.port == 80 || tcp.port == 443 || tcp.port == 8080

用成员操作符,可以这样写:

tcp.port in {80, 443, 8080}

(4)运算符号

没啥多说的,就是注意使用“-”减号时,必须在被减数和减号中间有个空格,否则会报错。

(5)函数

找出http.server字段为“apache”的数据包:

lower(http.server) contains "apache";

过滤出http请求中uri长度大于100的请求包:

len(http.request.uri) > 100;

将含有超过2个IP的数据包过滤出来:

count(ip.addr) > 2;

把帧号匹配13579的过滤出来:

string(frame.number) matches "[13579]$"

把目的IP在172.16.X.X-172.31.X.X范围中,且以255结尾的IP包过滤出来:

string(ip.dst) matches r"^172\.(1[6-9]|2[0-9]|3[0-1])\.[0-9]{1,3}\.255"

将tcp的源端口及目的端口都不大于1024的包过滤出来:

max(tcp.srcport, tcp.dstport) <= 1024

(6)字段引用

可以在表达式中直接引用一个字段的值。

(7)字段名改变

有的协议名或字段名进行了更新,以新的名字还是旧的名字为标准,要以wireshark版本更新为标准。

(8)协议名不明确的

如果协议名和字段取值都为"fc",则它会优先按协议名进行识别过滤。如果想把字段中“fc”过虑出来,请用分片的方式过滤,如:

frame[10:] contains .fc or frame[10] == :fc

总结

本文详细介绍了Wireshark过滤器的使用方法和高级技巧,希望能帮助你掌握这一重要功能。临近年底,大家都在冲绩效,行内工作也是忙得不行,下次更新不知道是什么时候了,大家且看且珍惜!如果觉得本文对你有用,不要忘了收藏点赞!

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号