Wireshark使用指北

2026-02-18

本文参考内容 https://www.bilibili.com/video/BV1ducszjEWs/open in new window

抓包原理

网络环境

哪种网络环境下可以进行抓包?如何使wireshark所在网络终端监听到数据包?

  • 主机环境:直接抓包本机网卡的进出流量。此时无需借助第三方的设备

  • 集线器环境:集线器会坐流量泛洪,连接到同一集线器属于同一冲突域(旧环境,现已淘汰)

    • 集线器处于物理层,因此不认识mac地址、ip地址等内容,每次接收到信号(数据包)都会复制并发送到除接收端口以外的所有其他端口,该内容被称为泛洪
    • 连接集线器的客户端(网络终端)安装了wireshark,就可以收到该集线器内都数据,从而实现抓包
  • 交换机环境:交换机处于数据链路层,由于通过mac表明确目标从而进行通信。同一交换机内的两个网络终端进行通信,第三个网络终端无法直接获取数据包

    • 端口镜像(SPAN):通过此技术,将流量复制一份到第三个网络终端,网卡设置为混杂模式(Wireshark会进行设置),从而实现抓包。大部分网络监控都是使用此模式
    • Arp攻击(Cain&Abel)
      • 当要建立连接时,发送方通过arp协议在局域网内广播询问目标ip网络终端的mac地址
      • 此时可进行arp欺骗,进行响应,污染发送方的arp表,使数据包的目标mac地址变更为第三者
      • 此时交换机会将数据包按照mac地址发送给第三者
      • 第三者收到数据包可进行抓包,再将数据包封装成给真实目标ip的mac,通过交换机发送给真实目标(即数据包在第三者处多绕了一圈)
    • mac泛洪
      • 第三者通过发送大量mac地址(泛洪垃圾包),使交换机的mac表爆表(两个需要建立通信的网络终端的mac地址被挤出mac表)。此时交换机收到未知mac地址的数据包,会进行泛洪(交换机处理未知帧的逻辑)。从而第三者可以监听到数据包并进行抓包

底层架构

Wireshark 自顶向下,通过以下几个内容,对收到的数据包进行采集与分析

  • GTK1/2: GUI。处理用户输入输出
  • Core: 核心引擎。通过函数联动其他模块,如:过滤,插件等
    • Epan
      • Protocol-Tree
      • Dissectors
      • Plugins
      • Display-Filters
  • Wiretap: 格式支持。将数据包分析、解析成对应的文件格式
  • Capture: 抓包引擎(获取比特流)。通过 WinPcap/libpcap 的抓包接口,从不同类型的网络接口(以太网,令牌环网,ATM网等)获取数据包
  • WinPcap/libpcap: Wireshark 抓包所依赖的库文件

常用配置

  • 实用的偏好设置项介绍

    • 文件打开路径:使用打开功能时,默认会进入上次打开的 Session 文件所在路径。可以修改成指定文件夹 Appearance 窗口 -> Open files in
    • 调整 列表窗口、详情窗口、字节流窗口的布局 Appearance -> Layout 窗口
  • 数据包列表增加自定义列:在包详情页中选中列后右键。常用列: Time to live(TTL)、Sequence

  • 时间设置

    • 时间列的显示内容调整: 默认从0开始,显示数据包距离开启监听的秒数。可通过 Menu Bar(菜单栏) -> View -> Time Display Format 进行调整
    • 参考时间: 分析其他数据包与某个指定数据包的时间间隔(可设置多个包为参考时间)。列表指定数据包 -> 右键 -> Set/Unset Time Reference
  • 抓包配置 Menu Bar -> Capture -> Option

    • 混杂模式: Input label -> promiscuous mode 默认开启,可以抓取监听到的所有数据包。否则会丢弃指定接口外的数据包
    • 文件输出 Output label
      • 设置 Session 文件路径与文件名: Capture to a permanent file -> File
      • 同一 Session 多文件保存,需要先手动指定文件名称
        • 开启多文件保存功能: 勾选 Use multiple files
        • 设置每个文件的生成规则: 按照文件大小生成文件 / 时间间隔生成文件
        • 设置文件个数: ring buffer ,与 rotate 日志类似,保持文件个数,丢弃最早的包文件
    • 定时器: 指定规则后自动停止抓包 Options label -> Stop capture automatically after...
      • packets 抓取指定个数包后停止
      • files 抓取到指定文件个数后停止
      • 抓包的 Session 大小
      • 时间
    • 显示选项 Display Options
      • 按类型查看流量曲线 Show capture information during live capture
      • Tips: 为了节省资源,可以将 Display Options 中的选项全部不勾选后抓包
    • 名称解析: Wireshark 默认开启了 MAC 地址的名称解析,可以手动开启 IP 地址、端口号等名称解析
      • MAC 地址解析。查看数据包详情中的 Ethernet 部分,显示 Src / Dst 时携带了 MAC 地址所属的厂商信息。
      • 开启名称解析: 勾选 Options label -> Name Resolution 下方名称解析的选项
      • 手动设置名称: 列表或详情页,IP 地址处右键 -> Edit Resolved Name
      • 查看当前 Session 中的名称解析的映射关系 Menu Bar -> Statistics -> Resolved Addresses
      • Tips: 由于名称解析需要对 MAC、IP、端口进行匹配,存在一定资源开销,流量较大时不建议开启

