一个用 Go 编写的局域网发现工具,带有交互式终端用户界面 (TUI)。以直观的方式发现、探索和了解你的局域网。
Whosthere 通过 mDNS 和 SSDP 扫描器执行 无特权的并发扫描。此外,它还会扫描本地子网,尝试 TCP/UDP 连接以触发 ARP 解析,然后读取 ARP 缓存 来识别局域网内的设备。这种技术无需提升权限即可填充 ARP 缓存。所有发现的设备都会通过 OUI 查询进行增强,以显示制造商(如果可用)。
Whosthere 以友好、直观的方式回答了每个网络管理员都会问的问题:“我的网络上都有谁?”

通过 Homebrew 使用 brew:
brew install whosthere
在 NixOS 上使用 nix:
nix profile install nixpkgs#whosthere
在 Arch Linux 上使用 yay:
yay -S whosthere-bin
如果你的包管理器未列出,你也可以通过 Go 安装:
go install github.com/ramonvermeulen/whosthere@latest
或者 从源码构建:
git clone https://github.com/ramonvermeulen/whosthere.git
cd whosthere
make build
此外,你可以从 发布页面 下载预构建的二进制文件。
运行 TUI 进行交互式发现:
whosthere
以 CLI 模式运行,执行单次扫描并输出结果:
whosthere scan -t 5
将结果输出到 JSON 文件:
whosthere scan -t 5 --json --pretty > devices.json
作为守护进程运行并启用 HTTP API:
whosthere daemon --port=8080
更多命令行选项可通过运行以下命令查看:
whosthere --help
Whosthere 支持多种配置方式,优先级如下(从高到低):
whosthere --help。WHOSTHERE__ 为前缀。参见 通过环境变量配置。DefaultConfig()。Whosthere 按照以下顺序查找配置文件,并使用第一个找到的:
--config 标志或 WHOSTHERE_CONFIG 环境变量指定的路径$XDG_CONFIG_HOME/whosthere/config.yaml(如果设定了 XDG_CONFIG_HOME)~/.config/whosthere/config.yaml(默认位置)配置示例:
# 取消下一行的注释以配置特定的网络接口 - 未设置则使用操作系统默认
# network_interface: eth0
# 启用后,所有网络接口的设备都将显示,并在切换接口时保持
# 注意:如果两个接口共享同一子网(例如都使用192.168.1.x),设备可能会合并
# 因为它们是按 IP 地址识别的。在重叠子网上请谨慎使用。
all_interfaces: false
# 每隔多久运行一次发现扫描
scan_interval: 20s
# 每次扫描的最大超时时间,建议小于扫描间隔
scan_timeout: 10s
scanners:
mdns:
enabled: true
ssdp:
enabled: true
arp:
enabled: true
sweeper:
enabled: true
interval: 5m
timeout: 20s
port_scanner:
timeout: 5s
# 在发现的设备上扫描的 TCP 端口列表
tcp: [21, 22, 23, 25, 80, 110, 135, 139, 143, 389, 443, 445, 993, 995, 1433, 1521, 3306, 3389, 5432, 5900, 8080, 8443, 9000, 9090, 9200, 9300, 10000, 27017]
splash:
enabled: true
delay: 1s
theme:
# 禁用时,TUI 将使用终端的默认 ANSI 颜色
# 另请参见 NO_COLOR 环境变量以完全禁用 ANSI 颜色
enabled: true
# 可用主题的完整列表见 https://github.com/ramonvermeulen/whosthere/tree/main/internal/ui/theme/theme.go
# 将名称设置为 "custom" 以使用下面的自定义颜色
# 对于未配置的任何颜色,将使用默认主题值作为回退
name: default
# 完全禁用 ANSI 颜色,覆盖 theme.enabled
# 也可通过 NO_COLOR 或 WHOSTHERE__THEME__NO_COLOR 环境变量设置
# no_color: false
# 自定义主题颜色(取消注释并将 name: custom 设置为使用)
# primitive_background_color: "#000a1a"
# contrast_background_color: "#001a33"
# more_contrast_background_color: "#003366"
# border_color: "#0088ff"
# title_color: "#00ffff"
# graphics_color: "#00ffaa"
# primary_text_color: "#cceeff"
# secondary_text_color: "#6699ff"
# tertiary_text_color: "#ffaa00"
# inverse_text_color: "#000a1a"
# contrast_secondary_text_color: "#88ddff"
YAML 配置中的任何选项都可以通过以 WHOSTHERE__ 为前缀的环境变量设置(注意双下划线)。嵌套的配置键用双下划线分隔,键名不区分大小写。
示例:
WHOSTHERE__SPLASH__ENABLED=false - 禁用启动画面,相当于 YAML 配置中的 splash.enabled: falseWHOSTHERE__SPLASH__DELAY=2s - 将启动画面延迟设置为 2 秒,相当于 YAML 配置中的 splash.delay: 2sWHOSTHERE__SCAN_INTERVAL=30s - 将扫描间隔设置为 30 秒,相当于 YAML 配置中的 scan_interval: 30sWHOSTHERE__SCANNERS__MDNS__ENABLED=false - 禁用 mDNS 扫描器,相当于 YAML 配置中的 scanners.mdns.enabled: falseWHOSTHERE__PORT_SCANNER__TCP=80,443,8080 - 设置自定义扫描的 TCP 端口,相当于 YAML 配置中的 port_scanner.tcp: [80, 443, 8080]WHOSTHERE__THEME__NAME=cyberpunk - 将主题设置为 cyberpunk,相当于 YAML 配置中的 theme.name: cyberpunk当 Whosthere 以守护进程模式运行时,会公开一个非常简单的 HTTP API,包含以下端点:
| 方法 | 端点 | 描述 |
|---|---|---|
| GET | /devices | 获取所有已发现设备的列表 |
| GET | /device/{ip} |
主题可以通过配置文件配置,也可以通过 CTRL+t 快捷键在运行时切换。可用主题的完整列表可在 这里 找到,欢迎提交 PR 添加你自己的主题!
主题配置示例:
theme:
enabled: true
name: cyberpunk
当 name 设置为 custom 时,可以使用其他颜色选项创建自己的自定义主题。
当 enabled 选项设置为 false 时,TUI 将使用终端的默认 ANSI 颜色。
当设置了 NO_COLOR 环境变量时,所有 ANSI 颜色将被禁用。
日志写入应用程序的状态目录:
$XDG_STATE_HOME/whosthere/app.log(如果设定了 XDG_STATE_HOME)~/.local/state/whosthere/app.log(Linux/MacOS 回退)%LOCALAPPDATA%/whosthere/app.log(Windows 回退)当不在 TUI 模式下运行时,日志也会输出到控制台。
Whosthere 支持以下平台:
要使剪贴板功能正常工作,需要使用 go-clipboard 的分支。 请确保为你的操作系统安装了相应的复制工具:
| 操作系统 | 支持的复制工具 |
|---|---|
| Darwin | pbcopy |
| Windows | clip.exe |
Whosthere 旨在用于你有权限进行网络发现和扫描的网络,例如你自己的家庭网络。未经授权扫描网络可能是非法且不道德的。在使用此工具之前,请务必获得适当授权。
此工具主要出于教育目的和家庭网络探索而创建。虽然实用,但不应将其视为专业级的网络监控解决方案。结果基于无特权扫描技术,可能不全面。对于关键网络分析或安全评估,请考虑使用有正式支持的专业工具。
欢迎提出贡献和建议,例如功能请求、错误报告或改进!请随时在 GitHub 仓库上提交 Issue 或 Pull Request。在实现重大更改之前,请务必通过 GitHub Issue 进行讨论。
| 按键 | 操作 |
|---|
/ | 开始正则搜索 |
k | 向上 |
j | 向下 |
g | 回到顶部 |
G | 回到底部 |
y | 复制选中设备的 IP |
Y | 复制选中设备的 MAC |
enter | 显示设备详情 |
CTRL+t | 切换主题选择器 |
CTRL+i | 切换网络接口选择器 |
CTRL+c / q | 停止程序 |
ESC | 清除搜索 / 返回 |
p (详情视图) | 在设备上启动端口扫描 |
tab (模态视图) | 切换按钮选择 |
| 变量 | 描述 |
|---|
WHOSTHERE_CONFIG | 配置文件的路径,用于覆盖默认位置。 |
WHOSTHERE_LOG | 设置日志级别(例如 debug、info、warn、error)。默认值为 info。 |
NO_COLOR | 在 TUI 中禁用 ANSI 颜色。 |
| 获取特定设备的详细信息 |
| GET | /health | 健康检查 |
| Linux/FreeBSD/NetBSD/OpenBSD/Dragonfly | X11: xsel, xclip Wayland: wl-copy |