dsh-traffic-guard:按量代理下的字节预算门控

前言

在 DeepSeek Harness(DSH)里跑智能体时,下载往往走系统或本地 HTTP 代理;若代理套餐按流量计费,一次 curl、git clone 或 pip install 就可能吃掉数百 MB。桌面应用的夜间更新也会走系统代理,和 CLI 子进程「有的走代理、有的直连」混在一起,账单里又很难按应用或主机归因。社区里已有侧重 SSRF、出站白名单的 egress 类插件;dsh-traffic-guard 把重点放在另一件事:在计量代理上为下载设硬预算、本地记账,并采用「直连优先、仅在直连卡住时才升代理」的路由策略。下面介绍它是什么、能做什么,以及如何安装与使用。

这是什么

dsh-traffic-guard(GitHub:JerryLingWuQ/dsh-traffic-guard)由维护者 JerryLingWuQ 发布,在 SkillHub 社区目录中归类为 admin-security。它是 DSH 插件,同时提供可单独使用的 CLI netguard;跨 macOS、Linux、Windows。一句话定位:面向计量代理的智能体字节预算门控——直连默认免费、代理字节按次/按日封顶,全程写入本地 JSONL 账本。

核心能力

路由与预算

层级 行为(据 README)
路由 默认直连;仅 proxy_hosts 中的主机在直连失败、零字节或读速过慢后才可用代理。代理地址来自配置、环境变量或 OS 探测,无硬编码端口。
预算 经代理的流量受单次与单日硬上限约束(示例配置为单次 134217728 字节、单日 314572800 字节;README 默认表述为 128 MiB / 300 MiB)。超限直接失败(退出码 3),仅 --force 可 override。直连不计费。
重定向 不自动盲跟;每一跳重新评估(借鉴 SSRF-guard 类插件思路),避免从代理主机重定向到直连主机时仍走代理。
预检与超时 Content-Length 超过单次预算则不下载;流式读取中计数,溢出则中止。整条重定向链共享一个 max_time,避免多跳叠长时间。
账本 每次调用一行 JSONL:时间、URL、主机、路由、字节、耗时、结果、匹配规则;report 可按日、按主机汇总。
失败缓存 近期直连反复失败的主机会跳过直连尝试,减少每次约 8 秒的等待。

暴露给模型的工具

Host 插件向模型提供三个工具:net_usage、net_probe、net_download。底层与 CLI 共用同一套 netguard 逻辑。

代理发现(优先级)

  1. config.proxy.url(如 http://127.0.0.1:7890)
  2. 环境变量 NETGUARD_HTTP_PROXY
  3. 操作系统:macOS scutil --proxy;Windows WinINET;GNOME gsettings

README 说明:实现不绑定某一代理厂商,只需本地 HTTP/HTTPS 代理端口;Python urllib 不支持纯 SOCKS,需使用客户端的 HTTP 代理口或本地 HTTP→SOCKS 桥接。

与相关插件的分工

同生态内已有出站安全类插件;本仓库 README 明确:若需要 SSRF / 防外泄,应选用那些项目;dsh-traffic-guard 的目标是避免烧穿计量套餐。它从 JackZo400/dsh-netguard 等借鉴了逐跳重定向复检、Content-Length 预检、整链超时等机制,但产品焦点是预算与审计,而非 IP 解析与白名单拦截。

安装与启用

官方 README 给出的安装方式为:

dsh plugin --profile <profile> add github:JerryLingWuQ/dsh-traffic-guard

也可通过 plugin_manager 的 install_bundle,将本仓库绝对路径作为 target 安装本地 bundle。插件仅依赖 Node 内置模块(engines.node 为 >=18.17),无额外 dsh 依赖。

迁移或新机使用时,README 归纳需要:Python >= 3.9、Node >= 18.17、dsh,以及本地 HTTP 代理端口,并按新网络编辑 proxy_hosts / direct_hosts。账本默认在 ~/.dsh/netguard/ledger.jsonl,按机器独立;预算仅由 netguard 强制执行,OS 与代理客户端仍有各自限额。

典型用法

CLI(可脱离 DSH 使用)

先准备配置目录与配置文件(示例来自 README):

export NETGUARD_HOME=~/.dsh/netguard      # 可选,此为默认
cp cli/config.example.json "$NETGUARD_HOME/config.json"

python3 cli/netguard.py status
python3 cli/netguard.py probe https://github.com/
python3 cli/netguard.py dl https://example.com/file.zip -o /tmp/file.zip
python3 cli/netguard.py report --days 7

退出码:0 成功;3 预算或体积拒绝;4 网络失败;5 需要代理但不可用。

配置示例

配置文件路径:$NETGUARD_HOME/config.json(默认 ~/.dsh/netguard/config.json)。cli/config.example.json 中有完整字段说明;路由与预算片段如下:

{
  "route": {
    "proxy_hosts": ["github.com", "*.githubusercontent.com", "huggingface.co"],
    "direct_hosts": ["*.deepseek.com", "*.npmmirror.com", "*.aliyun.com"]
  },
  "budget": { "per_call": 134217728, "per_day": 314572800 }
}

proxy_hosts 表示允许在直连卡住时使用代理的主机,并非「必须走代理」;direct_hosts 优先级更高,永不走代理。

适用场景与注意

适合谁: 使用 Clash/mihomo、Surge、企业网关、SSH 隧道转 HTTP 等任意本地 HTTP 代理,且套餐按流量计费;希望在 DSH 智能体下载路径上统一「直连优先 + 代理字节封顶 + 可审计账本」的开发者。

务必知晓的限制(README Limitations):

  • 不是 OS 级防火墙。 只约束经 netguard / 插件工具发起的下载;裸跑 curl、git clone、应用自动更新仍会消耗套餐流量。
  • 插件在 当前 dsh 进程权限 下运行;安装前应阅读源码与 MIT 许可证,确认策略符合你的安全与合规要求。
  • 路线图仍含 SOCKS5、ctx.approval 超预算询问、npm 发布等未完成项;当前 HTTP/HTTPS 代理为主。

社区目录 SkillHub 插件页 与 GitHub 仓库相互独立,并非 DeepSeek / 幻方官方应用商店;选型以仓库 README 与版本 1.1.0(package.json)为准即可。

结尾

dsh-traffic-guard 把计量代理上的智能体下载收成一条可审计策略:直连优先、仅在卡住时升代理、硬预算、本地账本。若你已在 DSH 生态里用其他插件做 SSRF 或出站白名单,可把它当作「流量钱包」补一层,避免单次 agent 行为拖垮套餐。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye