Wireshark 是一款开源软件,最早由 Gerald Combs 在 1998 年创建,原名 Ethereal。2006 年,由于商标问题,Ethereal 更名为 Wireshark。作为一个网络协议分析器,Wireshark 能够捕获网络接口上的数据包,并提供详细的解码和分析功能。Wireshark 支持多种操作系统,包括 Windows、macOS 和 Linux。
目录:
Wireshark 的主要功能包括:
Wireshark 的界面设计简洁明了,主要包括以下几个部分:
Wireshark 中的过滤器是其最强大和最常用的功能之一。通过使用过滤器,用户可以从庞大的数据包捕获中筛选出感兴趣的特定数据包,从而更高效地进行网络分析和故障排除。
抓包过滤是指在数据包捕获和分析过程中,使用特定的规则和条件,筛选出满足条件的数据包。Wireshark 提供了两种主要的过滤器类型:显示过滤器和捕获过滤器。
Wireshark 支持两种类型的过滤器:显示过滤器和捕获过滤器。它们的语法和使用方式有所不同。
下面我们详细介绍一下这两种过滤器。
显示过滤器是 Wireshark 中用于在数据包捕获之后,根据特定条件筛选和显示数据包的工具。显示过滤器的语法相对简单,使用字段名、运算符和值来构建过滤条件。
显示过滤器的基础语法包括:
示例:
- ip.addr == 192.168.1.1
-
- tcp.port == 80
-
- http
-
一些常用的显示过滤器包括:
- ip.src == 192.168.3.9
-
本机地址是192.168.3.9
- ip.dst == 192.168.3.66
-
- ip.addr == 192.168.3.9
-
- tcp.srcport == 80
-
- tcp.dstport == 443
-
- tcp.port == 80
-
- http
-
- tcp
-
- icmp
-
- !icmp
-
HTTP 流量是网络分析中常见的一部分,通过显示过滤器可以筛选和分析特定的 HTTP 请求和响应。
- http
-
- http.host == "www.example.com"
-
- http.request.uri contains "/login"
-
- http.request.method == "POST"
-
- http.response.code == 200
-
DNS 流量也是网络分析中常见的内容,通过显示过滤器可以筛选和分析 DNS 查询和响应。
- dns
-
- dns.qry.name == "example.com"
-
- dns.qry.type == 1 // A记录查询
-
- dns.flags.rcode == 0 // No error
-
- dns.a == 192.168.1.1
-
TCP 是传输层的主要协议之一,通过显示过滤器可以筛选和分析特定的 TCP 会话和流量。
- tcp
-
- tcp.srcport == 80
-
- tcp.dstport == 443
-
- tcp.flags.syn == 1 // SYN 包
-
- tcp.stream eq 1
-
UDP 是传输层的另一主要协议,通过显示过滤器可以筛选和分析特定的 UDP 会话和流量。
- udp
-
- udp.srcport == 53
-
- udp.dstport == 123
-
- udp.stream eq 1
-
ICMP 是网络层的重要协议,通过显示过滤器可以筛选和分析特定的 ICMP 报文。
- icmp
-
- icmp.type == 8 // Echo Request
-
- icmp.code == 0
-
- icmp.ident == 0x1234
-
- icmp.seq == 0x1
-
显示过滤器还支持更复杂的条件组合和表达式,例如:
- ip.src == 192.168.3.9 && tcp.dstport == 8080
-
- frame.len >= 100 && frame.len <= 200
-
- http.request.uri matches ".*login.*"
-
- (ip.src == 192.168.3.9 && tcp.dstport == 80) || (ip.src == 192.168.3.66 && tcp.dstport == 443)
-
捕获过滤器在数据包捕获过程中起作用,通过预先定义的条件,仅捕获满足条件的数据包。捕获过滤器使用 Berkeley Packet Filter (BPF) 语法,能够在捕获时减少不必要的数据包,提升捕获效率。
捕获过滤器的基础语法包括:
💡捕获过滤器最终的效果和显示过滤器差不多,所以下面的截图会少点,大家可以自己尝试。
示例:
- host 192.168.3.9
-
- port 80
-
- tcp
-
一些常用的捕获过滤器包括:
- host 192.168.1.1
-
- src host 192.168.1.1
-
- dst host 192.168.3.66
-
- port 80
-
- src port 80
-
- dst port 443
-
- tcp
-
- udp
-
- icmp
-
- not host 192.168.1.1
-
- not port 80
-
通过捕获过滤器筛选 HTTP 流量可以减少捕获的数据量,尤其是在只需要分析特定的 HTTP 请求和响应时。
- tcp port 80
-
- tcp port 80 and host www.example.com
-
通过捕获过滤器筛选 DNS 流量,可以有效地捕获特定的 DNS 查询和响应。
- udp port 53
-
- udp port 53 and host example.com
-
通过捕获过滤器筛选 TCP 流量,可以捕获特定会话和特定条件下的 TCP 报文。
- tcp
-
- src port 80
-
- dst port 443
-
- tcp[tcpflags] & tcp-syn != 0 // SYN 包
-
通过捕获过滤器筛选 UDP 流量,可以捕获特定会话和特定条件下的 UDP 报文。
- udp
-
- src port 53
-
- dst port 123
-
通过捕获过滤器筛选 ICMP 流量,可以捕获特定类型和特定条件下的 ICMP 报文。
- icmp
-
- icmp[icmptype] == icmp-echo
-
- icmp[icmpcode] == 0
-
捕获过滤器支持更复杂的条件组合和表达式,例如:
- src host 192.168.1.1 and dst port 80
-
- net 192.168.1.0/24
-
- (src host 192.168.1.1 and dst port 80) or (src host 192.168.1.2 and dst port 443)
-
- tcp[tcpflags] & tcp-syn != 0
-
Wireshark 过滤器不仅可以用于简单的条件筛选,还支持更复杂的逻辑运算和组合,从而实现更精细的过滤。
通过组合多个过滤条件,可以实现更复杂的筛选逻辑。
- ip.src == 192.168.1.1 && tcp.dstport == 80
-
- ip.src == 192.168.1.1 || tcp.dstport == 443
-
- ip.src == 192.168.1.1 && (tcp.dstport == 80 || tcp.dstport == 443)
-
Wireshark 的显示过滤器支持正则表达式,可以用来匹配更复杂的字符串模式。
- http.request.uri matches ".*login.*"
-
- http.request.header.User-Agent matches ".*Mozilla.*"
-
通过检查字段是否存在,可以筛选出包含特定字段的数据包。
- ip.options
-
- tcp.options
-
Wireshark 过滤器支持通过偏移量和掩码筛选特定位的数据。
- tcp.flags & 0x02 != 0
-
- tcp[13] & 0x02 != 0
-
本文完!