Outis:自动化渗透测试侦察框架,整合Nuclei、Naabu等工具链

news2026/4/27 16:29:28
1. 项目概述一个被低估的渗透测试利器如果你在网络安全领域特别是渗透测试和红队行动中摸爬滚打过一段时间大概率会听说过或者用过像nmap、masscan这样的端口扫描器也用过gobuster、dirsearch这样的目录枚举工具。这些工具都是单点作战的利器但当你面对一个庞大的资产列表需要执行一套标准化的、从信息收集到漏洞初筛的完整流程时手动串联这些工具、处理各种输出格式、去重、整理报告就成了一个极其繁琐且容易出错的过程。这正是SySS-Research/outis这个项目试图解决的问题。它不是一个全新的扫描器而是一个高度集成化的“侦察与枚举框架”其核心价值在于将多个顶尖的开源工具我们称之为“引擎”无缝整合到一个统一的、可扩展的流水线中。我第一次接触outis是在一次大型的内部红队演练中。当时我们需要在短时间内对上千个域名和IP段进行初步的资产梳理和脆弱性迹象排查。手动操作根本不现实而一些商业化的自动化平台又过于笨重且不灵活。outis的出现就像是为这种场景量身定制的瑞士军刀。它用 Go 语言编写这意味着单文件分发、跨平台兼容性好而且执行效率非常高。它的设计哲学很清晰“配置即流水线”。你通过一个 YAML 配置文件定义好输入目标、选择要启用的引擎比如用naabu做端口扫描用httpx做 HTTP 服务探测用nuclei做漏洞检测并设置好引擎之间的数据传递关系outis就会自动帮你调度执行并将所有结果汇总到一个结构化的输出文件如 JSON中。简单来说outis扮演了“编排者”和“粘合剂”的角色。它把那些我们日常在命令行里敲来敲去的工具变成了一个自动化流水线上的标准化“工人”让渗透测试的初期侦察阶段变得前所未有的高效和可重复。对于安全顾问、企业内部的蓝队资产梳理人员甚至是漏洞赏金猎人outis都能显著提升工作效率让你把精力更集中在深度分析和漏洞利用上而不是浪费在工具链的拼接和数据处理上。2. 核心架构与设计哲学解析2.1 引擎化与流水线设计outis最核心的设计思想就是“引擎Engine”和“流水线Pipeline”。理解这两个概念是玩转outis的关键。引擎是什么在outis的语境下一个引擎就是对某个特定安全工具如nmap,subfinder,httpx的一层封装。outis本身并不重复造轮子去实现端口扫描或子域名枚举的算法而是专注于如何更好地调用和管理这些现有的、经过社区验证的顶级工具。每个引擎都负责三件事接受输入从上一个引擎的输出、或从初始目标列表中获取数据。执行任务调用对应的命令行工具并传递合适的参数。产生输出将工具的执行结果解析、格式化成一个outis内部统一的、结构化的数据格式通常是 JSON 对象传递给下一个引擎或作为最终输出。例如naabu引擎接收一个 IP 地址或域名运行naabu命令进行端口扫描输出格式为{“host“: “192.168.1.1“, “ports“: [“80“, “443“, “8080“]}。httpx引擎则接收一个host:port组合探测 HTTP/HTTPS 服务并提取标题、状态码、技术栈等信息输出更丰富的资产画像。流水线则是将这些引擎按照逻辑顺序串联起来的“工作流”。一个典型的侦察流水线可能是输入目标-subfinder引擎(发现子域名) -dnsx引擎(解析子域名到IP) -naabu引擎(对IP进行端口扫描) -httpx引擎(对开放的HTTP/HTTPS服务进行探测) -nuclei引擎(对探测到的Web服务进行漏洞扫描)。outis的配置文件就是用来定义这条流水线的。这种设计的巨大优势在于灵活性和可复用性。你可以为不同的场景创建不同的配置文件一个用于快速的子域名枚举一个用于深度的全网段端口扫描另一个用于针对Web资产的漏洞普查。只需切换配置文件就能执行完全不同的任务流。2.2 配置驱动与声明式语法outis强烈依赖于 YAML 配置文件。这是一种“声明式”的配置方法你只需要告诉它“你想要什么”What而不需要详细指定“每一步怎么做”How。这降低了使用门槛也使得配置易于版本管理和团队共享。一个最简化的配置文件骨架如下# config.yaml input: - “example.com“ - “192.168.1.0/24“ engines: - name: naabu enabled: true # 引擎特定参数 args: - “-p“ - “80,443,8080,8443“ - name: httpx enabled: true # 指定输入来自上一个引擎 (naabu) 的输出 input-from: naabu args: - “-title“ - “-tech-detect“ - “-status-code“ output: file: “results.json“ format: “json“在这个配置中我定义了两个目标一个域名和一个网段。流水线包含两个引擎先运行naabu对目标进行指定端口的扫描然后将naabu发现的host:port结果作为输入传递给httpx进行详细的HTTP探测。最终所有结果会汇总输出到results.json文件。注意outis要求你系统中已经正确安装并配置了它所依赖的引擎工具如naabu,httpx等且这些工具的可执行文件位于系统的 PATH 环境变量中或者你需要在配置文件中通过path字段指定其绝对路径。这是新手最容易踩的坑——配置文件写好了一运行却报“找不到命令”。2.3 输入与输出的标准化outis的另一个精妙之处在于其内部的数据流标准化。不同工具的输出格式千奇百怪outis通过为每个引擎编写“适配器”将这些输出统一转换为内部标准格式。这带来了两个好处引擎间无缝协作naabu输出的端口列表可以直接被httpx引擎理解并用作输入无需你手动写脚本进行格式转换和拼接。统一的结果视图无论流水线多么复杂最终所有引擎产生的结果都会被收集、去重、合并生成一个结构化的总输出文件如JSON。这个文件包含了从子域名、IP、开放端口、Web服务信息到漏洞发现的所有数据极大方便了后续的数据分析和报告生成。你可以把这个过程想象成一个标准化零件的装配线。每个引擎工人都按照统一的标准接口加工零件数据并将半成品传递给下一个工位。最终流水线末端产出的是一件完整的、规格统一的产品结构化报告。3. 核心引擎详解与实战配置outis的强大建立在它所集成的众多优秀引擎之上。下面我们来深入剖析几个最常用、最核心的引擎并分享实战中的配置心得。3.1 信息收集引擎构建目标画像在渗透测试中信息收集的广度直接决定了攻击面的宽度。outis在此环节集成了多个神器。subfinder dnsx子域名发现黄金组合subfinder引擎用于被动收集子域名它聚合了数十个公开的数据源和API。配置时关键在于管理API密钥和优化速率限制。- name: subfinder enabled: true args: - “-all“ # 使用所有可用的源 - “-silent“ # 如果你有某些服务的API密钥可以在这里通过环境变量或配置文件传递 # env: # - “GITHUB_TOKENyour_token_here“subfinder输出的是一堆域名。紧接着你需要dnsx引擎来解析这些域名获取真实的IP地址并过滤掉无法解析的“死”域名。- name: dnsx enabled: true input-from: subfinder # 输入来自subfinder的输出 args: - “-a“ # 查询A记录 - “-aaaa“ # 查询AAAA记录 (IPv6) - “-resp“ # 输出解析结果 - “-silent“实操心得对于大型目标直接使用-all参数可能会产生巨量的子域名导致解析步骤非常缓慢。我的经验是在初次侦察时可以先使用-sources参数指定几个速度快、质量高的源如alienvault, certspotter, hackertarget。在深度评估时再启用所有源。另外将dnsx的解析结果进行去重outis会自动做一部分只保留唯一的IP能显著减少后续端口扫描的目标数量。naabu闪电般的端口扫描器naabu是projectdiscovery出品的端口扫描器以速度快著称。在outis中配置它你需要仔细考虑端口列表和扫描策略。- name: naabu enabled: true input-from: dnsx # 对dnsx解析出的IP进行扫描 args: - “-p“ # 指定端口 - “-“ # “-“ 代表扫描前1000个常见端口 # 更精细的配置示例 # - “-p 80,443,8080,8443,22,21,25,3306,5432,6379,27017“ # 常用Web和管理端口 - “-rate 1000“ # 发包速率根据网络环境调整 - “-scan-all-ips“ # 如果输入是域名解析所有IP并扫描 - “-silent“端口选择策略盲目扫描全端口-p -在时间充裕时可行但通常效率低下。我通常会准备多个端口列表配置文件web_ports.txt:80,443,8080,8443,8888,9000等常见Web端口。service_ports.txt:22,21,23,25,110,143,3306,3389,5432,6379,27017等常见服务端口。top1000.txt: 保存naabu默认的top1000端口列表。 然后根据任务目标选择-p - -p web_ports.txt,service_ports.txt。速率控制-rate参数至关重要。在内网扫描可以设置到5000甚至更高在对公网资产扫描时建议从1000开始避免触发目标系统的安全防护或导致自己的IP被屏蔽。3.2 服务探测与指纹识别引擎发现开放端口后下一步是识别其上运行的服务。httpx是这个领域的王者。httpxWeb资产探测与指纹收集httpx不仅能快速探测HTTP/HTTPS服务还能提取大量有价值的信息。- name: httpx enabled: true input-from: naabu # 对naabu发现的host:port进行探测 args: - “-title“ # 提取页面标题 - “-status-code“ # 获取HTTP状态码 - “-tech-detect“ # 技术栈识别 (Wappalyzer) - “-content-length“ # 获取响应体长度 - “-web-server“ # 获取Web服务器类型 (如nginx, Apache) - “-cdn“ # 检测是否使用CDN - “-probe“ # 主动探测默认也会 - “-silent“ - “-timeout 5“ # 超时设置对于大规模扫描建议3-5秒 - “-threads 50“ # 并发线程数httpx的输出是后续漏洞扫描和手工测试的宝贵入口点。-tech-detect识别出的框架如Vue.js, Spring Boot, WordPress能让你立刻知道该使用哪些针对性的测试工具和漏洞库。注意事项高并发-threads虽然快但可能对目标网站造成压力在合规测试中需谨慎。-timeout设置过短会导致漏报设置过长会极大拖慢扫描速度。需要根据网络质量和目标响应情况做权衡。我通常在对内部资产扫描时使用-threads 100和-timeout 3对外部资产则用-threads 30和-timeout 5。3.3 漏洞检测引擎自动化初筛信息收集和服务识别完成后自动化漏洞扫描是提升效率的下一步。nuclei是当前社区最活跃、模板最丰富的漏洞扫描器与outis集成得天衣无缝。nuclei基于模板的精准漏洞扫描nuclei通过成千上万的YAML模板来定义检测规则从信息泄露到RCE覆盖范围极广。- name: nuclei enabled: true input-from: httpx # 对httpx确认存活的Web服务进行扫描 args: - “-silent“ - “-severity low,medium,high,critical“ # 设置扫描的严重等级 - “-tags cve,misconfig,exposure“ # 按标签过滤模板 - “-etags sandbox,deprecated“ # 排除某些标签的模板 - “-rate-limit 150“ # 限制每秒请求数避免被封 - “-bulk-size 25“ # 每次批量扫描的目标数 - “-timeout 5“ # 使用特定模板或目录 # - “-t /path/to/custom-templates“ # 自定义模板 # - “-t exposures/configs“ # 只扫描信息泄露类模板模板管理nuclei的强大在于其模板库但全量扫描不指定-tags或-t会产生海量请求且大部分不相关。强烈建议根据httpx识别出的技术栈进行针对性扫描。例如如果httpx识别出WordPress你可以在后续流水线中增加一个专门针对 WordPress 的nuclei引擎使用-tags wordpress。或者如果目标是 Java 应用则使用-tags java,spring。速率与风险控制-rate-limit和-bulk-size是保护你和目标系统的关键参数。对生产环境进行未经授权的全速扫描是危险且不道德的。即使在授权测试中也应从较低的速率开始如50-100观察系统负载和响应后再调整。整合工作流示例 一个完整的、针对Web资产的侦察与初扫流水线配置可能如下所示。这个配置实现了从域名到漏洞发现的端到端自动化# web_recon_pipeline.yaml input: - “target-company.com“ engines: # 阶段1子域名枚举与解析 - name: subfinder enabled: true args: [“-silent“, “-sources alienvault,certspotter“] - name: dnsx enabled: true input-from: subfinder args: [“-a“, “-resp“, “-silent“] # 阶段2端口扫描 (聚焦Web端口) - name: naabu enabled: true input-from: dnsx args: - “-p“ - “80,443,8080,8443,8888,9000,9443“ - “-rate 2000“ - “-scan-all-ips“ - “-silent“ # 阶段3HTTP服务深度探测 - name: httpx enabled: true input-from: naabu args: - “-title“ - “-status-code“ - “-tech-detect“ - “-web-server“ - “-cdn“ - “-silent“ - “-threads 30“ - “-timeout 5“ # 阶段4通用中高危漏洞扫描 - name: nuclei enabled: true input-from: httpx args: - “-silent“ - “-severity medium,high,critical“ - “-rate-limit 100“ - “-timeout 5“ output: file: “web_assets_full.json“ format: “json“运行这个流水线只需要一条命令outis -c web_recon_pipeline.yaml。接下来你可以去喝杯咖啡回来时一个包含所有子域名、IP、开放端口、Web服务指纹和潜在中高危漏洞的完整报告就已经在web_assets_full.json里等着你了。4. 高级用法与性能调优当你能熟练配置基础流水线后下一步就是追求更高效、更精准的扫描。这涉及到输入处理、引擎并行、结果过滤等高级技巧。4.1 输入源的灵活运用outis的input字段非常灵活不仅支持直接写入目标还支持从文件读取和从标准输入stdin读取。从文件读取目标列表这是处理大批量目标的标准做法。input: file: “targets.txt“ # 每行一个目标可以是域名、IP或CIDR在targets.txt中你可以混合各种格式example.com 192.168.1.1 10.0.0.0/24 app.staging.example.com使用管道Pipe传递数据outis完美支持 Unix 哲学。你可以用其他工具生成目标列表直接通过管道传给outis。# 使用 assetfinder 发现子域名然后交给outis进行端口扫描和HTTP探测 assetfinder --subs-only target.com | outis -c port_and_http_scan.yaml -i -对应的配置文件port_and_http_scan.yaml中input部分可以留空或使用-占位因为输入会从管道来。# port_and_http_scan.yaml input: [] # 或 input: [“-“] engines: - name: naabu ... - name: httpx input-from: naabu ...这种组合方式赋予了outis无限的扩展性你可以用任何你喜欢的工具如amass,findomain来做初步的信息收集然后将结果交给outis进行标准化的后续处理。4.2 条件执行与引擎过滤不是所有引擎都需要对所有目标运行。outis允许你根据条件启用或跳过某些引擎这能节省大量时间。基于端口的条件过滤例如我们只想对开放了80或443端口的目标运行httpx和nuclei。这可以通过在引擎配置中添加filters实现。- name: httpx enabled: true input-from: naabu # 只处理端口为80或443的输入 filters: - “port in (80, 443)“ args: [...]这里的port是naabu引擎输出数据中的一个字段。outis会在将数据传递给httpx之前先应用这个过滤器。基于协议或服务的过滤更智能的做法是利用httpx初步探测的结果来决定是否进行深度漏洞扫描。- name: nuclei-critical enabled: true input-from: httpx # 只对httpx探测成功有响应且技术栈包含java或spring的目标运行关键漏洞扫描 filters: - “status_code ! 0“ # httpx探测成功 - “contains(technologies, ‘java‘) or contains(technologies, ‘spring‘)“ args: - “-severity critical“ - “-tags java,spring“ - ...这个配置实现了一个精准的、分层的扫描策略先广撒网httpx再针对高价值目标特定技术栈进行重点打击nuclei-critical。4.3 性能调优与资源管理处理成千上万个目标时性能调优至关重要。主要从并发控制、超时设置和资源限制入手。引擎级并发像httpx、nuclei这类网络请求密集型引擎其内置的-threads或-c参数控制着其自身的并发数。设置过高会耗尽本地网络资源或导致误报超时设置过低则速度太慢。一个经验公式是线程数 ≈ 本地CPU核心数 * 2 到 * 5。对于网络I/O密集型任务可以稍高一些。全局并发与队列outis本身也会管理引擎间的数据流。如果前一个引擎如naabu产生结果的速度远快于后一个引擎如nuclei的处理速度数据会在内存中堆积。目前outis的版本对此控制有限因此更需要通过限制上游引擎的产出如naabu的-rate和下游引擎的消费速度如nuclei的-rate-limit来取得平衡。超时设置每个引擎的超时参数如-timeout必须合理。对于内部网络可以设置得短一些2-3秒对于公网目标尤其是海外目标建议设置为5-10秒。超时设置直接影响扫描的完整性和耗时。结果去重与合并outis在输出最终结果前会进行一定程度的去重但复杂的流水线仍可能产生大量重复条目例如同一个IP通过不同域名解析出来。在扫描结束后使用简单的脚本对输出的JSON文件进行二次处理按IP和端口去重能让你最终的分析列表更加清爽。一个调优后的高性能配置片段可能如下engines: - name: naabu args: - “-p 80,443,8080,8443“ - “-rate 5000“ # 内网高速扫描 - “-timeout 2“ - “-retries 1“ - name: httpx input-from: naabu args: - “-threads 100“ # 高并发探测 - “-timeout 3“ - “-retries 1“ - name: nuclei input-from: httpx filters: - “status_code 200“ # 只扫描返回200 OK的 args: - “-severity high,critical“ - “-rate-limit 50“ # 限制请求速率保护目标 - “-bulk-size 10“ - “-timeout 5“ - “-retries 1“5. 实战问题排查与经验沉淀即使配置再完美在实际运行中也会遇到各种问题。下面是我在大量使用outis过程中积累的一些常见问题与解决方案。5.1 常见错误与解决方法问题现象可能原因解决方案运行时报错executable file not found in $PATH依赖的引擎工具如naabu, httpx未安装或不在PATH中。1. 使用go install或从项目Release页面下载安装所有依赖工具。2. 或将工具的可执行文件放到系统PATH包含的目录如/usr/local/bin。3. 或在outis配置文件中为每个引擎指定绝对路径path: /home/user/go/bin/naabu。扫描速度异常缓慢1. 网络延迟高或目标响应慢。2. 并发数设置过低。3. 上游引擎如subfinder产生目标太多下游引擎如nuclei处理不过来。1. 适当增加超时时间-timeout。2. 逐步提高httpx、nuclei的线程数-threads。3. 在流水线中增加过滤器减少进入耗时引擎的目标数量。例如先快速扫描常用端口只对开放端口的目标进行深度扫描。结果文件JSON为空或内容不全1. 输出文件路径权限问题。2. 前面的引擎没有产生有效输出导致后续引擎无输入。3. 过滤器条件过于严格过滤掉了所有结果。1. 检查输出目录是否有写权限。2. 单独运行每个引擎的命令确认其能正常工作并产生输出。例如运行echo “example.com“ | naabu -p 80,443 -silent测试naabu。3. 放宽或暂时移除过滤器条件确认数据流是否正常。nuclei扫描结果很少甚至没有1. 模板路径不正确或模板未更新。2. 扫描速率限制过低或超时太短。3. 目标确实不存在相关漏洞。1. 运行nuclei -update-templates更新模板。2. 检查nuclei引擎的-rate-limit和-timeout参数适当调整。3. 尝试对一个已知存在漏洞的测试靶场如vulhub中的环境运行扫描验证nuclei配置是否正确。内存或CPU占用过高1. 并发数设置过高。2. 同时扫描的目标数量巨大。3.nuclei使用大量模板进行扫描。1. 降低各引擎的线程/并发参数。2. 将大的目标列表拆分成多个小文件分批运行outis。3. 为nuclei使用-tags或-t参数限定扫描范围避免使用全量模板。5.2 结果分析与后续集成outis输出的 JSON 文件是一个宝库但原始 JSON 可读性不强。你需要将其转化为更易读的报告或导入其他工具。1. 使用jq进行快速分析jq是处理 JSON 的神器。以下是一些常用命令# 1. 提取所有发现的主机:端口 cat results.json | jq -r .hosts[] | .host “:“ (.port|tostring)‘ | sort -u # 2. 提取所有HTTP服务的标题和状态码 cat results.json | jq -r ‘.hosts[] | select(.http ! null) | “\(.host):\(.port) - [\(.http.status_code)] \(.http.title)“‘ # 3. 统计不同Web服务器和技术栈的出现次数 cat results.json | jq -r ‘.hosts[] | select(.http ! null) | .http.web_server‘ | sort | uniq -c | sort -nr cat results.json | jq -r ‘.hosts[] | select(.http ! null) | .http.technologies[]?‘ | sort | uniq -c | sort -nr # 4. 提取所有nuclei发现的漏洞按严重等级排序 cat results.json | jq -r ‘.hosts[] | select(.vulnerabilities ! null) | .vulnerabilities[] | “[\(.severity)] \(.name) - \(.host)“‘ | sort2. 生成HTML报告你可以编写一个简单的 Python 脚本使用Jinja2模板库将 JSON 结果渲染成一个美观的 HTML 报告包含表格、统计图表等便于交付和演示。3. 集成到其他平台将outis的 JSON 输出导入到其他安全平台可以形成更完整的工作流。例如可以将发现的资产导入到DefectDojo进行漏洞生命周期管理或者导入到ElasticsearchKibana中构建一个实时的资产安全监控看板。5.3 我的独家避坑技巧配置文件版本化为你常用的扫描场景如“外部Web资产普查”、“内部网络快速扫描”、“WordPress专项检测”创建不同的配置文件web_scan.yaml,internal_quick.yaml,wordpress.yaml并使用 Git 进行管理。这保证了任务的可重复性和团队协作的一致性。分阶段扫描不要试图用一个庞大的配置文件解决所有问题。将扫描分为多个阶段阶段一快速发现使用subfinderdnsxnaabu仅常见端口快速绘制资产地图。阶段二服务识别对阶段一的结果运行httpx识别出所有Web服务。阶段三针对性扫描根据httpx识别出的技术栈运行多个并行的、针对性的nuclei扫描如一个针对java一个针对wordpress。 这样做的好处是如果阶段三的某个扫描因故中断你不需要从头开始。善用-silent模式几乎所有引擎都支持-silent参数它只输出最终结果不打印进度条等冗余信息。在将outis集成到自动化脚本或后台运行时务必使用此模式避免日志混乱。关注社区更新outis及其依赖的引擎尤其是nuclei更新非常活跃。定期使用go install github.com/projectdiscovery/nuclei/v2/cmd/nucleilatest等方式更新工具并关注outis项目本身的 Release新版本往往会带来性能提升、新引擎支持或重要的Bug修复。合法性是底线outis是一个极其强大的工具但能力越大责任越大。绝对不要在未获得明确书面授权的情况下对任何不属于你或你未被授权测试的网络和系统进行扫描。未经授权的扫描不仅是非法的还可能对目标系统造成损害。始终在合规的范围内使用它例如在授权的渗透测试、漏洞赏金计划或对你完全掌控的内部实验室环境中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2555340.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;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…