Excapesx/dsh-plugins--plugins-dsh-mobile-access ↗★ 1

dsh-mobile-access

手机访问:在界面左栏一键启停反向代理,让手机在同一局域网内直接打开 DSH 界面 适合需要用手机调试或查看DSH界面的用户,需在可信局域网内使用。

Package
dsh-mobile-access
Compatibility
Unverified
Version
1.0.0
License
MIT
Last updated
Oct 22, 2026

Other repositories with this package name

Install

$npx -p @deepseek-ai/dsh dsh plugin --profile web add github:Excapesx/dsh-plugins#29751b625ee357d4e96591160fae11343c7d00a9&path:plugins/dsh-mobile-access

dsh-mobile-access

DSH 插件:在界面左栏一键启停一个内嵌反向代理,让同一局域网里的手机直接打开 DSH 界面,手机端不需要 token、不需要配对。

安装步骤见仓库根目录 README。

⚠️ 开启期间,任何能访问该端口的设备都拥有对本机 DSH 的完全控制权(等价于本机代码执行),且不需要登录。只在可信局域网里开,用完随手关闭。

目录结构

dsh-mobile-access/
├─ package.json        # name / dsh.bundle.patch / dsh.client 三处声明
├─ cordis.patch.yml    # bundle 层:把本包作为一行 insert 进宿主组合
└─ lib/
   ├─ index.js         # Host 半:内嵌代理 + 控制面路由
   └─ client.js        # 浏览器半:左栏按钮 + 浮动面板

为什么不直接 --trusted-host

DSH 的 /api 信任围栏只放行环回(或显式 trusted)的 Host,认证又是绑定 authority 的签名 cookie。所以「让手机能访问」= 两件事都得解决。本插件的做法是:

  1. 重写头:把每个转发请求的 Host / Origin 改写成 127.0.0.1:,围栏认为这是本机自己发的请求,放行;
  2. 现场签 cookie:用本机凭据 client-connection/browser-session 的密钥,按 DSH 的 v1.. 格式签一张 dsh-auth- cookie 注入每个请求 —— 手机侧因此完全不需要凭据。

好处是不用改 DSH 任何配置、不用重启带参数,也不往手机上放任何长期 secret;代价是这个端口本身就是一把钥匙,所以默认不自动启动、面板上常驻风险提示、插件卸载或 DSH 退出时监听器随之关闭。

控制面

挂在 DSH 自己的 webServer 上,只有同源(本机浏览器)会调:

方法路径说明
GET/dsh-mobile-access/state当前状态 + 手机该开的网址
POST/dsh-mobile-access/start启动代理(幂等,重复调用返回当前状态)
POST/dsh-mobile-access/stop停止代理(未启动时是空操作)

state 形状:

{
  "running": true,
  "dshPort": 51596,
  "proxyPort": 3081,
  "urls": [ { "ifName": "WLAN", "address": "192.168.1.7", "url": "http://192.168.1.7:3081" } ],
  "error": null
}

urls 只在 running 时有内容;启动失败(端口被占、取不到签名密钥)时 error 是具体原因,面板会原样显示。

实现细节

  • 代理监听 0.0.0.0: ,默认 3081,转发到 127.0.0.1:。
  • 普通 HTTP 用 http.request 直通;WebSocket / 任意 upgrade 请求手工重建请求行后裸 socket 双向 pipe —— 不处理 upgrade 的话,手机上会话流式输出会一直转圈。
  • cookie 寿命 29 天,比 DSH 默认的 30 天短一天留余量;签名密钥 32 字节,长度不对直接抛错而不是将就用。
  • 启动前会过滤 169.254.0.0/16 链路本地地址(网卡没拿到 DHCP 时的占位地址,手机连不上)。
  • 签名密钥懒加载并缓存:apply 执行时 credentials 服务可能还没就绪。
  • 插件被禁用/卸载时 ctx.effect 的清理函数会 stop(),不会留下野监听。

已知限制

  • 只支持 IPv4 局域网;urls 不含 IPv6。
  • 代理端口固定从 3081 起,端口被占时不会自动换端口,需要你腾出来。
  • 没有内置 TLS —— 手机浏览器地址栏会标「不安全」,这是明文 HTTP 的正常表现。
  • 认证靠 cookie 签发,没有额外口令;安全边界完全由「端口谁能访问到」决定。