news 2026/9/27 1:17:25

Wireshark抓包分析实战指南:从入门到排障与漏洞定位

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Wireshark抓包分析实战指南:从入门到排障与漏洞定位

做网络故障排查这几年,我背包里永远会放一个绿色小鲨鱼图标。Wireshark 抓包及分析,看起来是软件操作,实际上是一整套解决问题的方法论。它能捕获真实链路里的每一个数据包,帮你看清 TCP 握手到底卡在哪一步、某个 IP 在发什么协议、USB 外设上报了什么数据,甚至能从一份 pcapng 里反推出攻击者的来源地址。无论你是刚接触网络的小白、运维工程师,还是做安全取证的技术人员,抓包能力都能让你的排障效率直接翻倍。这篇内容我会按“装好—抓包—分析—进阶—排坑”的顺序,把手上的经验分享出来,覆盖安装驱动选型、固定 IP 抓包、时间显示、GeoIP、VLAN 报文过滤这些大家问得最多的点。内容偏实操,你照着做就能把 Wireshark 用起来。

1. 装好它没那么简单:安装、权限与接口识别

1.1 下载渠道与驱动选型:Npcap 和 WinPcap 怎么选

安装 Wireshark 看起来点击下一步就行,但驱动选型这一环很容易埋坑。首先下载渠道我强烈建议直接走官网,搜索 Wireshark 官网下载页,选 Windows x64 Installer 或者 macOS/Linux 对应版本,不要在下载站随便拿一个整合包。官方的安装包干净、依赖清晰,后续出问题也容易排查。

Windows 安装过程中会提示安装 Npcap 或 WinPcap。Npcap 是新主流,基于老牌 WinPcap 发展而来,支持回环接口抓包、支持 802.1Q VLAN 标签识别,Wireshark 的很多新特性都依赖它。如果你日常做协议分析、抓网页流量、排查 TCP 问题,直接选 Npcap 就行。安装 Npcap 时默认勾选“安装时添加 Wireshark 支持”和“限制 Npcap 驱动仅限管理员使用”,个人环境里保持默认问题不大。

但如果你要配合华为 eNSP 模拟器做网络仿真,情况就不一样了。eNSP 对 WinPcap 4.1.3 的兼容性最稳,很多拓扑启动失败、抓包无法调用 Wireshark 的问题,最后都追溯到新版 Npcap 上。我的习惯是准备两台机器或者双系统:日常抓包用 Npcap,专门跑 eNSP 的虚拟机里装 WinPcap 4.1.3。注意不要在同一环境里同时装 WinPcap 和 Npcap,两个驱动服务会打架,轻则接口列表变空白,重则网卡数据异常。

Linux 用户用包管理器安装最省事。Debian/Ubuntu 系统可以执行sudo apt install wireshark,安装时询问是否允许非 root 用户抓包,选“是”即可。CentOS/RHEL 系列用yum install wireshark,部分桌面系统还要额外安装wireshark-gnome图形包。macOS 除了官方 dmg 安装包,也能通过 Homebrew 安装,但要注意安装包会自动配置 BPF 权限,首次打开需要授权“ChmodBPF”启动项。整个过程不复杂,但每一步驱动选择都会影响后面抓包结果,值得认真对待。

1.2 捕获接口空白的排查思路

打开 Wireshark 后主界面接口列表一片空白,这是新手问得最多的一个问题。原因是多方面的,但九成情况出在权限或者驱动服务上。Windows 上你首先要用管理员身份运行 Wireshark,右键图标选择“以管理员身份运行”,否则 Wireshark 拿不到访问网卡驱动的权限,接口列表自然显示不出来。除了 Wireshark 主程序,dumpcap进程也需要权限,Windows 下通常随主程序一起获得。

