文章摘要
"Whosthere"是一款用Go语言编写的局域网发现工具,具有现代化的终端用户界面(TUI),可直观地探索和理解局域网设备。该工具开源,支持多种Go版本,并采用MIT许可证发布。
文章总结
GitHub项目:whosthere - 局域网设备发现工具
项目简介
whosthere是一款基于Go语言开发的局域网(LAN)设备发现工具,采用现代化的终端用户界面(TUI),支持通过直观的方式探索和识别网络中的设备。其核心功能包括无特权并发扫描、设备厂商识别及可选的端口扫描。
核心功能
1. 多协议扫描
- 通过mDNS和SSDP协议发现设备
- 利用TCP/UDP连接触发ARP解析,读取ARP缓存识别设备(无需管理员权限)
- 结合OUI数据库显示设备制造商信息
交互式TUI
- 支持快捷键导航(如
/搜索、j/k上下移动、p启动端口扫描等) - 可配置主题(内置多种风格,支持自定义颜色)
- 支持快捷键导航(如
扩展特性
- 后台守护模式:提供HTTP API(
/devices获取设备列表、/health健康检查) - 端口扫描:预设常见TCP端口(如22/80/443等),需用户授权后使用
- 跨平台支持:Linux、macOS(Windows支持待完善)
- 后台守护模式:提供HTTP API(
安装与使用
- 安装方式:
- Homebrew:brew install ramonvermeulen/whosthere/whosthere
- Go编译:go install github.com/ramonvermeulen/whosthere@latest
- 源码构建:git clone后执行make build
- 运行示例:
- 交互模式:直接运行
whosthere - 守护进程:
whosthere daemon --port 8080
- 交互模式:直接运行
配置与日志
- 配置文件:YAML格式,支持设置扫描间隔(默认20秒)、主题、端口列表等
- 路径优先级:环境变量WHOSTHERE_CONFIG > ~/.config/whosthere/config.yaml
- 日志输出:默认写入~/.local/state/whosthere/app.log,非TUI模式时同步输出至控制台
注意事项
- 法律声明:仅限授权网络使用,未经许可扫描可能违法
- 已知问题:
- Linux剪贴板依赖X11库(Wayland需XWayland兼容层)
- Windows支持尚不完善,欢迎贡献代码
开源贡献
欢迎提交功能建议、BUG报告或PR,重大变更请先通过GitHub Issue讨论。
项目链接:GitHub - ramonvermeulen/whosthere
(注:原文中的徽标链接、详细键位表及完整配置示例等非核心内容已精简,保留关键信息。)
评论总结
以下是评论内容的总结:
1. 工具功能与使用体验
正面评价:用户认为该工具实用,能替代繁琐的路由器界面操作,且界面友好。
- "this is great!...awesome tool, i am definitely going to be using this more often."(coolius)
- "Good stuff, this saves me the trouble of going through router GUI."(kapitanjakc)
问题反馈:部分用户遇到端口扫描不准确、网络接口选择问题或缺少功能(如显示SAMBA名称)。
- "It says 'Open ports: (None)' for all devices on my network, despite there being open ports."(Anonbrit)
- "only thing I miss is it doesn't show SAMBA names."(girishso)
2. 技术实现与改进建议
开发动机:作者旨在结合Go语言学习与网络知识,并受到其他TUI应用启发。
- "Mainly to learn...combine learning Go with learning more about networking."(rvermeulen98)
改进建议:用户希望增加命令行参数(如指定扫描接口)、支持.deb包或解决macOS安全警告。
- "I'd request an
-icommand-line parameter to specify the interface."(84634E1A607A) - "I wish it has a .deb package.."(vzaliva)
- "I'd request an
3. 命名与设计讨论
命名趣味性:部分用户调侃工具名称的潜在双关机会。
- "Surely a missed opportunity to name it 'whogoesthere'."(mrcaramelpants)
- "Big missed opportunity to call it 'Whose LAN is it anyway?'"(jasonjmcghee)
TUI设计争议:用户讨论“现代TUI”的定义及Go语言是否适合开发TUI。
- "I wonder what the definition of 'modern TUI' means...just not using curses?"(petcat)
- "Does the Go standard library have unusually good TUI support?"(zahlman)
4. 平台与兼容性问题
macOS安全限制:部分用户因系统安全警告无法运行工具。
- "Apple could not verify 'whosthere' is free of malware...I would rather not doing."(hk1337)
- "Using brew, I got 'Apple could not verify...'"(GeoffKnauth)
特定网络环境限制:如Tailscale不支持mDNS,影响工具使用。
- "Could be super useful but sadly TS doesn't support mDNS."(apitman)
5. 其他相关讨论
同类开发:有用户分享类似项目或询问技术选型(如tcell vs charmbracelet)。
- "Busy building something similar...hardcode some assumptions."(Havoc)
- "Any reason you went with tcell instead of charmbracelet ecosystem?"(Evidlo)
功能扩展期待:如浏览器支持mDNS/SSDP的设想。
- "I hope browsers could support mDNS or SSDP. We need an Intranet browser!"(est)
总结:评论整体肯定工具的实用性和学习价值,但提出了功能改进、兼容性及安全提示等问题,同时引发了对TUI设计趋势和Go语言生态的讨论。