news 2026/10/7 7:08:13

告别云端依赖:用 Ollama 与 Docker Model Runner 本地运行大语言模型的深度指南与趋势分析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
告别云端依赖:用 Ollama 与 Docker Model Runner 本地运行大语言模型的深度指南与趋势分析

1. 本地跑大语言模型到底解决什么问题,适合谁

大语言模型本地运行这件事,说白了就是把原本要发到云端服务器上的推理请求,改成在你自己的笔记本、台式机或者工作站上完成。你问它一句话,计算过程全部发生在本地显卡或内存里,数据不出机器。这件事在 2024 年之后变得可行,核心原因是小参数量模型(SLM)的成熟——几百兆到几 GB 的模型,经过蒸馏和量化后,在消费级硬件上已经能跑出可用的效果。

我先把适合的人群说清楚。第一类是做隐私敏感业务的开发者,比如处理医疗记录、合同文本、内部知识库,这些数据一旦发到外部 API 就有合规风险。第二类是成本敏感的个人开发者或小团队,云端 API 按 Token 计费,高频调用一个月下来账单不小,而本地推理的边际成本接近零。第三类是需要离线环境的场景,比如内网开发机、没有稳定外网的实验室设备。第四类是想学习模型推理原理的人,本地跑一遍能直观看到显存占用、量化精度、并发吞吐这些指标。

不适合的情况也要讲明白。如果你需要千亿参数级别的知识广度和复杂逻辑推理,本地小模型会频繁出现幻觉,回答质量明显下降。如果你只是偶尔问几个问题,云端 API 的便利性远高于本地部署的维护成本。本地运行的价值在于「高频、隐私、可控」,而不是「替代云端大模型」。

这篇文章的主线是两条落地路径:Ollama 和 Docker Model Runner。前者是极简主义的代表,一行命令就能拉起模型;后者是工程化的代表,用容器技术把模型运行时标准化。我会把两条路径的配置片段、参数调优、验证请求都写出来,你可以直接复制操作。中间还会穿插一个关键问题:当你本地模型效果不够好时,怎么用 TaoToken 这类聚合服务快速对比云端模型,形成「本地为主、云端兜底」的混合架构。

先说清楚一个概念,本地运行大语言模型不等于训练模型。训练需要大量 GPU 集群和数据集,普通人做不了。本地运行指的是推理(Inference),也就是把已经训练好的模型权重加载进来,接受输入、产出输出。这个过程的硬件瓶颈主要在显存和内存带宽,而不是算力峰值。理解这一点,后面的量化选择和参数调优就顺了。

2. Ollama 与 Docker Model Runner 的前置准备与选型对比

在动手之前,你需要先确认自己的硬件底子。打开终端,Mac 用户看「关于本机」,Windows 用户看任务管理器性能页,Linux 用户直接跑命令。核心看三个数:内存总量、是否有独立 GPU、GPU 显存大小。内存决定你能加载多大的模型,显存决定推理速度。

# macOS / Linux 查看内存与 GPU 信息 sysctl -n hw.memsize | awk '{print $1/1024/1024/1024 " GB"}' system_profiler SPDisplaysDataType | grep -E "Chipset|VRAM" # Linux 查看 NVIDIA 显卡 nvidia-smi --query-gpu=name,memory.total --format=csv

经验值是这样的:8GB 内存的机器,建议跑 1B 到 3B 参数的量化模型;16GB 内存可以上 7B 的 4-bit 量化;32GB 以上可以考虑 13B 到 14B。如果有 8GB 以上显存的 NVIDIA 显卡,7B 模型能跑得比较流畅。Apple Silicon 的 Mac 因为统一内存架构,内存即显存,M 系列芯片 16GB 起步就能跑 7B 量化模型。

选型上,Ollama 和 Docker Model Runner 的定位差异很明显。Ollama 是单机工具,安装即用,模型管理命令直观,适合快速实验和个人开发。Docker Model Runner 是 Docker Desktop 的 Beta 功能,把模型当成容器化资源来调度,适合已经在用 Docker 的团队,尤其是需要把模型服务和业务应用一起编排的场景。