如果管理员权限没问题,检查 Npcap 服务状态。在服务管理器里找到Npcap,确认启动类型为自动且正在运行,安装驱动后可能需要重启系统。老版本 WinPcap 同样如此,安装完必须重启才能让驱动生效。Linux 下权限问题更典型,普通用户执行抓包会直接报“There are no interfaces”,实际上就是没权限。把当前用户加入wireshark组或者给 dumpcap 添加能力位即可解决,例如执行sudo setcap cap_net_raw,cap_net_admin=eip /usr/bin/dumpcap。macOS 上一般是第一次安装后没有重新插拔网卡,或者没有在系统设置里允许 BPF 过滤器,重新插拔并授权一般能解决。

还有一种容易被忽略的情况:你的物理网卡确实没接入网络。虚拟机的虚拟网卡未连接、无线网卡处于禁用状态,或者远程桌面会话里没有可用的抓包接口,都会导致列表空白。建议先在系统网络连接里确认有没有可用的以太网或 Wi-Fi,再用 Wireshark 看接口。接口空白不是工具坏了,而是链路环境没有准备好。

1.3 配套工具链:eNSP、VirtualBox、WinPcap 的组合

如果你需要做路由交换实验,大概率会接触 eNSP。eNSP 是网络设备仿真平台,它的抓包功能依赖 VirtualBox 虚拟化环境和 WinPcap 驱动,所以安装组合非常讲究。常见的稳定组合是:eNSP 主程序 + VirtualBox 5.2.x + WinPcap 4.1.3 + Wireshark 系列安装包。VirtualBox 不要装 6.0 以上版本,eNSP 对高版本支持不好,容易导致路由器启动失败;WinPcap 也不要换成 Npcap,否则抓包接口无法调用。

安装顺序上,我建议先装 VirtualBox 5.2.x 和 WinPcap 4.1.3,再装 eNSP,最后装 Wireshark。如果后装 VirtualBox 或 WinPcap,eNSP 启动时会找不到虚拟网卡,设备状态一直显示红色。eNSP 启动设备后,右键接口选择“开始抓包”,它会自动调用 Wireshark 打开对应接口的抓包窗口,你在模拟器里产生的 OSPF、VLAN、静态路由报文都能被完整捕获。这套链路的体验和真机抓包几乎一致,很适合网络工程师练手。配合《Wireshark网络分析就这么简单》这类书看,你能很快把协议字段和实际报文对上号。

2. 第一次抓包:从接口选择到分钟级上手

2.1 挑对口:本机回环、混杂模式与固定 IP 抓法

安装完成后进入主界面,你会看到一列网卡接口。无线网卡通常叫WLAN或Wi-Fi,有线网卡叫Ethernet或eth0,还有一个Adapter for loopback traffic capture是 Npcap 提供的回环接口,专门抓本机程序自己发出的流量。如果是想抓别人访问本机服务的流量,一般选有线或 Wi-Fi 接口;如果是想抓本机进程之间的通信,比如本地调试 Web 服务,就必须选回环接口。

接口选择旁边有“捕获”选项,里面可以勾选混杂模式。混杂模式的意思是让网卡接收所有经过的数据包,而不只是发给自己的。有线网络里,连接在同一交换机上的设备可能看到别人的广播和组播;但在无线网络里,即使开了混杂模式,也很难抓到其他客户端的真实数据,因为 Wi-Fi 加密后只有知道密钥才能解出内容。所以抓包前要明白:混杂模式是必要前提,但能不能抓到具体数据还取决于物理链路是否允许。

很多朋友问怎么抓取固定 IP 的数据。这其实分两种做法。第一种是事后过滤,用显示过滤器ip.addr == 192.168.1.100把包筛出来;第二种是事前限制,在抓包选项底部的“捕获过滤器”里输入host 192.168.1.100,这样只记录这个 IP 的进出流量。推荐长时间抓包用第二种,因为它能显著减少文件大小,避免磁盘瞬间写满。捕获过滤器用的是 BPF 语法,比如只抓某个 IP 的 80 端口流量可以写成host 192.168.1.100 and tcp port 80。记住捕获过滤器是“闸门”,显示过滤器是“筛子”,两者用途不同,不能混着用。

2.2 显示过滤器:抓完以后怎么筛

