dsh-net-hosts:在 DSH 里看清本机软件连了哪些域名

前言

在智能体或本地开发环境里排查「哪段代码在访问外网」,常见做法是临时开抓包、翻系统监视器,或者在终端里反复跑 lsof -i。DeepSeek Harness(DSH)把能力做成插件生态;若你希望不改动网络、只读地汇总套接字,并在界面与 Agent 工具里复用同一份快照,dsh-net-hosts 针对的就是这件事。下面按定位、能力、安装与限制说明用法。

这是什么

dsh-net-hosts 是 DSH 插件,维护者 Arthas1in,仓库 Arthas1in/dsh-net-hosts。它把 lsof -i 的套接字表整理成两件事:可随时打开的实时面板,以及给 Agent 调用的 net_connections 工具。插件全程只读——不建立连接、不修改配置、不向外部发送数据。

核心功能

实时面板(多视图)

面板入口在 DSH 左侧栏「上下文洞察」下的「网络连接」;默认是「软件」视图,直接对应「这台机器上哪个软件在连哪些域名」。

  1. 软件:每个 App 一行,列出域名与真实目的 IP(经本地代理的连接会还原域名并高亮);含连接数、域名数、最近活动(秒级)、所在网络。Chrome / Electron / 钉钉等会把 helper 进程归并回宿主 App;无法归并的标为「系统组件」。展开行可看各 host 首次/末次出现时间,以及「查看全部连接」。
  2. 时间线:只记录新出现的连接(秒级);启动后首份快照作基线,最多保留 400 条;点条目可跳到连接明细。
  3. 关注:可对 App 标星;出现新域名时面板提示(授权后也可发系统通知)。
  4. 连接明细:每条 TCP/UDP 一行,含状态、进程/PID、本地 → 远端、主机名;代理连接显示真实目标与「代理」徽标,按 pid + 四元组 去重。
  5. 域名·IP:按对端聚合,适合回答「整机在和谁通信」;代理连接按域名聚合。
  6. 监听端口:仅 LISTEN 状态,便于查占端口进程。

通用能力包括:搜索、按公网/局域网/本机筛选、TCP/UDP 筛选、表头排序、展开行、一键复制地址;2 秒自动刷新(页面隐藏时暂停,可手动暂停/刷新)。无侧边栏入口时可用悬浮胶囊或快捷键打开(macOS 为 ⌘⇧N,Windows/Linux 为 Ctrl+Shift+N)。界面用 Shadow DOM 隔离,亮色/暗色跟随系统。

Agent 工具 net_connections

插件将同一份数据注册为 net_connections,参数如下:

参数 类型 说明
state string all(默认)/ established / listening
scope string all(默认)/ public / lan / loopback
limit number 默认 40,上限 200

返回文本表:状态 进程(PID) 协议 本地 -> 远端 主机名。注册失败只写 debug 日志,面板仍可用。

只读 HTTP 接口

同源 GET:

路径 说明
/net-hosts/ 独立页面
/net-hosts/api/snapshot 快照 JSON;?fresh=1 跳过 700ms 复用
/net-hosts/api/health { ok, name, version }

也可访问 http://127.0.0.1:<dsh 端口>/net-hosts/。鉴权 fail-closed:Host 须为回环或可信主机列表(DSH_NET_HOSTS_TRUSTED_HOSTS / DSHW_TRUSTED_HOSTS),拒绝跨站 Sec-Fetch-Site 等。

本地代理下的真实域名

开着系统代理时,lsof 往往只能看到 127.0.0.1:7897 这类本地端口。插件会尝试读 Clash 系内核的 HTTP 控制接口,用 metadata.sourcePort 与本地端口配对,把连接还原为真实域名与 IP。发现顺序包括环境变量 DSH_NET_HOSTS_PROXY_URL / DSH_NET_HOSTS_PROXY_SOCKET、常见客户端配置、Verge 服务 socket、以及端口 9097 / 9090 / 9091 / 6170 等;控制接口不可达时静默降级,不影响 lsof 主流程。

安装与启用

环境要求(见 README):DSH >= 0.2.0,macOS(依赖系统自带 lsof);package.json 中 Node >= 20,当前包版本 0.5.2,许可证 MIT。

本地开发安装(link):

dsh plugin --profile web add link:~/dsh-plugins/dsh-net-hosts

若使用 desktop profile,需把包加入 ~/.dsh/profiles/desktop/package.json 的 dependencies,将 dsh-net-hosts 追加到 dsh.profile.bundles,并在 profile 的 node_modules 中建立指向源码目录的软链接,重启 DSH 后生效。

安装后左侧栏应出现「网络连接」;老版本或 web 版可能出现左下角「网络」胶囊(徽标为已建立连接数)。改 ui.js 后页面 ⌘R / Ctrl+R 即可;改 lib/collect.js 等宿主层需完全退出并重启 DSH。

社区目录页:skillhub.cn/plugins/Arthas1in/dsh-net-hosts。README 说明上架 npm 并提交 awesome-dsh-plugin 列表后可从市场一键安装,具体见仓库 PUBLISH.md;本文安装命令仅以 README 给出的 link 示例为准,勿自行拼接未在文档出现的 dsh plugin add 形式。

典型用法

  1. 人肉排查:打开「软件」视图,按最近活动排序,展开可疑 App 看 host 首次/末次时间;需要「刚才一秒谁连了什么」切到「时间线」。
  2. 占端口:打开「监听端口」,对照进程名与 PID。
  3. Agent 查询:在 DSH 对话中让模型调用 net_connections,例如限制 state: established、scope: public、limit: 80,快速拿到文本摘要。
  4. 代理环境:确认 Clash / mihomo 控制面可达或设置 DSH_NET_HOSTS_PROXY_URL;在连接明细里看带「代理」徽标的行与展开后的规则链路。
  5. 开发调试:仓库根目录执行 npm test(node --test test/*.test.js)验证数据层。

适用场景与注意

适合:在本机(尤其 macOS)上做联调、隐私自查、端口冲突排查,或希望 Agent 在不装额外监控的前提下读取当前连接快照的 DSH 用户。

务必注意:

  • 插件以当前 DSH 进程用户权限运行;非 root 时只能看到本用户进程,其他用户连接不可见(界面底部会标注)。安装前请自行审阅源码与 MIT 许可证。
  • README 写明平台依赖为 macOS + lsof;在其他系统上行为未在资料中承诺。
  • 反向 DNS 依赖本机配置,无 PTR 则显示 —;未开代理或非 Clash 系代理时,多数连接只能看到 IP。
  • WebKit 等系统网络进程无法归属到具体 App,会显示为「系统组件」。
  • lsof 需 fork 子进程,不建议把刷新间隔压到 1 秒以下。

结尾

dsh-net-hosts 把 lsof 与可选的本地代理连接表合成一套只读快照,用面板回答「哪个软件连了谁」,用 net_connections 把同一数据交给 Agent。需要进一步了解实现,可看仓库 lib/collect.js、lib/proxy.js、lib/ui.js 的分工说明。

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

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

小夜