对比维度OllamaDocker Model Runner
安装方式官网下载安装包或脚本Docker Desktop 内置 Beta 功能
默认 API 端口1143412434
模型管理命令ollama pull/run/listdocker model pull/run/list
OpenAI SDK 兼容需通过兼容层原生兼容,改 base_url 即可
GPU 调度自动检测容器化调度,配置更细
适合场景个人实验、快速原型团队协作、生产编排

这里有个容易踩的坑:两个服务的端口不同,如果你同时装了 Ollama 和 Docker Model Runner,代码里的 base_url 一定要写对。Ollama 是http://localhost:11434,Docker Model Runner 是http://localhost:12434。我见过有人把端口写混,然后一直报连接拒绝,排查半天。

关于模型来源,Ollama 有自己的模型库,直接ollama pull就能拉。Docker Model Runner 目前主要从 Docker Hub 的模型仓库拉取,格式上更偏向 OCI 标准。两者都支持 GGUF 格式的量化模型,这是目前本地推理最通用的格式。

如果你在本地跑了一圈发现小模型效果不达预期,想快速对比云端大模型的表现,可以用 TaoToken 的模型对话功能做对照测试。它的入口在 https://taotoken.net/api ,注册后在控制台创建 API Key,就能用统一的接口调用多个云端模型。这样你可以在本地跑一个 7B 模型,同时用云端模型跑同样的 prompt,直观对比质量差距,再决定哪些任务留在本地、哪些走云端。

前置准备清单:确认内存和显存、安装 Ollama 或 Docker Desktop、准备一个测试用的 prompt 集合、记录基线延迟和显存占用。这四步做完,再进入具体配置。

3. 可复制的 Ollama 与 Docker Model Runner 配置片段

这一节是全文的核心操作部分,我把两条路径的配置都写全,你按自己的环境选一条走,或者两条都装做对比。

3.1 Ollama 安装与模型拉取

macOS 和 Linux 用官方脚本安装最省事:

# macOS / Linux 安装 Ollama curl -fsSL https://ollama.com/install.sh | sh # 验证安装 ollama --version # 拉取一个 7B 量化模型(约 4.7GB) ollama pull qwen2.5:7b # 拉取一个更小的 1.5B 模型做快速测试(约 1GB) ollama pull qwen2.5:1.5b

Windows 用户直接去 Ollama 官网下载 exe 安装包,装完后 Ollama 会常驻后台,托盘图标能看到。安装完成后,Ollama 默认监听 11434 端口,并且开机自启。

拉取模型时你会看到进度条,模型文件存在~/.ollama/models目录下。如果你想改存储路径(比如系统盘空间不够),设置环境变量OLLAMA_MODELS指向大容量磁盘。

# 修改模型存储路径(Linux/macOS) export OLLAMA_MODELS=/data/ollama/models # 写入 shell 配置持久化 echo 'export OLLAMA_MODELS=/data/ollama/models' >> ~/.bashrc

3.2 Ollama 服务化配置

Ollama 默认只监听本地回环地址,如果你想让局域网内其他机器访问,需要改监听地址。同时可以调整并发数和显存策略。

# 创建 systemd 服务覆盖配置(Linux) sudo mkdir -p /etc/systemd/system/ollama.service.d sudo tee /etc/systemd/system/ollama.service.d/override.conf <<'EOF' [Service] Environment="OLLAMA_HOST=0.0.0.0:11434" Environment="OLLAMA_NUM_PARALLEL=4" Environment="OLLAMA_MAX_LOADED_MODELS=2" Environment="OLLAMA_KEEP_ALIVE=30m" EOF sudo systemctl daemon-reload sudo systemctl restart ollama

这几个参数的含义:OLLAMA_NUM_PARALLEL控制同时处理的请求数,显存够就调大;OLLAMA_MAX_LOADED_MODELS控制同时驻留内存的模型数量;OLLAMA_KEEP_ALIVE控制模型空闲多久后卸载,设长一点避免反复加载。

macOS 用户通过launchctl setenv设置环境变量,或者直接在启动 Ollama 应用前用命令行方式启动。

3.3 Docker Model Runner 启用与配置

Docker Model Runner 需要 Docker Desktop 4.40 以上版本。打开 Docker Desktop,进入 Settings,找到 Beta features,勾选「Enable Docker Model Runner」。如果你用的是命令行版 Docker Engine,需要单独安装 model runner 插件。