抓包很容易,抓完几百上千个包后怎么快速找到目标才是关键。Wireshark 的显示过滤器是一个独立的表达式输入框,位于工具栏下方,输入正确的表达式会变绿,输入错误会变红。它不会删除任何数据包,只是把不符合条件的包隐藏起来,所以你可以放心反复切换过滤条件。

常用的过滤表达式非常多,我挑几个高频的列成表格:

需求显示过滤器
只看某个 IP 的流量ip.addr == 192.168.1.100
只看源 IP 或目的 IPip.src == 192.168.1.100/ip.dst == 192.168.1.100
只看某个 TCP 端口tcp.port == 80
只看 HTTP 请求http.request
只看 DNS 查询dns.flags.response == 0
只看指定协议的包arp/icmp/tcp/udp

除了单条件,还可以通过and、or、not,以及括号组合起来使用。比如要过滤来自192.168.1.100的 HTTP 请求,可以写ip.src == 192.168.1.100 and http.request。条件多了的时候记得用括号分组,Wireshark 的语法和编程语言里的逻辑判断很像,稍微练习几次就能上手。

善用显示过滤器还能帮助你发现异常。比如做安全分析时,用tcp.flags.syn == 1 and tcp.flags.ack == 0就能把所有 SYN 包筛出来,如果发现某个源 IP 在短时间内向大量端口发 SYN,那极可能是在做端口扫描。过滤器本身是静态的,配合统计功能才能发挥最大价值,这一块稍后会展开。

2.3 时间显示:把时间戳调成北京时间

抓包文件里每一帧都有时间戳,但 Wireshark 默认显示的是相对时间,也就是从第一个包开始计算的秒数。这样方便观察包间隔,但如果你想定位“某一次故障发生在 14:30”,就需要切换成绝对时间。在菜单栏点击视图 -> 时间显示格式 -> 日期和时间,报文列表就会从相对时间切换成“年-月-日 时:分:秒”的格式。

至于怎么调整成北京时间,关键在于 Wireshark 会把存储的数据包时间还原成操作系统当前时区的时间。如果你的系统时区已经是 UTC+8,显示格式选择“日期和时间”后看到的就是北京时间;如果看到的时间和实际差了 8 小时,不是 Wireshark 的问题,而是系统时区没有设为北京时间。Windows 在“设置 -> 时间和语言”里把时区改为 UTC+8,macOS 在“日期与时间”里勾选自动设定,然后重启 Wireshark 即可。

还有一种更精细的做法,就是自定义时间列。打开编辑 -> 首选项 -> 外观 -> 列,添加一个类型为“时间”的列,然后在字段格式里选YYYY-MM-DD HH:MM:SS。这样即使主界面显示的是相对时间,你也能保留一列标准的北京时间。时间显示看起来只是小细节,但做跨设备日志关联时,几秒的偏差都可能导致错误结论,所以一定要先把时区搞对。

3. 抓住之后怎么分析:三次握手、可视化和流量定位

3.1 用过滤器定位 TCP 三次握手

TCP 三次握手是网络排障的必修课。Wireshark 抓包时,一个完整的握手过程应该是:客户端发 SYN,服务端回 SYN+ACK,客户端再回 ACK。通过显示过滤器可以精确地把三步分别调出来。

第一步,筛选纯 SYN 包,也就是客户端发起的连接请求:

tcp.flags.syn == 1 && tcp.flags.ack == 0

第二步,查看服务端回应的 SYN+ACK:

tcp.flags.syn == 1 && tcp.flags.ack == 1

第三步,查看最后一个 ACK 确认包:

tcp.flags.syn == 0 && tcp.flags.ack == 1 && tcp.len == 0

tcp.len == 0是为了排除那些带数据的 ACK 包,这样筛出来的 ACK 基本就是握手阶段的第三次确认。如果你不想一条条过滤,也可以直接右键任意 TCP 包,选择“追踪 TCP 流”,Wireshark 会把整条连接的所有包按顺序还原,异常一目了然。

