让网页抓取在 Clash 虚拟 IP 环境下正常联网
29.8/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/10 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add wqzhellohhwy/dsh-web-fetch-lan该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:待复验
是什么
dsh 原生插件 · search
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 23 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🟢 扫描:未发现敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描未发现敏感能力:最多只发网络请求、读取自身元数据或只读文件,未发现执行命令、文件写入或敏感信息读取。
发起外部网络请求
查看扫描证据(共 6 处,展示前 6 条)
- 发起网络请求index.js:355
async fetch(request, signal) { - 发起网络请求index.js:364
const response = await fetch(current, { - 发起网络请求selftest.mjs:80
await provider.fetch({ url }); - 请求外部主机10.255.255.1selftest.mjs:98
await custom.fetch({ url: 'http://10.255.255.1/' }); - 发起网络请求selftest.mjs:98
await custom.fetch({ url: 'http://10.255.255.1/' }); - 发起网络请求selftest.mjs:108
const result = await live.fetch({ url: 'https://example.com/' });
扫描于 2026/10/31(1 天前) · 范围 入口闭包 + 全包扫描 · 来源 GitHub 仓库
涉及外部主机:10.255.255.1
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 放行fake-ip网段
- 拦截回环与内网地址
- 拦截云元数据地址
让 DeepSeek Harness 的 web_fetch 在 Clash/mihomo 的 fake-ip(TUN)下可用:放行 fake-ip 段,仍拒绝回环/内网/云元数据等地址。零依赖 DSH 插件。
README
由 DeepSeek 最新模型翻译生成dsh-web-fetch-lan
让 DeepSeek Harness 的 web_fetch 在 Clash / mihomo 的 fake-ip 环境下正常工作:放行 fake-ip 段,同时保留对内网、回环、云元数据等地址的拦截。零依赖,无需构建。
它解决什么问题
DSH 的 web_fetch 自带 SSRF 防护:连接前先解析域名,只要解析结果里出现非公网地址就直接拒绝,报 WEB_BLOCKED_URL:
Error: URL hostname "example.com" resolves to a non-public IP address
而 Clash / mihomo 开启 TUN + enhanced-mode: fake-ip 后,所有域名都会被解析到保留段(默认 198.18.0.0/15 与 2001:2::/64)。这些地址在 ipaddr.js 眼里不是 unicast,于是所有抓取全被拦下——哪怕你本机上网完全正常。
结果就是:开着 TUN 时 web_fetch 几乎不可用,关掉 TUN 才能用。更麻烦的是 Windows 上可能同时向两个网卡查 DNS,一会儿返回 fake-ip、一会儿返回真实 IP,表现为时好时坏、难以复现。
展开完整文档(README 剩余 1 节)
dsh-web-fetch-lan 让 DeepSeek Harness 的 web_fetch 在 Clash / mihomo 的 fake-ip 环境下正常工作:放行 fake-ip 段,同时保留对内网、回环、云元数据等地址的拦截。零依赖,无需构建。 它解决什么问题 DSH 的 web_fetch 自带 SSRF 防护:连接前先解析域名,只要解析结果里出现非公网地址就直接拒绝,报 WEB_BLOCKED_URL: Error: URL hostname "example.com" resolves to a non-public IP address 而 Clash / mihomo 开启 TUN + enhanced-mode: fake-ip 后,所有域名都会被解析到保留段(默认 198.18.0.0/15 与 2001:2::/64)。这些地址在 ipaddr.js 眼里不是 unicast,于是所有抓取全被拦下——哪怕你本机上网完全正常。 结果就是:开着 TUN 时 web_fetch 几乎不可用,关掉 TUN 才能用。更麻烦的是 Windows 上可能同时向两个网卡查 DNS,一会儿返回 fake-ip、一会儿返回真实 IP,表现为时好时坏、难以复现。 它做了什么 提供一个替换用的 fetch provider(id = http-lan),判定规则只有一处不同: | 解析结果 | 内置 provider | 本插件 | | 公网地址 | 放行 | 放行 | | fake-ip 段(可配置) | 拒绝 | 放行 | | 回环 / 私网 / 链路本地 / CGNAT / 组播 / 保留段 | 拒绝 | 拒绝 | 也就是只把「fake-ip 这一段」当作可用:它只在 TUN 内部有意义,连接会被 mihomo 按域名映射转发到你本来要访问的站点,并不会真的连到 198.18.x.x 那台主机。而 127.0.0.1、192.168.x.x、169.254.169.254、[::1] 等等依旧被挡住,本机服务、内网设备、云元数据端点不会因为装了这个插件而暴露。 顺带修掉一个实测问题:在 TUN + fake-ip 环境下,如果让 Node 按 DNS 原顺序(verbatim,IPv6 优先)连接,HTTPS 会间歇性 ECONNRESET(TCP 通、TLS 阶段被重置),连内置 provider 也躲不过。插件在 apply() 里把本进程的 DNS 结果顺序设为 ipv4first,实测连续 8/8 成功;这只是排序偏好,没有 A 记录时仍会走 AAAA。 安装 插件走 DSH 的插件管理器安装(不是 dsh plugin CLI——桌面版 profile 由 Electron 独占管理): 1. 把本仓库放在任意目录,例如 D:\repository\dsh-web-fetch-lan; 2. 打开 DSH 侧栏 插件 → 添加插件,填入该目录的绝对路径,安装; 3. 若提示需要重启,就重启一次 DSH:provider 是宿主进程启动时装载的。 安装后 profile 的 package.json 会多出一条 link: 依赖与一个 bundle 条目。要卸载就回到插件页删除,内置 provider 立刻恢复。 相对路径会被安装器拒绝,填绝对路径。 配置 fake-ip 段在 loader 行的 config 里配置,默认值写在 cordis.patch.yml: - insert: - id: web-fetch-lan name: '@local/dsh-web-fetch-lan' config: fakeIpRanges: - 198.18.0.0/15 fakeIpRanges6: - 2001:2::/64 - fdfe:dcba:9876::/64 在 Clash Verge 里改了 fake-ip-range / fake-ip-range6 之后,把新段补进这里,重启 DSH 即可,不用改代码。 不想改本仓库文件的话,在 profile 层覆盖(~/.dsh/profiles/<profile>/cordis.patch.yml): - id: web-fetch-lan config: fakeIpRanges: ['198.18.0.0/15'] fakeIpRanges6: ['2001:2::/64'] 容错规则:条目逐个做 CIDR 校验,非法条目剔除后保留其余;非数组、或全部非法时回退内置默认段并在日志告警——不会因为配置写错而静默放行一切。生效的段会在启动日志里打印一行: [web-fetch-lan] fake-ip 段 v4=198.18.0.0/15 v6=2001:2::/64,fdfe:dcba:9876::/64 cordis.patch.yml 里另有一条把 web 条的 fetchProvider 固定为 http-lan:内置的 web-fetch-http 依然注册着,不显式指定会得到 WEB_PROVIDER_AMBIGUOUS。 自检 零依赖,直接跑: node selftest.mjs 或 pnpm test 覆盖配置归一与回退、地址判定、provider 装配,以及 127.0.0.1 / 169.254.169.254 / [::1] / 192.168.3.1 / file: / 带凭据 URL 仍被拒绝;末尾附带一次真实抓取(代理没开时只提示,不计入退出码)。 边界 与内置 provider 保持一致的行为与限制: - 仅同源重定向,最多 5 跳;跨源跳转(含 http:// → https:// 的协议升级)会拒绝并提示重试目标 URL; - 响应上限 2 MiB,正文截断 200,000 字符;只接受文本类 content-type; - 单次抓取 30 秒超时; - URL 不允许携带凭据,只支持 http: / https:。 注意区分两种失败:fetch failed 是网络层错误(多半是代理节点本身不通),不是被 SSRF 拦截;被拦截时的报错会明确写 not a public address / resolves to a non-public IP address。 目录结构 index.js 插件本体:地址判定、抓取实现、apply() cordis.patch.yml bundle patch:注册 provider + 插入插件行 + fake-ip 段配置 selftest.mjs 自检脚本(零依赖) package.json dsh.bundle.patch 指向 cordis.patch.yml 许可 MIT
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
wqzhellohhwy/dsh-web-fetch-lan
让网页抓取在 Clash 虚拟 IP 环境下正常联网
相关插件 · 搜索 / 抓取
LLM 知识平台Tencent/WeKnora
概览 ·快速开始 ·新特性 ·功能 ·客户端 ·文档 ·开发
★ 36,032已汉化DSH
72.1
智能体记忆系统MemTensor/MemOS
MemOS 2.0 Stardust星尘
★ 12,195已汉化DSH
71.2
跨代理记忆库zilliztech/memsearch
跨平台语义记忆,专为 AI 编程智能体打造。
★ 2,799已汉化DSH
70.9
技能语料库EverMind-AI/SkillCorpus
SkillCorpus 能给你什么
★ 694已汉化DSH
69.7
代码图谱记忆syncable-dev/memtrace-public
你的智能体值得拥有结构化记忆。
★ 509已汉化MCP
67.9
AnySearch 搜索插件anysearch-team/anysearch-dsh
AnySearch 网页搜索服务商,为 DeepSeek Harness(DSH)提供高级搜索工具
★ 457已汉化DSH
66.6