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
本文完!