数据包操作

  • 标记数据包:在列表窗口手动高亮指定的数据包 右键 -> Mark/Unmark Selected 此时选中的数据包变更为黑底白字
  • 修改数据包列表中的配色方案
    • 修改当前 session 中与某个地址的指定类型数据包的配色方案 列表窗口指定数据包右键 -> Colorize Conversation
    • 修改指定类型默认的配色方案 Menu Bar -> View -> Coloring Rules...
    • Tips: 在默认配色方案中,正常的包是浅色背景,有问题的包是红色或黑色等深色背景
  • 数据包注释: 列表窗口指定数据包右键 -> Packet Comments 详情窗口中会出现注释信息 Packet Comments
  • 合并 Session Menu Bar -> File -> Merge...
  • 打印: 将 Session 导出为 PDF Menu Bar -> File -> Print...
  • 导出: 将 Session 中的部分数据包单独保存为一个 Session 文件便于分析
    • 通过过滤器过滤后导出过滤结果 Menu Bar -> File -> Export Specified Packets... -> 选择 All packet 和 Displayed
    • 导出选中的包,左肩选择指定包后 Menu Bar -> File -> Export Specified Packets... -> 选择 Selected packets only
    • 导出标记的包,先对目标数据包右键进行标记后 Menu Bar -> File -> Export Specified Packets... -> 选择 Marked packets only
    • 导出其他格式,如 csv/xml 等(将列表窗口中的数据包信息作为列表导出) Menu Bar -> File -> Export Packet Dissections

常用功能:将指定数据包高亮与导出、Session合并

过滤器

通过指定过滤条件,过滤出满足条件的数据包

过滤条件位置: 抓包配置 Menu Bar -> Capture -> Option 窗口中的 Input label -> Capture filter for selected interfaces

抓包过滤器

只抓取指定规则的数据包

BPF 语法

基于 WinPcap / libpcap 的 Berkeley Packet Filter,通过 BPF 实现只抓取满足规则的数据包

共有以下几种规则

  • 类型: 过滤数值的类型 host net port
  • 方向: 过滤数值出现的方向 src dst
  • 协议: 数据包使用的协议 ether ip tcp udp http ftp
  • 逻辑: 多个过滤条件的逻辑关系 与 &&||!

例子:

  • 过滤 mac: 当某个 mac 的 ip 在变动 (或不确定流量是走 ipv4 或 ipv6) 时,可通过过滤 mac 定位流量
    • ether host 00:88:ca:86:f8:0d
    • ether src host 00:88:ca:86:f8:0d
    • ether dst host 00:88:ca:86:f8:0d
  • 过滤 ip
    • host 192.168.1.1
    • src host 192.168.1.1
    • dst host 192.168.1.1
  • 过滤端口
    • port 80
    • ! port 80
    • port 80
    • port 80
  • 过滤协议: arp icmp
  • 本机 ip (这里假设 ip 是 .2)访问端口 80 的流量 src host 192.168.1.2 && dst port 80
  • 192.168.1.1 与 192.168.1.2 的流量 host 192.168.1.1 || host 192.168.1.2
  • 跳过广播包 !broadcast

显示过滤器

在数据包列表中,通过工具栏处的 display filter 输入框,过滤出满足条件的数据包

显示过滤器语法

  • 比较操作符: == != > < >= <=
  • 逻辑操作符
    • and
    • or
    • xor 有且仅有一个条件满足
    • not
  • IP
    • ip.addr
    • ip.src
    • ip.dst
  • 端口
    • tcp.port
    • tcp.srcport
    • tcp.dstport
    • tcp.flags.syn tcp 数据包中 syn 标志位的值
    • tcp.flags.ack tcp 数据包中 ack 标志位的值
  • 协议
    • arp
    • ip
    • icmp
    • udp
    • tcp
    • bootp
    • dns
    • oicq QQ的数据包

