Wireshark基本使用
先选择接口,设置过滤器,然后再开始捕获,暂停
1. 选择接口
计算机有很多接口,如蓝牙、以太网、WiFi。选择接口,Wireshark只捕获该接口的报文,这样,避免抓取多余报文,干扰分析。
打开软件,双击接口,如下图所示:
重新选择接口。停止捕获,点击捕获 --> 选项,或者直接点击工具栏的快捷键,勾选所需的接口,开始捕获。
2. 过滤器
使用过滤规则,可以筛选出想要的网络数据包。在过滤器框中输入过滤规则,如下图:
过滤器规则的名字,可以点击协议的字段,在状态栏会显示对应的规则名字,也可以将字段拖曳到过滤器中,如下图:
2.1 协议过滤
直接输入协议名称。
2.2 通过域名查询
2.2.1 过滤DNS域名查询
(1)过滤DNS请求中的域名
使用 dns.qry.name
过滤特定域名的DNS请求:
dns.qry.name == "example.com"
使用 contains
匹配包含特定字符串的域名(如子域名):
dns.qry.name contains "example"
(2)过滤DNS响应中的域名
使用dns.resp.name
过滤特定域名的DNS响应:
dns.resp.name == "example.com"
2.2.2 HTTP(s)
(1)HTTP
若域名出现在 HTTP 请求头(如 Host
字段)中,使用 http.host
:
http.host == "example.com"
(2)HTTPS
对于 HTTPS 流量,域名可能出现在TLS握手的SNI扩展中:
tls.handshake.extensions_server_name == "example.com"
2.2.3 模糊匹配与反向过滤
(1)模糊匹配
使用通配符或正则表达式,使用matches
关键字:
dns.qry.name matches "\\.example\\.com$" # 匹配以 .example.com 结尾的域名
(2)反向过滤
排除特定域名的流量,使用!
:
!(dns.qry.name == "example.com")
2.3 端口过滤
过滤特定端口的数据包,也可以具体到源端口或目标端口:
tcp.port == 80
tcp.srcport == 80
tcp.dstport == 80
过滤大于某个端口的数据包:
tcp.port >= 60000
2.4 IP地址过滤
过滤IP地址为特定值的数据包,也可以具体到源IP地址或目标IP地址:
过滤源IP地址或目标IP地址为特定值的数据包:
ip.addr == 210.34.128.33
ip.src == 210.34.128.33
ip.dst == 210.34.128.33
3. 表达式
通过逻辑操作符,可以组合更复杂的过滤规则,更精准找到数据包。
3.1 逻辑运算符
操作符 | 类C风格 | 描述 | 示例 | ||
---|---|---|---|---|---|
and | && | 逻辑与 | ip.src == 210.34.128.33 and tcp.flags.fin==1 | ||
or | \ | \ | 逻辑或 | ip.src == 210.34.128.33 or ip.src==192.1.1.1 | |
xor | ^^ | 逻辑异或 | tr.dst0:3 == 0.6.29 xor tr.src0:3 == 0.6.29 | ||
not | ! | 逻辑非 | ! udp | ||
... | 子序列/切片操作符 | eth.src:4 == 00:00:83:00 | |||
in | 设定集合里的成员 | tcp.port in {443, 4430..4434} |
(1)子系列
类似于Python中的切片用法。举例,过滤http请求方法,前三个字符为GET的报文:
http.request.method[0:3]=="GET"
指定源mac地址前三位,举例:
eth.src[0-2] == 38:22:d6
3.2 比较操作符
操作符 | 别名 | 类C风格 | 描述 | 示例 | ||
---|---|---|---|---|---|---|
eq | any_eq | == | 等于 | ip.src == 210.34.128.33 | ||
ne | all_ne | != | 不等于 | ip.src != 210.34.128.33 | ||
all_eq | === | 全等 | ip.src === 210.34.128.33 | |||
any_ne | !== | 不全等 | ip.src !== 210.34.128.33 | |||
gt | > | 大于 | frame.len > 10 | |||
lt | < | 小于 | frame.len < 128 | |||
ge | >= | 大于或等于 | frame.len ge 0x100 | |||
le | <= | 小于或等于 | frame.len <= 0x20 | |||
contains | 协议、字段或切片包含某个值 | sip.To contains "a1762" | ||||
matches | ~ | 使用Perl正则(PCRE)匹配一个协议或文本字段 | http.host matches "acme.(org\ | com\ | net)" |
(1)不全等
如果过滤字段有一个不等于,那么就满足条件,举例:
tcp.port !== 80
排除了源端口和目的端口的都是80的情况。
(2)matches
匹配模式,支持Perl正则,匹配一个协议或文本字段,比contains更灵活。
3.3 层级操作符
层级操作符#
后面跟十进制数,将字段限制到协议栈中的某一层。
4. 保存捕获内容
保存捕获内容,便于后续分析。先暂停捕获,开始 --> 保存。