实际排障时,我经常遇到三种情况。只有 SYN 没有 SYN+ACK,说明服务端可能没监听端口,或者中间防火墙丢弃了报文;有 SYN+ACK 但没有最后一个 ACK,说明客户端收到响应后没有正常回包,可能是客户端本地防火墙拦截,也可能是连接被外部重置;还有一种常见情况是 SYN 包没选好过滤条件,被大量 SYN+ACK 干扰,需要先看源和目的地址。掌握三次握手不仅能验证服务是否正常,很多 HTTPS、SSH 连接超时的问题,都能在这里找到答案。

3.2 可视化:流量图、I/O 图和会话统计

很多人觉得 Wireshark 只有命令行级别的表格界面,其实它的统计功能做得相当直观。菜单栏的“统计”里藏着流量图、I/O 图、会话、端点等可视化工具。

流量图(Flow Graph)会把抓到的包按照时间顺序展示成连线,一个主机一个主机排开,协议和标志位都用不同颜色区分。想看 TCP 三次握手时,这个图比列表直观得多,你能看到第几秒来了 SYN,第几秒回了 SYN+ACK,有没有重传。I/O 图则适合看吞吐量趋势,默认以时间为横轴、包数为纵轴,波浪突然拉高说明流量激增,一般配合过滤器看某个 IP 或者端口。

会话统计(Conversations)和端点统计(Endpoints)也很实用。Conversations 列出 TCP/UDP 地址对之间的包数和字节数,按字节数排序就能快速找出“谁和谁聊得最多”。Endpoints 更直接,按照 IP 、MAC 或端口维度列出所有通信端点,外部IP和内网IP一眼分辨。安全取证时,通常先打开 Endpoints,把流量最大的几个 IP 记录下来,再进 Conversations 观察连接模式,再进入 TCP 流看具体内容,这是分析 pcapng 抓包文件的标准路径。

3.3 实战案例:在 capture.pcapng 里定位黑客 IP

拿到一个 capture.pcapng 文件后怎么找到黑客的 IP?我习惯按三步走。第一步,打开文件后,先到“统计 -> 端点”看 IPv4 端点。排序后你会发现某个 IP 的包数量和字节数远超其他主机,这个 IP 很可能就是嫌疑对象。如果 pcapng 捕获的是内网流量,攻击者通常会和被攻击主机产生大量连接,排序非常靠前。

第二步,到“统计 -> 会话”里观察连接模式。黑客扫描或者攻击时,会从一个源 IP 连接目标主机的多个端口。你可以用过滤条件tcp.flags.syn == 1 && tcp.flags.ack == 0把 SYN 包筛出来,统计源 IP 和目标端口。如果某个 IP 在几秒内向大量目的端口发起 SYN 请求,那基本可以断定是端口扫描行为,这个 IP 就是黑客的来源地址。

第三步,追踪具体 TCP 流确认攻击行为。锁定嫌疑连接后,右键 -> 追踪 TCP 流,查看应用层数据。比如看到大量不断重复的登录尝试,就能定位是暴力破解;看到异常大的下载流量,可能是数据泄露;看到很多反向 shell 指令特征,那就不是普通扫描而是直接攻击。这里要强调的是,做这套分析需要有相应授权,比如靶机环境或者自己的实验网络,千万不要在未授权环境下抓取和还原他人通信内容。

3.4 进阶定位:GeoIP 库与 VLAN 报文

Wireshark 抓包里的 IP 地址可以进一步映射到地理位置,这就是 GeoIP 功能。首次使用前需要配置 GeoIP 数据库。通常做法是到 MaxMind 官方网站注册免费账号,下载 GeoLite2 City 和 GeoLite2 ASN 的 mmdb 文件。然后在 Wireshark 里打开编辑 -> 首选项 -> 高级,搜索geoip_db_paths,把 mmdb 文件所在目录填进去,保存后重启 Wireshark。配置完成后,选中任意 IP 报文,在左侧协议树中就能看到IP Geolocation信息,包括国家、城市和经纬度。

GeoIP 对安全分析师很有价值,比如发现内网主机与某个境外地址频繁通信,或者攻击源 IP 全部集中在某个地区,心里大概就有数了。不过免费数据库精度有限,城市级别经常有误差,只能作为参考线索,不能当作精确证据。

