轻松可视化本地网络和容器拓扑
当家庭服务器或工作站积累了数十个容器、虚拟机和测试服务时,跟踪它们变得困难。最终你会问自己:数据库现在运行在哪个 IP 上,哪些端口暴露了,那个旧的工作节点连接到了哪些 Docker 网络?通常你必须打开终端,grep 一下 2 的输出,运行 nmap,然后在脑海中手动拼凑信息。
我最近发现了 Atlas,这是开发者 Karam Ajaj 的开源项目。这个工具接管了常规工作:它扫描本地子网,通过 Docker socket 拉取容器详情,并在浏览器中渲染交互式网络拓扑图。
引擎盖下是什么,它如何工作
Atlas 的架构结合了几个熟悉的组件,打包成单个容器:
- 扫描器使用 Go 1.22 编写。该二进制文件通过 ARP 和 ping 执行低级网络请求,查询 Docker socket,并对开放端口进行深度探测。所有发现都存储在本地 SQLite 数据库中。
- 后端运行在 FastAPI 上。它通过 REST API 提供已发现的主机,管理会话,并接受启动扫描的命令。
- Web 界面使用 React 构建,由 NGINX 提供服务,同时代理 API 请求。
这个技术栈自主运行。容器内无需设置 cron:定期子网轮询由 Go 定时器处理。
关键特性
深度 Docker 检查
许多类似工具在容器有多个网络接口时会遇到困难。Atlas 分别跟踪每个接口。如果容器有多个内部 IP 和 MAC 地址,它们都会出现在图表中,并绑定到特定的网络名称。该工具还解析镜像元数据,尝试确定操作系统类型。
发现相邻主机
Atlas 不会止步于本地主机。3 变量允许你指定逗号分隔的子网列表,例如 4。扫描器发现可用设备,对操作系统进行指纹识别,并检查可访问的端口。从不同网络适配器可见的同一主机将标记为相应的接口标签。
交互式可视化
网络图可以在圆形和分层布局之间切换。如果图形视图在某个时刻不方便,可以使用标准主机表,其中包含所有参数、过滤器和搜索功能。界面对移动端友好,因此你可以从手机检查网络状态。
通过 API 灵活调度
检查间隔在启动时设置,但可以动态更改而无需重启容器。专用 API 端点处理此操作:
0如何自行部署
尝试它的最快方法是运行现成的 Docker 镜像。该工具需要访问主机网络和守护进程 socket:
15 和 6 标志是扫描期间发送低级数据包所必需的。如果未设置管理员密码,UI 身份验证默认禁用。当安全性至关重要时,设置 7,之后 Web 界面将受登录屏幕保护,API 端点将需要 bearer 令牌。
启动后,Web 界面可在 8 处访问,交互式 Swagger 文档在 9 处。
适用对象
Atlas 非常适合家庭实验室、小型办公室基础设施,或频繁启动和关闭测试环境的专用暂存服务器。该项目消除了维护本地地址心理映射的需要,并帮助你及时发现被遗忘的开放端口。
如果你想先感受一下界面,作者在 10 处维护了一个公共演示,用户名为 11,密码为 12。源代码根据 MIT 许可证发布,因此你可以放心地将该项目用于自己的自动化脚本。
相关项目