🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

局域网接入 GooDAnDReaDY/dsh-lanmode

DeepSeek Harnessv0.8.53
GooDAnDReaDY5 天前有提交已提供中文文档扫描:含敏感能力

为 DeepSeek Harness WebUI 提供移动端网关和安全本地网络访问

37.4/100
综合分
8
GitHub 星标
1,373
npm 周下载
—/5
用户评分

数据截至 2026/10/30 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add @goodandready/dsh-lanmode
npm 源 · @goodandready/dsh-lanmode 的发布者账号已校验与本仓库一致

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
dsh 原生插件 · ui
装得上吗
本站已在 dsh 0.2.1-rc.5 下真实安装成功
非静态推断
L5 · 运行时冒烟等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 5 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过
展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✓npm 包@goodandready/dsh-lanmode @ 0.8.53
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/11/1 00:48:31

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件写入剪贴板(不计风险)发起外部网络请求
查看扫描证据(共 47 处,展示前 36 条)
  • 读取本地文件
    lib/index.js:55
    const names = readdirSync(dir).filter((name) => name.endsWith('.js')).sort()
  • 读取本地文件
    lib/index.js:56
    const source = names.map((name) => readFileSync(path.join(dir, name), 'utf8')).join('\n')
  • 读取本地文件
    lib/index.js:60
    return readFileSync(path.join(here, 'shim.js'), 'utf8')
  • 读取本地文件
    lib/index.js:65
    return JSON.parse(readFileSync(path.join(here, '..', 'package.json'), 'utf8')).version
  • 读取本地文件
    lib/index.js:446
    if (cfg.tls === 'files' && cfg.tlsCert && existsSync(cfg.tlsCert)) {
  • 读取本地文件
    lib/index.js:448
    const stat = statSync(cfg.tlsCert)
  • 发起网络请求
    lib/upnp.js:30
    const req = http.request(u, {
  • 发起网络请求
    lib/upnp.js:107
    http.get(new URL(loc), { timeout: 2000 }, (r) => {
  • 发起网络请求
    lib/assumptions.js:23
    return fetch('http://127.0.0.1:' + port + '/' + (currentToken ? '?token=' + currentToken : ''))
  • 发起网络请求
    lib/bridge.js:368
    const upstream = http.request({
  • 执行外部命令来自配置/变量
    lib/firewall.js:13
    execFile(cmd, args, { timeout: 5000 }, (error, stdout, stderr) => {
  • 执行外部命令来自配置/变量
    lib/tls.js:111
    execFile(command, args, { timeout: 30000 }, (error, stdout, stderr) => {
  • 读取本地文件
    lib/plugin-updater.js:18
    if (!existsSync(lockPath)) return { locked: false }
  • 读取本地文件
    lib/plugin-updater.js:20
    const raw = readFileSync(lockPath, 'utf8').trim()
  • 读取本地文件
    lib/plugin-updater.js:83
    if (!existsSync(entry)) return undefined
  • 读取本地文件
    lib/plugin-updater.js:86
    if (existsSync(manifestPath)) {
  • 读取本地文件
    lib/plugin-updater.js:88
    const manifest = JSON.parse(readFileSync(manifestPath, 'utf8'))
  • 发起网络请求
    lib/plugin-updater.js:180
    const response = await fetch(
  • 读取本地文件
    lib/plugin-updater.js:200
    const value = JSON.parse(await readFile(manifestUrl, 'utf8'))
  • 执行外部命令来自配置/变量
    lib/plugin-updater.js:229
    const child = spawn(
  • 发起网络请求
    lib/push.js:109
    const res = await fetch(sub.endpoint, { method: 'POST', headers, body, signal: AbortSignal.timeout(opts.timeout || 8000) })
  • 发起网络请求
    lib/bridge-ws.js:147
    const upstream = http.request({
  • 发起网络请求
    lib/client-parts/01-remote-helpers.js:197
    fetch('/dsh-lanmode/api/tailscale/funnel/status', { cache: 'no-store' })
  • 发起网络请求
    lib/client-parts/01-remote-helpers.js:216
    fetch('/dsh-lanmode/api/tailscale/funnel/toggle', {
  • 写入剪贴板
    lib/client-parts/01-remote-helpers.js:236
    navigator.clipboard.writeText(funnel.url).then(function () {
  • 写入剪贴板
    lib/client-parts/04-card.js:23
    navigator.clipboard.writeText(url).then(function () {
  • 发起网络请求
    lib/client-parts/04-card.js:73
    return fetch('/dsh-lanmode/api/push/unsubscribe', {
  • 发起网络请求
    lib/client-parts/04-card.js:84
    return fetch('/dsh-lanmode/api/push/vapid-public-key')
  • 发起网络请求
    lib/client-parts/04-card.js:93
    return fetch('/dsh-lanmode/api/push/subscribe', {
  • 发起网络请求
    lib/client-parts/04-card.js:107
    fetch('/dsh-lanmode/api/push/test', { method: 'POST', headers: { 'content-type': 'application/json' } })
  • 发起网络请求
    lib/client-parts/04-card.js:124
    fetch('/dsh-lanmode/devices', { cache: 'no-store' })
  • 发起网络请求
    lib/client-parts/04-card.js:151
    fetch('/dsh-lanmode/devices/revoke', {
  • 发起网络请求
    lib/client-parts/08-qr.js:34
    fetch('/dsh-lanmode/health?format=json', { cache: 'no-store' })
  • 发起网络请求
    lib/client-parts/08-qr.js:77
    fetch('/dsh-lanmode/api/interfaces', { cache: 'no-store' })
  • 写入剪贴板
    lib/client-parts/08-qr.js:139
    navigator.clipboard.writeText(targetUrl).then(function () {
  • 写入剪贴板
    lib/client-parts/08-qr.js:389
    navigator.clipboard.writeText(item.cmd).then(done).catch(function () {
扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

依赖的 DSH / Cordis 模块
@deepseek-ai/schemastery@deepseek-ai/cordis@deepseek-ai/dsh-host-webserver
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 移动端网关
  • 安全本地网络访问
v0.8.532026-10-29
· 发布 0.8.53 · 安全(#479):在局域网 PIN 下保护插件的变更端点和敏感读取,防止核心认证 cookie 泄露给未认证的局域网客户端。 · 解决 #479
v0.8.522026-10-23
· 为什么发版 1. #353:网络里出现新地址或新主机时自动重签服务器 TLS 证书,避免 SSL NET::ERR_CERT_COMMON_NAME_INVALID 报错。 2. #480:代码库卫生——稳定 VAPID 测试、清理服务端 console.*、删除死导出、梳理并标注空 catch 块。 · 做了什么 · TLS(#353):在 lib/tls.js:ensureCertificate 里恢复 stillGood(info, hosts, now) 调用。主机换网络地址或接入新网络/Tailscale 时,重签证书并纳入新 SAN,根 Root CA(100 年)保持不变。 · VAPID(#480):在 lib/push.js:generateVapidKeys 里给 P-256 私钥标量补零,严格对齐到 32 字节,消除并行跑测试时的抖动。 · 服务端输出(#480):lib/devices.js 和 lib/bans.js 里的 console.error 调用改为 fallback process.stderr.write。 · 死代码(#480):删除未使用的导出 canonicalDeviceId、mintCoreAuthCookie、isPidAlive。 · Preflight(#480):标注全部 29 个空 catch 块,preflight.sh 跑过 FAIL=0。 · 包体积:523,448 字节(上限 512 KiB)。 · 兼容性与迁移 完全向后兼容,无需迁移。 已验证与 DeepSeek Harness v0.2.1-rc.2 兼容。 · 链接 · Issues:#353、#480 · PR:#481 · Gitea commit:ed7c71a · GitHub mirror commit:4f97b73
v0.8.512026-10-20
· 为什么发布 修复 Cloudflare 命名隧道敏感 token 在进程表(ps aux、/proc//cmdline)和错误信息中泄露的漏洞(#477)。 · 做了什么 · 安全传递 token:在 lib/tunnel.js 中,把 --token 参数从启动 cloudflared tunnel run 的命令行里移除。token 改由环境变量 TUNNEL_TOKEN 传递,cloudflared 原生支持这种方式。 · 清理日志和错误:新增 sanitizeToken() 函数,确保 this.lastError、进程错误事件和隧道状态里的 token 都被掩码为 [REDACTED]。 · 测试与质量:新增单元测试套件 test/issue-477-tunnel-token-security.test.mjs,调整隧道审计测试。526 个测试全部通过。 · 包体积:523,651 字节(在 512 KiB 限制内)。 · 兼容性与迁移 与所有版本的 cloudflared 完全向后兼容,无需迁移配置。 已验证与 DeepSeek Harness v0.2.1-rc.2 兼容。 · 链接 · Issue:#477 · PR:#478 · Gitea commit:bcb9a9e · GitHub mirror commit:edff2bd
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。

README

由 DeepSeek 最新模型翻译生成
📦 @goodandready/dsh-lanmode 局域网访问 (LAN)、mDNS (dsh.local)、PWA、Root CA、快速二维码、后台推送与自动 TLS 支持 (DeepSeek Harness) 🇬🇧 English • 🇷🇺 Русский • 🇨🇳 中文说明 ⚡ 功能概览 dsh-lanmode 为 DeepSeek Harness 提供完整的局域网与外网安全访问支持: 1. 📱 Quick QR 快速二维码:侧边栏底部 (Quick QR 位于 sidebar.footer / sidebar.rail) 提供纯 SVG 二维码弹窗,支持移动端扫码即连。终端支持 /mobileqr 工具与 ASCII 二维码输出。 2. 📲 PWA 与独立应用模式:提供 manifest.json,iOS/Android 全屏独立模式与刘海屏安全边距 (viewport-fit=cover)。 3. 🌐 自动 mDNS (dsh.local):内置 UDP 5353 responder,自动在局域网广播 dsh.local。 4. 🔐 本地 Root CA 与 HTTPS:生成 10 年有效期的本地根证书及带 SAN 的服务器证书。访问 /dsh-lanmode/ca.crt 即可一键下载信任。
展开完整文档(README 剩余 1 节)
📦 @goodandready/dsh-lanmode

局域网访问 (LAN)、mDNS (dsh.local)、PWA、Root CA、快速二维码、后台推送与自动 TLS 支持 (DeepSeek Harness)

🇬🇧 English •
🇷🇺 Русский •
🇨🇳 中文说明

⚡ 功能概览

dsh-lanmode 为 DeepSeek Harness 提供完整的局域网与外网安全访问支持:

1. 📱 Quick QR 快速二维码:侧边栏底部 (Quick QR 位于 sidebar.footer / sidebar.rail) 提供纯 SVG 二维码弹窗,支持移动端扫码即连。终端支持 /mobileqr 工具与 ASCII 二维码输出。
2. 📲 PWA 与独立应用模式:提供 manifest.json,iOS/Android 全屏独立模式与刘海屏安全边距 (viewport-fit=cover)。
3. 🌐 自动 mDNS (dsh.local):内置 UDP 5353 responder,自动在局域网广播 dsh.local。
4. 🔐 本地 Root CA 与 HTTPS:生成 10 年有效期的本地根证书及带 SAN 的服务器证书。访问 /dsh-lanmode/ca.crt 即可一键下载信任。
5. 🔔 后台通知 (Web Notifications API):在后台标签页接收回合结束与审批请求系统推送。
6. 🛡️ 安全与认证体系:
- 登录密码支持纯文本与 scrypt 密钥派生,使用 timingSafeEqual 进行恒定时间比较防时序攻击。
- LAN PIN 验证:支持纯文本与 PBKDF2 强哈希(pbkdf2$sha512$100000$salt$hash)。5 次失败自动锁定 15 分钟。
- 设备与会话 Token 均采用 SHA-256 哈希加盐存储。
- 子网角色分离(adminAllow 与 guestAllow),访客子网禁止改写系统设置。
7. ☁️ Cloudflare 隧道与 Tailscale Funnel:
- 支持临时 Quick Tunnel (trycloudflare.com) 与固定 Named Tunnel 模式(Token 通过 TUNNEL_TOKEN 环境变量传递,不暴露在进程列表)。
- 配置项 tunnelPin 强制外网访问通过 LAN PIN 鉴权。
- 支持一键开启 Tailscale Funnel,自带权威 Let's Encrypt 证书。
8. 📱 设备与会话管理:自动识别连接设备型号与操作系统,支持一键撤销单个或全部其它会话。

📦 安装方法

dsh plugin --profile web add @goodandready/dsh-lanmode

⚙️ 配置说明 (cordis.patch.yml)

- id: dsh-lanmode
config:
mode: direct
directPort: 3080
tunnel: off # off, quick 或 named tunnelPin: true tailscaleFunnel: false passwordAuth: false

📄 开源许可证

MIT © GooDAnDReaDY
预览分享卡片长什么样 ↓GooDAnDReaDY/dsh-lanmode
分享 · DeepSeek Harness Hub
GooDAnDReaDY/dsh-lanmode

为 DeepSeek Harness WebUI 提供移动端网关和安全本地网络访问

这是你的仓库?认领条目

回到顶部