启用后,验证服务是否就绪:

# 查看 Docker Model Runner 状态 docker model status # 拉取模型 docker model pull ai/qwen2.5:7B-Q4_K_M # 运行模型 docker model run ai/qwen2.5:7B-Q4_K_M

Docker Model Runner 的模型命名遵循 OCI 规范,格式是命名空间/模型名:标签。标签里通常包含量化信息,比如Q4_K_M表示 4-bit 量化、K 系列中等质量。

3.4 关键配置文件片段

如果你要把模型服务接入现有应用,最省事的方式是用 OpenAI 兼容接口。下面是两种服务的配置对照,你可以直接复制到项目里。

Ollama 的 OpenAI 兼容配置(Python):

# ollama_config.py from openai import OpenAI client = OpenAI( base_url="http://localhost:11434/v1", api_key="ollama" # Ollama 不校验 key,随便填 ) response = client.chat.completions.create( model="qwen2.5:7b", messages=[{"role": "user", "content": "用一句话解释什么是量化"}], temperature=0.7 ) print(response.choices[0].message.content)

Docker Model Runner 的配置(Python):

# docker_model_config.py from openai import OpenAI client = OpenAI( base_url="http://localhost:12434/engines/v1", api_key="docker" # 同样不校验 ) response = client.chat.completions.create( model="ai/qwen2.5:7B-Q4_K_M", messages=[{"role": "user", "content": "用一句话解释什么是量化"}], temperature=0.7 ) print(response.choices[0].message.content)

注意 Docker Model Runner 的 base_url 路径是/engines/v1,不是/v1,这个细节容易写错。如果你用的是 Docker Compose 编排,模型服务可以作为独立 service 定义:

# docker-compose.yml services: model-runner: image: docker/model-runner:latest ports: - "12434:12434" volumes: - model-cache:/root/.docker/models environment: - DOCKER_MODEL_RUNNER_PORT=12434 my-app: build: . ports: - "8000:8000" environment: - OPENAI_BASE_URL=http://model-runner:12434/engines/v1 - OPENAI_API_KEY=docker depends_on: - model-runner volumes: model-cache:

这套编排的好处是模型缓存持久化,容器重启不用重新拉模型。my-app通过服务名model-runner访问,不依赖宿主机端口映射,内网通信更干净。

3.5 量化选择与显存权衡

量化是本地运行的核心话题。简单说,量化就是把模型权重从 16 位浮点数压缩到 8 位、4 位甚至更低,牺牲一点精度换取显存和速度。常见的量化等级:

量化等级每权重位数7B 模型大小质量损失适用场景
FP1616~14GB无显存充足,追求最高质量
Q8_08~7GB极小显存 8GB 以上
Q5_K_M5~5GB很小显存 6GB 左右
Q4_K_M4~4.5GB小显存 4-6GB,最常用
Q3_K_M3~3.5GB中等显存紧张
Q2_K2~2.5GB较大极限压缩,不推荐

我的建议是优先选 Q4_K_M,这是质量和体积的平衡点。如果你的显存刚好卡在边界,比如 6GB 显存跑 7B 模型,选 Q4_K_M 可能爆显存,那就降到 Q3_K_M 或者换更小的模型。不要为了跑大模型硬上 Q2_K,质量下降太明显,不如直接换 3B 模型。

显存和内存的权衡逻辑:模型加载时,权重会尽量放进显存,如果显存放不下,部分层会 offload 到内存,速度会明显下降。所以显存大小直接决定推理速度,内存大小决定能不能加载。你可以用nvidia-smi或ollama ps观察实际占用。

# 查看 Ollama 当前加载的模型和资源占用 ollama ps # 查看 NVIDIA 显存实时占用 watch -n 1 nvidia-smi

4. 验证请求与成功结果:从命令行到代码的完整闭环

配置写完,必须验证。这一节我给你一套可执行的验证动作,从最简单的命令行请求到代码调用,再到并发压测,一步步确认服务正常。

4.1 命令行快速验证

Ollama 装好后,直接跑:

# 交互式对话 ollama run qwen2.5:1.5b "你好,请用一句话介绍你自己" # 非交互式,适合脚本 ollama run qwen2.5:1.5b --verbose "1+1等于几"