再聊 VLAN 报文抓取。如果你抓的包里没出现 VLAN 标签,首先检查抓包接口的类型和交换机链路。物理接口通常默认处理 untag 报文,如果要从 Trunk 口抓带 tag 的报文,得让交换机的镜像口完整保留 VLAN 标记。Windows 上安装 Npcap 时如果选择支持 802.1Q VLAN,抓包时就能直接看到802.1Q Virtual LAN头部;Linux 下可能需要用 vlan 子接口或 raw socket 方式。Wireshark 过滤 VOAN 报文很简单,显示过滤器输入vlan就能看到所有带标签的帧,想精确只看某个 VLAN 就写vlan.id == 100。记住vlan这个字段名,很多人都会拼错。

4. 场景化抓包:USB 流量与仿真环境配合

4.1 USB 抓包其实没那么神秘

除了网卡,Wireshark 也能抓 USB 总线流量。这个功能平时用的人少,但分析键盘鼠标输入、USB 存储设备枚举、无线网卡和恶意 USB 设备时会非常有用。Windows 上,Wireshark 安装时可以勾选 USBPcap,安装完成后接口列表里会出现 USBPcap 相关的入口。如果没看到,重新运行安装包,在组件选择里补上即可。Linux 上需要先加载usbmon模块,执行sudo modprobe usbmon,然后接口列表里会出现usbmon1、usbmon2等接口,分别对应不同的 USB 总线。

抓 USB 流量时同样可以用显示过滤器来缩小范围。比如按设备类型过滤可以写usb.bus_id == 1,按厂商 ID 和产品 ID 过滤写usb.idVendor == 0x1d6b && usb.idProduct == 0x0002。如果你不知道 ID,可以先不设任何过滤器抓几秒钟,然后在数据包里查看 Vendor ID 和 Product ID 字段,再回头写过滤条件。USB 抓包需要管理员或 root 权限,普通用户打开接口时往往是空的。分析结果时,你不需要逐字节读 USB 协议,重点看 URB 提交、完成状态和数据长度,就能判断设备是否在正常收发数据。

4.2 eNSP 里的联动抓包与版本匹配

eNSP 环境里抓包和物理网络略有不同,但整体思路一致。确保安装了 eNSP、VirtualBox 5.2.x、WinPcap 4.1.3、Wireshark 之后,在 eNSP 拓扑中启动设备,右键路由器或交换机的某个接口选择“抓包”,系统会自动拉起 Wireshark 并对该虚拟接口的流量进行捕获。注意 eNSP 的抓包只针对虚拟链路,不是抓物理网卡上的真实流量,所以你能抓到 OSFP、VLAN、STP 这些设备间协议,但抓不到你电脑访问网页的流量。

有一个常见的坑:eNSP 启动设备后提示“启动失败”或者“未找到主机”。这一般是 VirtualBox 版本太高,或者 WinPcap 未正确启动。我的建议是严格匹配版本,VirtualBox 不要超过 5.2.x,WinPcap 固定用 4.1.3。装好以后先用 eNSP 自带的“注册”工具检查一下依赖,再启动一台路由器测试。抓包的同时,可以打开 Wireshark 的过滤栏输入ospf或vlan.id == 10,观察协议报文的状态机变化。这套方法对备考网络认证或者理解协议原理非常有帮助,比单纯看教科书直观得多。

5. 常见问题与排查技巧实录

5.1 高频问题速查表

我把实际工作中踩过的坑整理成一张表,按问题、原因、处理方式三列,方便大家直接对照。

