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

手机安全网关 439436269-ctrl/dsh-pocketd

DeepSeek Harness
439436269-ctrl25 天前有提交已提供中文文档扫描:无法判定

给电脑上的 DSH Web 加密码,手机扫码即可安全访问

30/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分

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

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add 439436269-ctrl/dsh-pocketd
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:需留意
是什么[目录]—
dsh 原生插件 · ui
暂无时间戳·判据 →
装得上吗[实装验证]!
实装验证未通过(unknown),装前请到仓库确认最近更新与 issue
L4 · 真实安装等级说明 →
数据截至 2026/11/03·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/04·判据 →
还在维护吗[仓库]✓
活跃:最近一次提交在 25 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

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

验证判据与等级说明 →

可信度证据

⚠︎ 实装验证未通过(unknown · 2026/11/3) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
安全扫描自动 · 静态分析源码
v2.7.0
⚪ 扫描:无法判定尚无人工评估
展开查看扫描说明与证据 ↓

已尝试扫描但取不到可分析的源码:仓库或包不存在、已删除,或为非 JS/TS 实现、未随包发布源码。无法判定,不代表安全。

  • · 包内无可扫 JS
  • · TS 源码(可能为非 JS 实现或未发布源码),无法判定
扫描于 2026/11/4(1 天前) · 范围 全包扫描(包内未声明入口) · 来源 GitHub 仓库

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

社区实装还没有人打卡 · 装过的第一个就是你
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 手机扫码访问
  • 访问密码保护
  • 反向代理

DSH Web 的 Go 边缘反向代理:loopback 权威改写 + 访问密码,让手机安全访问电脑上的 DeepSeek Harness。零第三方依赖,单个静态二进制。

README

由 DeepSeek 最新模型翻译生成
dsh-pocketd 把 DSH Web 暴露到局域网的边缘反向代理,纯 Go 标准库实现(零第三方依赖),编译产物是单个静态二进制。 定位:不是 DSH 插件,也不能替代 dsh-pocket。 它是一个独立进程,站在 DSH Web 前面,负责「本机之外的人怎么安全地访问它」。 为什么需要这一层 DSH 的 /api 有一道浏览器信任栅栏:只认 loopback(127.0.0.1)权威,或者显式白名单;官方也明确不支持把 web 服务绑到 0.0.0.0——因为那等于把「能执行代码的界面」暴露给整个网络。 本代理的做法是把入站请求的 Host / Origin / Referer / Sec-Fetch-Site 统一改写成 loopback 权威,再转发给本机 DSH。栅栏永远看到 loopback,于是手机可以: 手机浏览器 → http://<电脑内网IP>:3082 → dsh-pocketd → DSH Web (127.0.0.1:19387) Referer 与 Sec-Fetch-Site 也必须改写:DSH 宿主的特权方法栅栏(settings.describe、 credentials. 等)会拒绝 sec-fetch-site: cross-site,并校验 Origin 与 Host 是否匹配,不改写就会在设置/凭据页面上吃 403。
展开完整文档(README 剩余 1 节)
dsh-pocketd

把 DSH Web 暴露到局域网的边缘反向代理,纯 Go 标准库实现(零第三方依赖),编译产物是单个静态二进制。

定位:不是 DSH 插件,也不能替代 dsh-pocket。
它是一个独立进程,站在 DSH Web 前面,负责「本机之外的人怎么安全地访问它」。

为什么需要这一层

DSH 的 /api 有一道浏览器信任栅栏:只认 loopback(127.0.0.1)权威,或者显式白名单;官方也明确不支持把 web 服务绑到 0.0.0.0——因为那等于把「能执行代码的界面」暴露给整个网络。

本代理的做法是把入站请求的 Host / Origin / Referer / Sec-Fetch-Site 统一改写成 loopback 权威,再转发给本机 DSH。栅栏永远看到 loopback,于是手机可以:

手机浏览器 → http://<电脑内网IP>:3082 → dsh-pocketd → DSH Web (127.0.0.1:19387)

Referer 与 Sec-Fetch-Site 也必须改写:DSH 宿主的特权方法栅栏(settings.describe、 credentials. 等)会拒绝 sec-fetch-site: cross-site,并校验 Origin 与 Host 是否匹配,不改写就会在设置/凭据页面上吃 403。

两种部署模式

模式 A:链式部署(本机推荐,实测可用)

挂在已有的 dsh-pocket 前面,由它完成 DSH 的会话握手:

1. 确认 dsh-pocket 的代理在跑(默认 :3081) lsof -nP -iTCP -sTCP:LISTEN | grep 3081

2. 起本代理,用 dsh-pocket 的局域网密码做一次性上游握手
UPIN=$(cat ~/.dsh/dsh-pocket/token-lan)
./dsh-pocketd -port 3082 -upstream http://127.0.0.1:3081 -upstream-pin "$UPIN"

3. 手机打开横幅里打印的 http://<内网IP>:3082,输入本条命令打印的访问密码