--verbose会输出推理耗时、token 生成速度等指标。你会看到类似这样的输出:

total duration: 1.234s load duration: 123.456ms prompt eval count: 12 token(s) prompt eval duration: 45.678ms eval count: 8 token(s) eval duration: 1.065s eval rate: 7.51 tokens/s

eval rate就是生成速度,7B 模型在消费级显卡上通常能到 20-40 tokens/s,纯 CPU 推理可能只有 3-8 tokens/s。这个数字直接决定交互体验。

Docker Model Runner 的命令行验证:

# 交互式运行 docker model run ai/qwen2.5:7B-Q4_K_M # 查看已拉取的模型 docker model list # 查看模型详情 docker model inspect ai/qwen2.5:7B-Q4_K_M

4.2 HTTP API 验证

用 curl 直接打 API,确认服务端口和路径正确:

# Ollama 原生 API curl http://localhost:11434/api/chat -d '{ "model": "qwen2.5:1.5b", "messages": [{"role": "user", "content": "你好"}], "stream": false }' # Ollama OpenAI 兼容接口 curl http://localhost:11434/v1/chat/completions -d '{ "model": "qwen2.5:1.5b", "messages": [{"role": "user", "content": "你好"}] }' # Docker Model Runner OpenAI 兼容接口 curl http://localhost:12434/engines/v1/chat/completions -d '{ "model": "ai/qwen2.5:7B-Q4_K_M", "messages": [{"role": "user", "content": "你好"}] }'

如果返回 JSON 里有choices字段和内容,说明服务正常。如果返回连接拒绝,检查服务是否启动、端口是否写对。如果返回 404,检查路径,Ollama 原生是/api/chat,OpenAI 兼容是/v1/chat/completions。

4.3 代码调用验证

用 Python 写一个完整的验证脚本,包含错误处理和耗时统计:

# verify_local_llm.py import time from openai import OpenAI def test_endpoint(base_url, model, api_key="local"): client = OpenAI(base_url=base_url, api_key=api_key) prompt = "请用三句话解释什么是大语言模型的量化" start = time.time() try: response = client.chat.completions.create( model=model, messages=[{"role": "user", "content": prompt}], temperature=0.7, max_tokens=256 ) elapsed = time.time() - start content = response.choices[0].message.content usage = response.usage print(f"[OK] {base_url} | 模型: {model}") print(f"耗时: {elapsed:.2f}s") print(f"Token 用量: prompt={usage.prompt_tokens}, completion={usage.completion_tokens}") print(f"生成速度: {usage.completion_tokens/elapsed:.1f} tokens/s") print(f"回答: {content[:100]}...") return True except Exception as e: print(f"[FAIL] {base_url} | 错误: {e}") return False if __name__ == "__main__": test_endpoint("http://localhost:11434/v1", "qwen2.5:1.5b") test_endpoint("http://localhost:12434/engines/v1", "ai/qwen2.5:7B-Q4_K_M")

跑这个脚本,你会看到两个端点的对比结果。如果某个端点失败,错误信息会直接告诉你原因。

4.4 并发与吞吐验证

单次请求正常不代表服务能扛并发。用简单的并发脚本测试:

# concurrent_test.py import concurrent.futures import time from openai import OpenAI client = OpenAI(base_url="http://localhost:11434/v1", api_key="ollama") def single_request(i): start = time.time() response = client.chat.completions.create( model="qwen2.5:1.5b", messages=[{"role": "user", "content": f"这是第{i}个测试请求,请回复OK"}], max_tokens=16 ) return time.time() - start if __name__ == "__main__": with concurrent.futures.ThreadPoolExecutor(max_workers=4) as executor: futures = [executor.submit(single_request, i) for i in range(8)] times = [f.result() for f in concurrent.futures.as_completed(futures)] print(f"总请求: {len(times)}") print(f"平均耗时: {sum(times)/len(times):.2f}s") print(f"最大耗时: {max(times):.2f}s") print(f"最小耗时: {min(times):.2f}s")

如果并发 4 个请求的平均耗时远高于单请求,说明OLLAMA_NUM_PARALLEL设置不够或者显存不足。这时候要么调大并发参数,要么接受排队。

4.5 成功结果的判断标准

