September 30, 2023
By: Kevin

常用的Wireshark过滤技巧

shark

  1. 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地址到过滤器栏, 这样就会自动填充相应的过滤器.
  2. 子网过滤器(Subnet Filter) 通过使用子网掩码, 可以过滤一个特定的IP地址范围. 例如, 可以使用ip.addr == 192.168.1.0/24来过滤所有在192.168.1.0到192.168.1.255范围内的IP地址.

  3. IPv6过滤器 如果需要过滤IPv6地址, 可以使用ipv6作为过滤器, 然后从结果中找到感兴趣的地址.

  4. 统计视图中的过滤 通过进入统计视图(Statistics -> Endpoints), 可以看到所有的地址, 并可以右键点击一个地址来应用为过滤器.

  5. 端口号过滤器(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
  6. 保存过滤器

    Wireshark允许保存常用的过滤器, 以便以后快速使用. 在Wireshark中, 可以保存常用的过滤器表达式并给它们起名字, 以便以后快速使用. 这样, 就不必每次都手动输入复杂的过滤表达式. 以下是如何做到这一点的步骤:

    1. 输入过滤器: 在Wireshark的顶部工具栏中的" 显示过滤器" 框里输入想保存的过滤表达式.
    2. 保存过滤器: 旁边有一个小书本图标, 点击它会弹出一个下拉菜单. 选择" 管理显示过滤器(Manage Display Filters)" .
    3. 添加新过滤器: 在弹出的窗口中, 点击左下角的" +" 按钮来添加一个新的过滤器.
    4. 命名和定义: 在" 名称(Name)" 字段中输入想给这个过滤器起的名字, 在" 显示过滤器(Display Filter)" 字段中输入或粘贴的过滤表达式.
    5. 保存: 点击" 确定(OK)" 来保存这个新的过滤器.
    6. 应用过滤器: 以后, 当想使用这个过滤器时, 可以直接在" 显示过滤器" 框中输入给它起的名字, 或者点击书本图标并从列表中选择它.
  7. TCP会话过滤器(TCP Conversation Filter) 这个过滤器用于查看两个特定端点之间的所有TCP数据包. 这比单独使用IP地址和端口号过滤器更为高级.

    • 手动设置: 需要设置两个IP地址和两个端口号来手动创建一个会话过滤器.
    • 自动设置: 通过右键单击一个数据包并选择" Follow TCP Stream" , Wireshark会自动设置一个会话过滤器.
  8. 多协议过滤(Multi-Protocol Filter) 当想查看多个协议时, 可以使用or操作符. 例如, tcp or dns会显示所有TCP和DNS协议的数据包.

  9. 字符串搜索(String Search)

    如果想在数据包中查找特定的字符串, 可以使用containsmatches操作符. 例如, ip contains "London"会查找包含字符串"London"的所有IPv4数据包.

    matchescontains都是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" 这样可以过滤所有的包.

  10. TCP标志位过滤(Tcp Flags Filter)

    tcp.analysis.flags 是一个在Wireshark中用于过滤TCP分析标志的特殊字段. 这个字段可以帮助识别网络中可能存在的问题, 如重传, 乱序数据包, 窗口更新等. 这些标志是Wireshark在分析TCP流时自动计算和添加的.

    以下是一些常见的tcp.analysis.flags选项:

    1. 重传(Retransmission): tcp.analysis.retransmission
    2. 快速重传(Fast Retransmission): tcp.analysis.fast_retransmission
    3. 乱序(Out-Of-Order): tcp.analysis.out_of_order
    4. 重复ACK(Duplicate ACK): tcp.analysis.duplicate_ack
    5. 窗口更新(Window Update): tcp.analysis.window_update
    6. 零窗口(Zero Window): tcp.analysis.zero_window
    7. 零窗口探测(Zero Window Probe): tcp.analysis.zero_window_probe
    8. 零窗口探测应答(Zero Window Probe Ack): tcp.analysis.zero_window_probe_ack
    9. 保持活动(Keep Alive): tcp.analysis.keep_alive
    10. 保持活动应答(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数据包.
    • &&: 这是一个逻辑" 与" 操作符, 用于组合前面两个条件.
  11. tcp payload字节过滤

    • 如果我要过滤payload中头两个字节是0x04 00tcp.payload[0:2] == 04:00
  12. 保存过滤后的数据(Save Filtered Data)

    在Wireshark中, 可以保存过滤后的数据包为一个新的pcap文件. 这是通过" Export Specified Packets" 选项完成的.

    对于非常大的pcap文件(如几十GB), Wireshark可能无法有效地处理. 在这种情况下, 建议使用命令行工具, 比如说tshark进行切割.

Tags: tools tcp