基于MCP协议构建AI代码安全沙盒:原理、实现与工程实践

news2026/5/13 6:14:50
1. 项目概述一个为AI模型安全执行代码的“沙盒”工具最近在折腾AI应用开发特别是那些能调用外部工具、执行代码的智能体Agent时一个绕不开的核心问题就是如何让AI安全地运行它生成的代码这可不是杞人忧天。想象一下你让一个AI助手帮你分析数据它“聪明”地写了一段Python脚本结果里面藏了个os.system(rm -rf /)或者尝试访问你的私人文件。轻则数据丢失重则系统被黑。这就是为什么我们需要一个像“沙盒”一样的隔离环境。今天要聊的这个项目Kanak03-star/mcp-safe-run就是为解决这个问题而生的。它是一个基于Model Context Protocol (MCP)的服务器实现核心目标是为AI模型提供一个安全、可控的代码执行环境。简单来说它就像是给AI配了一个专属的、带监控的“编程实验室”AI可以在里面尽情尝试运行代码但所有危险操作都会被限制在实验室的围墙内不会影响到外面的主机系统。无论你是正在构建AI智能体的开发者还是对AI安全运行机制感兴趣的研究者这个项目都提供了一个非常具体且实用的参考方案。它不只是一个理论构想而是包含了资源限制、网络隔离、文件系统隔离等具体实现细节的工程化项目。接下来我会带你深入拆解它的设计思路、核心实现并分享在复现和扩展这类安全沙盒时的实操要点与避坑经验。2. 核心设计思路与架构拆解2.1 为什么是MCP协议层的安全赋能要理解mcp-safe-run首先得弄明白MCP是什么。Model Context Protocol 是由 Anthropic 提出的一种开放协议旨在标准化AI模型与外部工具、数据源之间的交互方式。你可以把它想象成AI世界的“USB标准”或“HTTP协议”。它定义了一套清晰的请求-响应格式让不同的AI模型客户端能够以一种统一、安全的方式调用各种后端服务服务器。mcp-safe-run选择基于MCP来实现是一个非常高明的设计决策主要基于以下几点考量标准化与互操作性MCP正在成为AI工具生态的事实标准之一。基于MCP构建意味着你的安全执行服务器可以轻松被任何兼容MCP的AI客户端如Claude Desktop、各类AI应用框架发现和调用无需为每个客户端编写特定的适配器。关注点分离MCP协议本身处理了工具发现、参数传递、结果返回等通信问题。mcp-safe-run可以专注于最核心的挑战——安全地执行不可信的代码而不用分心去设计通信协议。安全性内置MCP的传输层通常基于SSE或标准IO本身就运行在本地或可信网络。这为沙盒提供了一个相对安全的“入口”避免了复杂的网络认证问题。服务器只需要确保从MCP通道接收到的代码本身被执行时的安全。所以这个项目的整体架构可以概括为一个MCP服务器它对外暴露一个或多个“执行代码”的工具Tools。当AI客户端通过MCP调用这个工具时服务器并非直接在主进程执行代码而是将其派发到一个预先构建好的、高度隔离的容器或沙盒环境中运行并严格监控其资源消耗和行为。2.2 安全沙盒的四大核心支柱一个可靠的代码安全执行环境绝不仅仅是eval()外面加个try-catch。mcp-safe-run的设计必然围绕着以下几个核心安全维度展开这也是我们分析其源码或自行实现时需要重点关注的资源限制防止代码耗尽系统资源。CPU限制代码运行所能使用的CPU时间或核心数。内存设定硬性内存上限一旦超出立即终止进程。运行时间设置超时限制防止无限循环或死锁。磁盘限制其能写入的数据量。文件系统隔离防止代码读取或篡改主机上的敏感文件。只读根目录通常使用一个最小化的Linux镜像作为根文件系统并且以只读方式挂载。临时工作目录为每次代码执行提供一个独立的、可写的临时目录如/tmp/workspace执行结束后自动清理。这是代码读写文件的唯一场所。绑定挂载有时需要提供只读的输入文件如数据集或允许写入特定输出文件这可以通过精心控制的绑定挂载实现。网络隔离防止代码进行未经授权的网络访问。禁用网络最简单的策略是完全禁用容器的网络命名空间使其无法访问任何外部网络。这对于纯计算任务足够。受限网络如果任务需要如下载公开数据包可以配置一个白名单只允许访问特定的、安全的域名或IP地址。用户命名空间隔离在容器内以非root用户如nobody运行代码即使代码存在漏洞其权限也被限制在容器内部。系统调用过滤这是最后一道也是最深层的防线。通过Seccomp等机制可以禁止代码使用危险的系统调用例如clone创建新进程、mount挂载文件系统、ptrace调试其他进程等。mcp-safe-run的具体实现就是在MCP服务器的框架下集成上述一个或多个隔离机制很可能是基于Docker或gVisor等容器运行时来构建这个安全沙盒。3. 关键技术实现与选型分析3.1 容器运行时选型Docker vs. gVisor vs. Firecracker实现沙盒首选的底层技术就是容器。但容器技术也有不同层次的选择各有优劣。Docker (基于 runc)优点生态成熟使用广泛文档丰富。通过配置docker run的参数可以方便地实现资源限制 (--memory,--cpus)、文件系统隔离 (--read-only,-v绑定卷)、网络隔离 (--network none) 和用户隔离 (--user)。缺点安全性相对较弱。尽管有命名空间隔离但容器与主机共享同一个内核。一个内核漏洞可能被利用来“逃逸”出容器。对于运行完全不可信的代码这存在理论风险。适用场景运行来源相对可信、但需要隔离的代码如用户提交的竞赛代码、数据分析脚本。mcp-safe-run如果追求快速实现和稳定很可能采用此方案。gVisor优点谷歌开源的容器沙盒它提供了一个用Go语言实现的、在用户空间运行的“替身内核”。容器内的系统调用会被拦截并由这个替身内核处理再以安全的方式转发给主机内核。这大大减少了攻击面安全性显著高于Docker。缺点性能有一定开销兼容性略差某些依赖特定内核特性的程序可能无法运行。适用场景对安全性要求极高的多租户环境运行不受信任的代码。如果mcp-safe-run定位是面向公开服务或极高安全需求可能会考虑集成gVisor。Firecracker优点AWS开源的微型虚拟机管理器基于KVM。每个沙盒都是一个完整的、极轻量的微型VM拥有独立的内核。安全性是三者中最高的达到了虚拟化级别的隔离。缺点启动速度比容器慢虽然已优化到毫秒级内存开销稍大管理更复杂。适用场景需要最强安全隔离且对冷启动时间不极度敏感的场景如Serverless函数服务。实操心得对于个人项目或内部工具从Docker开始是最务实的选择。它的安全配置如设置--security-opt seccompunconfined来禁用危险系统调用对于防御大多数非恶意代码已经足够。先跑起来再根据实际威胁模型决定是否需要升级到gVisor。3.2 MCP服务器实现剖析MCP服务器通常有两种实现方式SSE服务器或Stdio服务器。mcp-safe-run很可能采用Stdio模式因为它更简单更适合作为命令行工具集成。一个典型的Stdio MCP服务器工作流程如下初始化服务器启动通过标准输入输出与客户端通信。工具列表客户端发送initialize请求服务器返回其提供的工具列表。例如mcp-safe-run可能提供一个名为execute_code的工具。工具调用AI客户端如Claude在需要时会发送tools/call请求指定工具名execute_code和参数如{language: python, code: print(hello)}。安全执行服务器收到请求后核心逻辑在此触发。它不会直接执行代码而是 a. 生成一个唯一的执行IDSession ID。 b. 准备一个隔离环境如启动一个配置好的Docker容器。 c. 将用户代码写入容器内的临时文件。 d. 在容器内使用对应的解释器如python3运行该文件同时严格监控资源时间、内存。 e. 捕获容器的标准输出、标准错误和退出码。结果返回将捕获到的输出、错误信息以及执行状态成功、超时、内存溢出封装成MCP规定的格式通过标准输出返回给客户端。清理无论执行成功与否都必须销毁对应的容器清理所有临时资源防止资源泄漏。# 这是一个高度简化的伪代码逻辑展示MCP服务器处理 execute_code 的核心环节 async def handle_execute_code(language, code): session_id generate_uuid() # 1. 准备沙盒环境 container_spec { image: fpython:3.11-slim, # 根据语言选择镜像 command: [sleep, infinity], # 先保持容器运行 mem_limit: 256m, cpus: 0.5, read_only: True, network_disabled: True, user: nobody, tmpfs: {/tmp/workspace: rw,noexec,nosuid,size64m} # 提供可写的临时空间 } container await docker_client.containers.create(**container_spec) await container.start() try: # 2. 将代码写入容器内的临时文件 code_file_path f/tmp/workspace/{session_id}.py await container.put_archive(/tmp/workspace, create_tar_archive(code_file_path, code)) # 3. 在容器内执行代码并设置超时 exec_cmd [python3, code_file_path] exec_result await container.exec_run(exec_cmd, usernobody, demuxTrue, socketFalse) stdout, stderr exec_result.output exit_code exec_result.exit_code # 4. 处理结果简化实际需处理超时、内存溢出等 if exit_code 0: return {status: success, stdout: stdout.decode(), stderr: stderr.decode()} else: return {status: error, stdout: stdout.decode(), stderr: stderr.decode(), exit_code: exit_code} except asyncio.TimeoutError: return {status: timeout} except Exception as e: return {status: system_error, message: str(e)} finally: # 5. 强制停止并清理容器 await container.stop() await container.remove(forceTrue)3.3 多语言支持与依赖管理一个实用的安全运行环境不可能只支持Python。mcp-safe-run的理想形态是支持主流脚本语言如 Python、JavaScript (Node.js)、Bash甚至 Rust/Go 的脚本模式。实现多语言支持的关键点基础镜像选择为每种语言准备一个最小化的、安全的官方镜像如python:slim、node:alpine。镜像越小攻击面越小启动越快。依赖注入AI写的代码常常需要第三方库。沙盒需要能处理pip install或npm install。策略A安全优先完全禁止网络安装。提供一个预装了常用科学计算库如numpy, pandas的基础镜像。AI只能使用这些库。策略B灵活优先允许在沙盒内进行网络安装但必须严格超时并且可以考虑使用国内镜像源加速。这是一个巨大的安全权衡需要评估pip install过程中执行setup.py的风险。策略C折中允许用户开发者预先定义一个“允许列表”Allow List只有列表内的包及其特定版本可以被安装。这需要维护一个包数据库。注意事项依赖管理是安全沙盒中最棘手的部分之一。我个人的经验是对于内部工具采用策略A固定基础镜像最为稳妥。你可以构建一个自己的Docker镜像里面预装好项目常用的所有库。这样虽然不灵活但绝对安全且执行环境一致。如果AI请求的库不在镜像中直接返回错误提示用户“该环境不支持此库”。4. 从零构建一个简易的MCP安全执行服务器理解了原理我们动手实现一个简化版的safe-run服务器。我们将使用 Python、Docker SDK 和mcp库来构建。4.1 环境准备与依赖安装首先确保你的开发环境满足以下条件安装并运行 Docker Engine。Python 3.10。创建项目目录并安装依赖mkdir mcp-safe-run-demo cd mcp-safe-run-demo python -m venv venv source venv/bin/activate # Linux/macOS # venv\Scripts\activate # Windows pip install docker mcpdocker包是 Docker 的 Python SDK用于控制容器。mcp是社区维护的 Python MCP 协议实现库能帮我们处理协议通信的细节。4.2 核心服务器代码实现我们创建一个server.py文件实现一个支持 Python 代码执行的 MCP 服务器。# server.py import asyncio import json import uuid import tarfile import io from typing import Any, Dict, List import docker from mcp import Server, StdioServerParameters from mcp.types import Tool, TextContent class SafeCodeExecutionServer: def __init__(self): # 初始化Docker客户端和MCP服务器 self.docker_client docker.from_env() self.mcp_server Server() # 注册工具和处理函数 self.mcp_server.tool_handler.register_tool( Tool( nameexecute_python, descriptionExecute Python code in a secure sandbox. Returns stdout, stderr, and exit status., inputSchema{ type: object, properties: { code: {type: string, description: The Python code to execute.}, timeout_seconds: {type: integer, description: Maximum execution time in seconds., default: 30} }, required: [code] } ), self.handle_execute_python ) async def handle_execute_python(self, arguments: Dict[str, Any]) - List[TextContent]: 处理执行Python代码的请求 code arguments.get(code, ) timeout arguments.get(timeout_seconds, 30) session_id str(uuid.uuid4())[:8] print(f[{session_id}] Received code execution request, timeout: {timeout}s) # 1. 创建并启动一个安全的容器 # 使用官方slim镜像减少体积和攻击面 container self.docker_client.containers.create( imagepython:3.11-slim, command[sleep, infinity], # 保持容器运行等待执行命令 mem_limit256m, # 内存限制256MB cpuset_cpus0, # 限制使用第一个CPU核心 network_disabledTrue, # 禁用网络 read_onlyTrue, # 根文件系统只读 usernobody, # 以非特权用户运行 tmpfs{/tmp/workspace: rw,noexec,nosuid,size64m}, # 提供可写的临时空间禁止执行禁止suid namefsafe-run-{session_id}, detachTrue ) container.start() result_text try: # 2. 将代码写入容器的临时文件 # 创建一个包含代码文件的tar内存流 file_content code.encode(utf-8) tar_stream io.BytesIO() with tarfile.open(fileobjtar_stream, modew) as tar: info tarfile.TarInfo(namefcode_{session_id}.py) info.size len(file_content) tar.addfile(info, io.BytesIO(file_content)) tar_stream.seek(0) container.put_archive(/tmp/workspace, tar_stream.read()) # 3. 在容器内执行代码并设置超时 exec_cmd ftimeout {timeout} python3 /tmp/workspace/code_{session_id}.py exec_result container.exec_run( cmd[sh, -c, exec_cmd], usernobody, workdir/tmp/workspace, demuxTrue # 分离stdout和stderr ) exit_code, (stdout_bytes, stderr_bytes) exec_result.exit_code, exec_result.output stdout stdout_bytes.decode(utf-8, errorsignore) if stdout_bytes else stderr stderr_bytes.decode(utf-8, errorsignore) if stderr_bytes else # 4. 解析结果 if exit_code 124: # timeout命令返回124表示超时 status TIMEOUT result_text fExecution timed out after {timeout} seconds. elif exit_code 137: # SIGKILL通常是内存超限被Docker杀死 status MEMORY_LIMIT_EXCEEDED result_text Process was terminated for exceeding memory limit (256MB). elif exit_code ! 0: status RUNTIME_ERROR result_text fExecution failed with exit code {exit_code}.\nStdout:\n{stdout}\nStderr:\n{stderr} else: status SUCCESS result_text fExecution succeeded.\nStdout:\n{stdout} if stderr: result_text f\nStderr:\n{stderr} print(f[{session_id}] Execution finished with status: {status}) except docker.errors.APIError as e: status DOCKER_ERROR result_text fDocker API error: {str(e)} print(f[{session_id}] Docker error: {e}) except Exception as e: status SYSTEM_ERROR result_text fUnexpected system error: {str(e)} print(f[{session_id}] System error: {e}) finally: # 5. 无论如何都尝试清理容器 try: container.stop(timeout1) container.remove() print(f[{session_id}] Container cleaned up.) except: pass # 忽略清理错误 # 6. 按照MCP格式返回结果 return [TextContent(typetext, textresult_text)] async def run(self): 启动MCP服务器Stdio模式 server_params StdioServerParameters() async with self.mcp_server.run_stdio(server_params) as (read_stream, write_stream): print(MCP Safe Run Server started (Stdio mode). Waiting for requests...) await asyncio.Future() # 永久运行 if __name__ __main__: server SafeCodeExecutionServer() asyncio.run(server.run())4.3 配置与运行为了让MCP客户端如Claude Desktop发现我们的服务器需要创建一个配置文件。创建一个claude_desktop_config.json假设用于Claude Desktop{ mcpServers: { safe-run: { command: python, args: [/ABSOLUTE/PATH/TO/YOUR/mcp-safe-run-demo/server.py], env: {} } } }将/ABSOLUTE/PATH/TO/YOUR/替换为你项目server.py的绝对路径。然后将Claude Desktop的配置指向这个文件具体方法参考Claude Desktop文档。重启Claude Desktop后它就能识别到我们的execute_python工具了。现在你可以在Claude中尝试说“请用execute_python工具计算一下1到100的和。” Claude会调用我们的服务器在安全的沙盒中运行sum(range(1, 101))并将结果返回。5. 生产级考量与常见问题排查我们上面实现的是一个极简的演示版本。要用于生产或更严肃的场景还需要考虑很多增强点。5.1 性能优化与资源管理容器池化频繁创建销毁容器开销大。可以维护一个“温暖”的容器池收到请求时分配一个空闲容器用完后重置清理/tmp/workspace而非销毁供下次使用。这能极大提升并发处理能力。资源动态调整根据代码的语言和复杂度动态分配资源。一个简单的print语句不需要256MB内存而一个机器学习任务可能需要更多。可以通过分析代码如导入的库或让调用方指定资源需求来实现。结果缓存对于完全相同的代码输入可以直接返回缓存的结果避免重复执行。注意缓存要有失效策略。5.2 增强安全性与审计系统调用过滤在Docker中可以使用自定义的Seccomp配置文件进一步限制容器内可用的系统调用。# docker-compose.yml 或 create_container 参数示例 security_opt: - seccomp:./security-profile.json行为监控除了资源还可以监控进程树、文件操作序列等。集成像falco这样的运行时安全工具可以检测异常行为如挖矿、暴力破解。完整的审计日志记录每一次执行的元数据会话ID、请求来源客户端、代码哈希、执行参数、资源使用量、开始结束时间、退出状态。这对于调试、计费和事后安全分析至关重要。5.3 常见问题与排查技巧在实际运行中你肯定会遇到各种问题。下面是一个速查表问题现象可能原因排查步骤与解决方案容器启动失败Docker服务未运行镜像不存在资源不足如内存。1.systemctl status docker检查服务。2.docker images检查镜像或设置pull_policy: always。3.docker info查看系统资源。代码执行超时代码包含死循环计算过于复杂超时设置太短。1. 检查代码逻辑。2. 增加timeout_seconds参数。3. 在代码中增加外部中断检查点如果允许。内存不足被杀死代码申请大量内存如处理大文件内存限制设置过低。1. 查看返回状态码是否为137。2. 优化代码内存使用。3. 适当增加mem_limit但需谨慎。无法导入第三方库基础镜像中未安装该库沙盒内禁止网络安装。1. 构建包含常用库的自定义基础镜像。2. 在工具描述中明确告知AI可用的库列表。文件操作失败容器文件系统只读临时目录权限不足。1. 确保代码只写入tmpfs挂载的目录如/tmp/workspace。2. 检查容器是否以nobody用户运行该用户对临时目录应有写权限。MCP客户端无法连接配置文件路径错误服务器脚本执行权限或依赖问题。1. 确认配置文件中command和args的路径绝对正确。2. 在终端手动运行python /path/to/server.py看是否有报错。3. 检查客户端日志通常有更详细的连接错误信息。执行速度慢容器冷启动开销镜像过大宿主机负载高。1. 实施容器池化预热。2. 使用更小的基础镜像如python:3.11-alpine。3. 监控宿主机性能。5.4 扩展方向从单机到集群当单个服务器的负载过高时就需要考虑集群化部署。任务队列引入Redis或RabbitMQ作为任务队列。MCP服务器变为“调度器”只接收请求并将其放入队列。多个独立的“工作节点”Worker从队列中取出任务在各自的Docker环境中执行并将结果回传。这实现了水平扩展。健康检查与负载均衡工作节点定期上报心跳和负载CPU、内存、队列长度。调度器根据负载将新任务分发给最空闲的节点。共享存储如果任务需要处理大型输入文件或产生大型输出需要共享存储如NFS、S3让所有工作节点都能访问。这时文件路径的传递和清理逻辑会变得更复杂。构建一个mcp-safe-run这样的项目远不止是写一个调用Docker的脚本。它涉及协议理解、安全工程、资源管理和系统设计。从最简单的原型开始逐步迭代针对遇到的具体问题去增强相应的模块是驾驭这类复杂系统的不二法门。这个项目为我们提供了一个绝佳的蓝图展示了如何将前沿的AI协议与经典的隔离技术结合去解决AI时代一个实实在在的安全痛点。

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