链式层的价值:多一道你自己可控的入口(端口、密码、限流、日志、后续可加隧道),而不用改 dsh-pocket 一行代码。

模式 B:直连 DSH(需要 launch token)

./dsh-pocketd -port 3082 -pin 你的8位密码 -launch-token <token> 或让本进程定期执行命令去取: ./dsh-pocketd -port 3082 -pin 你的8位密码 -token-cmd 'cat /path/to/token'

参数

| 参数 | 默认 | 说明 |
| -port | 3082 | 监听端口(dsh-pocket 默认占 3081,错开) |
| -bind | 0.0.0.0 | 监听地址 |
| -upstream | $DSH_WEB_URL 或 127.0.0.1:19387 | 上游地址 |
| -pin | 随机 8 位 | 访问密码 |
| -pin-file | | 从文件读密码 |
| -no-auth | false | 关闭访问密码(仅限完全可信的网络) |
| -lan | true | 关掉后只允许 loopback 访问 |
| -inject | true | 向 HTML 注入非安全上下文所需的 polyfill |
| -launch-token | | DSH web 会话启动 token |
| -token-cmd | | 取 token 的命令(结果缓存 5 秒) |
| -upstream-pin | | 链式部署时上游自己的访问密码 |
| -version | | 打印版本 |

已实现 / 未实现

已实现

- loopback 权威改写(Host / Origin / Referer / Sec-Fetch-Site)
- 访问密码:HttpOnly cookie(值是 sha256(PIN:进程随机密钥),重启即失效)、 URL ?token= 直达、POST /pocket-login 表单登录
- 常量时间比较(防计时侧信道)+ 三层登录限速(单 IP 滑动窗口 / 全局窗口 / 成功清零)
- 来源分级与防伪造:Host 可伪造,用不可伪造的 TCP 源地址给它设下限,只收紧不放松
- 局域网总开关;loopback 与公网不受影响
- 大 JSON/text 流式 gzip;SSE 与 WebSocket 原样透传(FlushInterval: -1)
- HTML 注入 crypto.randomUUID / AbortSignal.any polyfill(http://内网IP 属于非安全上下文,手机浏览器缺这两个 API 会导致页面直接崩)
- 清理历史遗留的 dsh-desktop-* 查询参数
- 链式部署的上游引导

未实现(相对 dsh-pocket 的功能差集)

- cloudflared 公网隧道管理与二维码
- DSH 设置页里的图形化面板(那要求是 JS 插件)
- WebSocket 应用层心跳保活(防 NAT 静默断链)
- Safari 在 http://纯IP 下不保存 3xx cookie 的握手兜底
- brotli 压缩(只做 gzip,免第三方依赖)

已知约束(重要)

独立进程拿不到 DSH 的会话启动 token。

新版 DSH Web 要求首屏 GET /?token=<启动token> 换一个绑定权威的会话 cookie,否则 /api 与 WebSocket 一律 401。这个 token 由 DSH 宿主进程内部生成(cordis 服务的 connection.authenticatedUrl),只存在于宿主进程内。

实测证据(2026-10-10,DSH Desktop 0.2.0-rc.2):

直连上游,即使带全套 loopback 权威头,仍是 401
$ curl -H 'Host: 127.0.0.1:19387' -H 'Origin: http://127.0.0.1:19387' \
-H 'Sec-Fetch-Site: same-origin' http://127.0.0.1:19387/
status=401
body: dsh web authentication required; reopen the URL printed by dsh web.

三条出路,按推荐度排序:

1. 链式部署(模式 A)——让 dsh-pocket 这个插件去握手,本代理只做边缘层。
本机已实测:经它拿到完整的 DSH 页面(45486 字节,含 __DSH_BOOT__)。
2. 自己提供 token(模式 B)——-launch-token / -token-cmd。
3. 上游 DSH 若提供「为 loopback 客户端签发 token」的接口,本代理即可直连。

构建与测试

go build -o dsh-pocketd .
go test ./... # 11 个用例:分级/防伪造/限速/认证/改写/注入/压缩/局域网开关
go vet ./...
gofmt -l . # 无输出即合规

与 dsh-pocket 的关系

- 行为参考:dsh-pocket(作者 shaobeichen,GPL-2.0)。
本项目的代码由行为规格独立实现,未复制其源码;polyfill 等属规范定义的标准实现。
- 由于参考项目是 GPL-2.0,且本项目在实现过程中研读过其源码,本仓库同样采用 GPL-2.0(见 LICENSE),以规避许可争议。若你要换许可,请先确认与参考项目的边界。
- dsh-pocket 是成熟的插件方案(含公网隧道、图形面板、二维码);本项目是它的 边缘补充,不是替代品。
预览分享卡片长什么样 ↓439436269-ctrl/dsh-pocketd
分享 · DeepSeek Harness Hub
439436269-ctrl/dsh-pocketd

给电脑上的 DSH Web 加密码,手机扫码即可安全访问

这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。
认领条目 →
回到顶部