什么算验证通过?我给你几个硬指标:单次请求返回内容合理、无乱码;eval rate在可接受范围(交互场景建议 15 tokens/s 以上);并发 4 请求时服务不崩溃、不返回 500;显存占用稳定,不持续增长(内存泄漏的信号)。这四条都满足,本地推理服务就算跑通了。

5. 本篇常见错误排查:401、local proxy failed、reading choices、OAuth

本地跑模型报错是常态,我把最常见的几类错误和排查路径列出来,你对照着看。

5.1 401 Unauthorized

这个错误通常出现在你用了 OpenAI SDK 但没传 api_key,或者传了错误的 key。本地服务一般不校验 key,但 SDK 要求必填,所以随便填一个字符串就行。

# 错误写法:不传 api_key client = OpenAI(base_url="http://localhost:11434/v1") # 报 401 # 正确写法:传任意非空字符串 client = OpenAI(base_url="http://localhost:11434/v1", api_key="ollama")

如果你用的是 TaoToken 这类云端聚合服务,401 就是真的 key 有问题。去控制台检查 API Key 是否复制完整、是否过期、额度是否用完。TaoToken 的 API Key 管理入口在 https://taotoken.net/api ,创建后立即复制,页面刷新后不再显示完整 key。

5.2 local proxy failed / connection refused

这个报错说明客户端连不上服务。排查顺序:先确认服务进程在跑,再确认端口对,最后确认防火墙。

# 检查 Ollama 进程 ps aux | grep ollama # 检查端口监听 lsof -i :11434 netstat -tlnp | grep 11434 # 直接 curl 测试 curl -v http://localhost:11434/api/tags

如果lsof显示端口没监听,说明服务没启动。Ollama 在 macOS 上有时会因为托盘退出而停止,重新打开应用即可。Docker Model Runner 需要 Docker Desktop 保持运行。

另一个常见原因是 base_url 写成了https而不是http。本地服务默认不走 TLS,写 https 会握手失败。

5.3 reading choices 相关错误

这个错误通常长这样:KeyError: 'choices'或者AttributeError: 'NoneType' object has no attribute 'choices'。原因是 API 返回的 JSON 结构和你预期的不一样。

排查方法:先用 curl 看原始返回。

curl http://localhost:11434/v1/chat/completions -d '{ "model": "qwen2.5:1.5b", "messages": [{"role": "user", "content": "test"}] }' | python -m json.tool

如果返回里没有choices,可能是模型名写错了,服务返回了错误信息。Ollama 的模型名必须和ollama list里显示的一致,包括标签。比如qwen2.5:7b和qwen2.5:7B在某些版本里大小写敏感。

还有一种情况是流式响应没处理。如果你设了stream=True,返回的是 SSE 流,不能直接取choices,要逐行解析。

5.4 OAuth / 认证相关错误

本地服务一般不涉及 OAuth,但如果你把本地模型接入了一些需要 OAuth 的客户端工具(比如某些 IDE 插件),可能会遇到认证流程报错。这类问题的根源通常是客户端期望的是云端 OAuth 流程,而本地服务只支持简单的 API Key。

解决办法是找客户端的「自定义 API 端点」或「OpenAI 兼容」配置项,把认证方式改成 API Key,base_url 指向本地。如果客户端强制走 OAuth,那就没法接本地服务,只能换工具。

5.5 模型加载失败 / 显存不足

报错信息通常是CUDA out of memory或failed to allocate。这是显存不够。解决办法:换更小的量化等级、换更小的模型、减少并发数、关闭其他占显存的程序。

# 查看当前显存占用 nvidia-smi # 杀掉占用显存的进程(谨慎) nvidia-smi --query-compute-apps=pid --format=csv,noheader | xargs -r kill

如果是 Apple Silicon,报错可能是insufficient memory,同样换小模型或降低量化。

5.6 模型输出乱码或重复

这通常是量化过度或者 prompt 格式不对。Q2_K 级别的量化容易出现输出质量下降。另外,某些模型对 prompt 模板敏感,如果你直接发原始文本而不套模板,输出可能异常。Ollama 会自动套模板,但如果你用原生 API 手动构造 prompt,要注意格式。

排查时先用ollama run交互式测试,如果交互式正常但 API 异常,问题在 API 调用方式;如果交互式也异常,问题在模型或量化等级。

5.7 三件套配置检查清单

无论你用 Ollama、Docker Model Runner 还是 TaoToken,接入任何 OpenAI 兼容客户端时,检查这三项:

配置项OllamaDocker Model RunnerTaoToken
Base URLhttp://localhost:11434/v1http://localhost:12434/engines/v1https://taotoken.net/api
API Key任意非空字符串任意非空字符串控制台创建的 Key
Model IDollama list 里的名称docker model list 里的名称控制台模型列表里的 ID

这三项任何一项写错都会报错。我建议你把它们写在一个配置文件里,不要硬编码在代码中,方便切换。

6. 本地为主云端兜底:用 TaoToken 补齐本地模型的能力边界

本地跑模型跑通之后,你会遇到一个现实问题:小模型在简单任务上够用,但遇到复杂推理、长文本理解、多轮对话时,质量明显不如云端大模型。这时候硬扛没有意义,合理的做法是混合架构——本地处理高频、隐私敏感、简单的任务,云端处理复杂、低频、需要高质量的任务。

TaoToken 在这个架构里的角色是云端兜底。它提供统一的 API 接口,你可以在本地模型效果不达预期时,把同一个 prompt 发给云端模型对比。接入方式很简单,把 base_url 换成https://taotoken.net/api,api_key 换成控制台创建的 Key,model 换成你想用的云端模型 ID。

# hybrid_router.py from openai import OpenAI local_client = OpenAI(base_url="http://localhost:11434/v1", api_key="ollama") cloud_client = OpenAI(base_url="https://taotoken.net/api", api_key="your_taotoken_key") def route_query(prompt, complexity="simple"): if complexity == "simple": response = local_client.chat.completions.create( model="qwen2.5:7b", messages=[{"role": "user", "content": prompt}] ) return "local", response.choices[0].message.content else: response = cloud_client.chat.completions.create( model="claude-sonnet-4-5-20250929", messages=[{"role": "user", "content": prompt}] ) return "cloud", response.choices[0].message.content if __name__ == "__main__": source, answer = route_query("帮我写一个快速排序", "simple") print(f"[{source}] {answer}") source, answer = route_query("分析这段代码的架构缺陷并给出重构方案", "complex") print(f"[{source}] {answer}")

这个路由逻辑可以更精细,比如根据 prompt 长度、是否包含敏感词、历史对话轮数来决定走本地还是云端。核心思路是:本地优先,云端兜底,成本和质量平衡。

如果你需要长期跑编码任务或 Agent 工作流,TaoToken 的 Coding Plan 提供了更适合高频调用的方案,入口在 https://taotoken.net/api 的套餐页面。对于需要对比多个模型效果的场景,模型对话功能可以让你在网页上直接切换模型测试,不用写代码。

接入文档在 https://taotoken.net/api 的文档页,里面有各语言的示例代码和错误码说明。API Key 管理在控制台,建议为不同项目创建不同的 Key,方便追踪用量和随时吊销。

最后说一个实操经验:本地模型和云端模型的 prompt 格式可能不同。本地小模型对指令的遵循能力弱,prompt 要写得更明确、更结构化;云端大模型理解能力强,prompt 可以更自然。如果你用同一套 prompt 对比,可能会低估本地模型的实际能力。建议针对本地模型单独调优 prompt,再和云端对比,这样结论更准确。

本地运行大语言模型这件事,门槛在降低,但工程细节不少。从硬件确认到量化选择,从服务配置到并发调优,每一步都有坑。跑通之后,你会对模型推理的成本、延迟、质量有更直观的认知,这种认知是单纯调 API 得不到的。

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

Cursor 显示所在区域无法打开?把 Base URL 改到 TaoToken 的排查思路

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

作者头像 李华
网站建设 2026/10/7 7:05:55

敏感文件泄露WP(1)

一、描述&#xff1a;我有一个备份我网站的好习惯。题解&#xff1a;先用dirsearch扫描一下&#xff08;本质是对照字典一个个爆破&#xff09;看到有个backup.zip&#xff08;这个是非常重要的&#xff0c;一般在ctf里看到就直接下载来看就行&#xff0c;里面是网页的原始PHP代…

作者头像 李华