radive22/tcp-port-scanner

GitHub: radive22/tcp-port-scanner

一个 Python CLI 工具,通过 ARP 表抓取和 ping 扫描发现局域网设备,并将结果渲染为交互式 HTML 拓扑图。

Stars: 0 | Forks: 0

# 网络拓扑映射器 一个 Python CLI 工具,通过抓取 ARP 表发现局域网中的设备,并使用 `networkx` + `pyvis` 渲染生成交互式 HTML 拓扑图。 状态:开发中(Phase 0 — 尚未开始) ## 为什么开发这个工具 在从事 SRE/Cloud Engineering 6 年之后,我使用过大量的服务地图和拓扑仪表盘(Grafana 节点图、CMDB 可视化),但从未自己亲手构建过发现和图形渲染的 pipeline。这个项目是我学习 Python 的方式——包括 `subprocess`、并发(`ThreadPoolExecutor`,Go 中 goroutines 的 I/O 密集型对应物),特别是 `networkx`/`pyvis`。在图形分析和交互式可视化方面,Python 的这些工具明显比我在 Go 中能找到的替代方案更胜一筹。 ## 适用范围 该项目映射的是**单主机星型拓扑**:你的 PC 作为中心节点,在同一个 LAN 中发现的每台设备都是连接到它的节点。它**不会**进行真正的多跳交换机级别的拓扑(设备到设备的链路)——那需要 LLDP/CDP 邻居数据,这通常只能在企业级管理型交换机上获取,而不是普通的家用路由器。 SNMP 被列入了路线图,作为针对 Docker 中**模拟**设备(而不是真实路由器)的额外阶段——因此它不依赖于你的家用路由器是否碰巧支持 SNMP(大多数消费级路由器默认不暴露该功能)。 ## 技术栈 | 组件 | 技术 | 备注 | |---|---|---| | 语言 | Python 3.13+ | 使用 `uv` 管理环境/依赖 | | 发现 | `subprocess` + `arp -a` (Windows), ping 扫描通过 `ipaddress` + `concurrent.futures.ThreadPoolExecutor` | 先被动读取 ARP,再通过主动扫描填充缓存 | | Graph | `networkx` | 根据发现的设备构建节点/边 | | 可视化 | `pyvis` | 渲染独立的交互式 HTML 文件 | | CLI | `argparse` (标准库) | 简单的 flags:子网、输出文件、超时时间 | | Logging | `loguru` | 使用结构化日志,而不是 `print()` | | Lint & Test | `ruff`, `mypy --strict`, `pytest`, `pip-audit` | 在每次 push 前通过 Justfile 运行 | 详细的逐阶段路线图请参见 [ROADMAP.md](ROADMAP.md)。当前阶段:**Phase 0 — 项目设置**,尚未开始。 ## 如何运行 尚不可用——此 CLI 仍在开发中。目标用法: ``` uv run python main.py --subnet 192.168.1.0/24 --output topology.html ``` ## 我学到了什么 将随着项目的推进逐步填写。 ## License MIT — 请参见 [LICENSE](LICENSE)
标签:ARP, Python, 安全规则引擎, 局域网发现, 开源情报, 无后门, 流量捕获, 网络拓扑, 逆向工具