常用的Wireshark过滤技巧

IP地址过滤器(IP Address Filter)
这是最基础的过滤器, 用于筛选特定IP地址的数据包. 在Wireshark中, 可以通过输入
ip.addr == [IP地址]来实现. 例如, 如果想查看与IP地址5.1.81.68有关的所有数据包, 可以输入ip.addr == 5.1.81.68.- 源地址和目标地址: 如果只关心源地址或目标地址, 可以使用
ip.src == [IP地址]或ip.dst == [IP地址]. - 拖放功能: 在Wireshark的界面中, 可以直接拖动一个IP地址到过滤器栏, 这样就会自动填充相应的过滤器.
- 源地址和目标地址: 如果只关心源地址或目标地址, 可以使用
子网过滤器(Subnet Filter) 通过使用子网掩码, 可以过滤一个特定的IP地址范围. 例如, 可以使用
ip.addr == 192.168.1.0/24来过滤所有在192.168.1.0到192.168.1.255范围内的IP地址.IPv6过滤器 如果需要过滤IPv6地址, 可以使用
ipv6作为过滤器, 然后从结果中找到感兴趣的地址.统计视图中的过滤 通过进入统计视图(
Statistics -> Endpoints), 可以看到所有的地址, 并可以右键点击一个地址来应用为过滤器.端口号过滤器(Port Number Filter)
这个过滤器用于筛选特定端口号的数据包. 例如,
tcp.port == 80会显示所有使用TCP协议并且端口号为80的数据包.- 多端口过滤: 可以使用
or操作符来过滤多个端口, 例如tcp.port == 80 or tcp.port == 443. - 端口范围过滤: 通过使用
in操作符和大括号, 可以一次性过滤多个端口. 例如,tcp.port in {80, 443, 8000..8005}. - 发送端口过滤:
tcp.srcport == 80 - 接收端口过滤:
tcp.dstport == 80
- 多端口过滤: 可以使用
保存过滤器
Wireshark允许保存常用的过滤器, 以便以后快速使用. 在Wireshark中, 可以保存常用的过滤器表达式并给它们起名字, 以便以后快速使用. 这样, 就不必每次都手动输入复杂的过滤表达式. 以下是如何做到这一点的步骤:
- 输入过滤器: 在Wireshark的顶部工具栏中的" 显示过滤器" 框里输入想保存的过滤表达式.
- 保存过滤器: 旁边有一个小书本图标, 点击它会弹出一个下拉菜单. 选择" 管理显示过滤器(Manage Display Filters)" .
- 添加新过滤器: 在弹出的窗口中, 点击左下角的" +" 按钮来添加一个新的过滤器.
- 命名和定义: 在" 名称(Name)" 字段中输入想给这个过滤器起的名字, 在" 显示过滤器(Display Filter)" 字段中输入或粘贴的过滤表达式.
- 保存: 点击" 确定(OK)" 来保存这个新的过滤器.
- 应用过滤器: 以后, 当想使用这个过滤器时, 可以直接在" 显示过滤器" 框中输入给它起的名字, 或者点击书本图标并从列表中选择它.
TCP会话过滤器(TCP Conversation Filter) 这个过滤器用于查看两个特定端点之间的所有TCP数据包. 这比单独使用IP地址和端口号过滤器更为高级.
- 手动设置: 需要设置两个IP地址和两个端口号来手动创建一个会话过滤器.
- 自动设置: 通过右键单击一个数据包并选择" Follow TCP Stream" , Wireshark会自动设置一个会话过滤器.
多协议过滤(Multi-Protocol Filter) 当想查看多个协议时, 可以使用
or操作符. 例如,tcp or dns会显示所有TCP和DNS协议的数据包.字符串搜索(String Search)
如果想在数据包中查找特定的字符串, 可以使用
contains或matches操作符. 例如,ip contains "London"会查找包含字符串"London"的所有IPv4数据包.matches和contains都是Wireshark过滤器中用于字符串搜索的操作符, 但它们的工作方式有所不同:contains- 功能:
contains用于查找包含特定子字符串的数据包. - 搜索方式: 它执行的是字面匹配, 即直接查找指定的子字符串.
- 示例: 如果使用
http contains "example", Wireshark会找到所有HTTP协议中包含子字符串"example"的数据包.
- 功能:
matches- 功能:
matches用于执行正则表达式匹配. - 搜索方式: 它允许使用正则表达式来定义更复杂的匹配模式.
- 示例: 如果使用
http matches "exa.ple", Wireshark会找到所有HTTP协议中符合正则表达式"exa.ple"的数据包, 这意味着它会匹配"example", "exa1ple", "exa-ple"等.
- 功能:
此外如果想不区分协议, 可以直接制定
eth0 matches "exa.ple"这样可以过滤所有的包.TCP标志位过滤(Tcp Flags Filter)
tcp.analysis.flags是一个在Wireshark中用于过滤TCP分析标志的特殊字段. 这个字段可以帮助识别网络中可能存在的问题, 如重传, 乱序数据包, 窗口更新等. 这些标志是Wireshark在分析TCP流时自动计算和添加的.以下是一些常见的
tcp.analysis.flags选项:- 重传(Retransmission):
tcp.analysis.retransmission - 快速重传(Fast Retransmission):
tcp.analysis.fast_retransmission - 乱序(Out-Of-Order):
tcp.analysis.out_of_order - 重复ACK(Duplicate ACK):
tcp.analysis.duplicate_ack - 窗口更新(Window Update):
tcp.analysis.window_update - 零窗口(Zero Window):
tcp.analysis.zero_window - 零窗口探测(Zero Window Probe):
tcp.analysis.zero_window_probe - 零窗口探测应答(Zero Window Probe Ack):
tcp.analysis.zero_window_probe_ack - 保持活动(Keep Alive):
tcp.analysis.keep_alive - 保持活动应答(Keep Alive Ack):
tcp.analysis.keep_alive_ack
可以直接在Wireshark的显示过滤器框中使用这些标志进行过滤. 例如:
- 想查看所有的TCP重传数据包, 可以使用:
tcp.analysis.retransmission - 只关心快速重传, 可以使用:
tcp.analysis.fast_retransmission - 想查看有多个这样的标志的数据包, 可以组合它们, 如:
tcp.analysis.retransmission || tcp.analysis.fast_retransmission
举个例子
(tcp.analysis.flags) && !(tcp.analysis.window_update)个过滤器在想要查看可能存在问题(如重传或乱序)但不关心窗口更新的TCP数据包时会非常有用.
tcp.analysis.flags: 这部分用于过滤所有带有TCP分析标志的数据包. 这些标志包括重传, 快速重传, 乱序数据包等, 它们是Wireshark在分析TCP流时自动计算和添加的.!(tcp.analysis.window_update): 这部分用于排除所有带有" 窗口更新(Window Update)" 标志的TCP数据包.&&: 这是一个逻辑" 与" 操作符, 用于组合前面两个条件.
- 重传(Retransmission):
tcp payload字节过滤
- 如果我要过滤payload中头两个字节是
0x04 00则tcp.payload[0:2] == 04:00
- 如果我要过滤payload中头两个字节是
保存过滤后的数据(Save Filtered Data)
在Wireshark中, 可以保存过滤后的数据包为一个新的pcap文件. 这是通过" Export Specified Packets" 选项完成的.
对于非常大的pcap文件(如几十GB), Wireshark可能无法有效地处理. 在这种情况下, 建议使用命令行工具, 比如说tshark进行切割.