问题常见原因处理方式
接口列表空白未以管理员运行 / Npcap 服务未启动右键管理员运行,检查 Npcap 服务,重启系统
抓不到回环流量没选择回环接口或驱动不支持选择 Npcap 的 loopback 接口
只看到一堆杂包,找不到目标没设置显示过滤器用ip.addr、tcp.port缩小范围
时间显示差 8 小时系统时区不是 UTC+8设置时区为北京时间,或 Wireshark 时间列自定义格式
抓不到 VLAN 标签链路未保留 tag / 驱动未开启 VLAN交换机镜像口配置 Trunk,Npcap 勾选 802.1Q 支持
抓包文件巨大采集范围太大、未用捕获过滤器使用 BPF 捕获过滤器,环形缓冲多文件存储
无法解码 TLS 流量没有会话密钥设置 RSA 私钥或者 SSLKEYLOGFILE 环境变量
USB 抓包接口空白未加载 usbmon / 未安装 USBPcapLinux 执行sudo modprobe usbmon,Windows 补装 USBPcap
eNSP 无法启动抓包驱动不匹配降级 VirtualBox 5.2.x,使用 WinPcap 4.1.3

这张表只是起点,现实中问题总是组合出现。排查顺序建议是:先看权限,再看驱动,最后看过滤器和链路的实际状态,这样能少走很多弯路。

5.2 几条亲历的致命细节

第一条,过滤器别总想着“一步到位”。抓包分析时很多人想写一个超复杂的过滤表达式,结果语法错误或者漏掉重要协议。我的习惯是分步来,先确定协议,再确定地址和端口,逐步缩小范围。比如先来一个ip.addr == 192.168.1.100,确认流量存在,再加and tcp.port == 80,再继续深入。多写几个简单条件组合,比强行背复杂正则实用得多。

第二条,长时间抓包一定要做文件切割。默认情况下 Wireshark 会把所有包写进一个文件,抓一小时可能产生几个 GB,打开和查找都变成灾难。可以在捕获选项中设置“输出到多个文件”,按每个文件 1024KB 或按分钟切割,同时启用环形缓冲保留最近 10 个文件。这样既不影响抓包效果,也不怕磁盘写满。

第三条,别把捕获过滤器和显示过滤器搞混。捕获过滤器在开始抓包时必须确定,显示过滤器是事后加上的。如果条件写错,你的捕获文件里根本不会存在对应报文,这时候显示过滤器再怎么写都是白搭。所以抓包前想清楚:是“我知道目标是谁,只要这部分流量”,还是“先全量抓下来再说”。前者用捕获过滤器,后者用显示过滤器。

第四条,分析结果时重视着色规则但不沉迷着色。Wireshark 默认给 TCP 重传、坏包、HTTP 请求都上了颜色,新手很容易被颜色牵着鼻子走。我见过有人看到一片红色就断定网络故障,结果只是正常的 TCP 快速重传。一定要展开报文逐一确认,颜色只是提示,不是结论。

第五条,抓包前先想清楚合规边界。不管是在公司网络还是实验环境,只能抓自己有权限分析的数据。尤其分析 pcapng 文件涉及他人 IP 和应用层内容时,不要上传到不受控制的平台,也不要传播敏感报文。Wireshark 是排障工具,用好它是基础,用对它是职业素养。

根据我个人经验,遇到任何抓包异常,先看权限,再看过滤条件,最后看驱动版本,这顺序能省掉 80% 的弯路。希望这份笔记能帮你少踩几个坑,更早地感受到“把流量看透”的乐趣。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/27 1:17:22

扫码模组接口选型指南:USB-HID、VCP、TTL、RS232与RS485深度解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/27 1:17:20

Quartus 18.1 安装到跑通工程全流程:FPGA开发环境搭建指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/27 1:16:47

基于MediaPipe的动作识别Python毕业设计源码实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/27 1:16:45

一周AI大模型与Agent进展:机器人推理、视频生成与部署实战盘点

周五下午,我把这周社区里刷屏的AI大模型和Agent相关讨论又翻了一遍,挑出16个值得看一眼的新进展。它们从机器人推理一路铺到视频生成,跨度不小,但有一个共同点:都在解决“从演示到能用”之间的那一段距离。不管是做算法…

作者头像 李华
网站建设 2026/9/27 1:16:26

嵌入式偶发故障排查三道防线:换机、录屏、固件对照

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/27 1:16:14

STM32CubeMX 6.14核心升级与工程配置实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华