例子:

  • 过滤协议 arp tcp not http
  • 过滤 IP
    • ip.addr == 192.168.1.2
    • ip.src == 192.168.1.2 and ip.dst == 8.8.8.8 本机发给 8.8.8.8 的包
    • ip.addr == 192.168.1.2 and ip.addr == 8.8.8.8 本机与 8.8.8.8 通信的包
  • 端口过滤
    • tcp.port == 4000 tcp 协议且端口是4000的包
    • tcp.flags.syn == 1 or tcp.flags.ack == 1 抓取指定标志位是指定值的 tcp 包

特殊功能

wireshark 在图形化,统计,报表等方面的功能。在遇到故障分析时也常按照这里的流程进行分析

数据流追踪

将某个网络数据流的过程呈现出来

  • 开始抓包 Menu Bar -> Capture -> Options... -> 选择网卡 -> start
  • 在列表中找到目标数据包,右键 -> FollowMenu Bar -> Analyze -> Follow
  • 此时显示过滤器自动生成过滤规则,过滤出该数据流的条件

专家信息说明

与日志等级类似,将数据包按照特定状态 错误(error) 告警(warning) 注意(note) 对话(chat) 说明(comment) 进行分类

专家信息对话框位置 Menu Bar -> Analyze -> Expert Infomation 可用于分析当前网络情况

统计功能

Wireshark 提供了许多统计相关的功能位于 Menu Bar -> Statistics 此处的统计内容均可通过对数据包列表使用显示过滤器,控制统计范围

汇总信息

当前数据包的汇总信息,可通过显示过滤器获取过滤后的数据包汇总信息。信息对话框位于 Menu Bar -> Statistics -> Capture File Properties,包含 Session 文件大小,时间范围,数据包 等信息

协议分层统计

统计通信流量中不同协议所占百分比。以此分析哪种流量占用多,哪种流量占用少,从而分析是否存在病毒等产生了额外流量

对话窗口位于 Menu Bar -> Statistics -> Protocol Hierarchy ,可查看该 Session 中指定协议数据包量所占总数据包量的的百分比,指定协议的字节数占总流量字节数的百分比

数据包长度

将 Session 中的数据包按照长度进行统计 Menu Bar -> Statistics -> Packet Lengths,可用于查看是否存在小型帧攻击或巨型帧攻击(常用于分析是否存在安全攻击)

以下是常见协议的数据包长度

  • Arp: 详情共两部分 Ethernet 与 Arp

    • Ether 以太网协议长度 14 bytes(数据包详情点击 Ethernet 栏,左下角显示大小)
    • Arp 28字节(Arp包详情点击 Address Resolution Protocol 栏)
    • Arp 包共 42 字节(Ether 14 + Arp 28 = 42)
  • ICMP: 详情共三部分 Ethernet、IP、ICMP

    • Ether 14 bytes
    • IP 头部 20 bytes
    • ICMP 80+
    • 共 100+
  • DNS: 共4部分 Ethernet、IPV4、UDP、DNS

    • Ether 14 bytes
    • IP 头部 20 bytes
    • UDP 8 bytes
    • DNS 100+
    • 共 200 左右
  • TCP

    • 控制信息包: 握手,挥手 50-70
    • 数据传输包: 常见 800 - 1000

网络节点 与 会话统计

  • 网络会话 Menu Bar -> Statistics -> Conversations : 统计会话收发的数据包数量与字节。通过此功能可找出哪个会话(IP/端口)最占带宽,从而进行限速等后续所需操作

  • 网络节点 Menu Bar -> Statistics -> Endpoints : 统计会话中每个节点的收发的数据包数量与字节。通过此功能可找出哪个会话(IP/端口)最占带宽,从而进行限速等后续所需操作

图表分析

  • IO 图表(I/O Graphs): 对网络中的吞吐流量进行实时图形显示 Menu Bar -> Statistics ->I/O Graphs 可通过自行增加曲线并配置曲线的过滤条件和 y 轴内容(数据包数量或字节数)查看流量波动情况

  • 数据流图(Flow Graph): 会话通信过程通过图形可视化(例如 TCP 三次握手的箭头图)Menu Bar -> Statistics -> Flow Graph