eve-0607/portwatch

GitHub: eve-0607/portwatch

一款面向 homelab 环境的轻量级 CLI 工具,用于扫描 TCP 端口、持久化追踪服务并查找可用端口。

Stars: 1 | Forks: 0

# Portwatch — 轻量级端口扫描器与服务追踪工具 [![Python](https://img.shields.io/badge/Python-3.12+-blue.svg)](https://python.org) [![License: MIT](https://img.shields.io/badge/License-MIT-purple.svg)](LICENSE) 一款用于监控监听 TCP 端口、追踪 homelab 环境中的服务,并将关键基础设施标记为不可触碰的 CLI 工具。由 [Eve](https://github.com/eve-0607) 开发。 ## ✨ 功能 | 功能 | 描述 | |---------|-------------| | 🔍 **端口扫描** | 发现所有监听的 TCP 端口及其进程信息(通过 `ss` 或 `/proc/net/tcp`) | | 📋 **服务注册表** | 基于 JSON 的持久化注册表,用于记录已知服务及其名称 | | 🔒 **关键端口** | 将基础设施端口标记为关键——该工具绝不会建议触碰这些端口 | | 🔎 **空闲端口查找** | 在指定范围内查找可用端口,排除已使用和已保留的端口 | | 🏷️ **服务标记** | 为端口号提供易于理解的名称,方便识别 | ## 🚀 安装 ### 从源码安装(推荐) ``` git clone https://github.com/eve-0607/portwatch.git cd portwatch pip install -e . --break-system-packages ``` 这将以可编辑/开发模式安装 `portwatch` CLI 命令。 ## 💻 用法 Portwatch 使用 argparse 实现清晰的子命令,并内置帮助信息: ``` # 获取帮助 portwatch --help # 扫描系统上所有 listening ports portwatch scan # 显示已保存的 service registry 状态 portwatch status # 通过端口号注册新 service portwatch add 8080 "qBittorrent" # 将端口标记为 critical(永不建议修改) portwatch critical 22 --name "SSH daemon" # 在默认范围 (5000-6500) 内查找空闲端口 portwatch free # 在自定义范围内查找空闲端口 portwatch free 10000 20000 # 从 registry 中移除 service portwatch remove 8080 ``` ### 示例:完整扫描输出 ``` $ portwatch scan Port Status Process Name --------------------------------------------------------------------------- 22 🔒 CRITICAL sshd SSH daemon 5678 ✅ tracked n8n N8n 8080 ✅ tracked qbittorrent qBittorrent 8123 ✅ tracked homeassistant HomeAssistant 9999 ⚠️ unknown python3 (unregistered) ``` ## 🏗 架构 ``` portwatch/ ├── src/portwatch/ │ ├── __init__.py # Package metadata & version │ ├── cli.py # CLI entry point with argparse subcommands │ ├── port_scanner.py # Port discovery (ss / /proc/net/tcp) │ └── service_registry.py # JSON-backed persistent registry ├── tests/ # Test suite ├── pyproject.toml # Build config & dependencies └── README.md # You are here ``` ### 设计原则 - **零外部依赖** — 仅使用 Python 标准库(`subprocess`、`json`、`os`) - **数据隔离** — 所有状态都保存在 `~/.eve/services.json` 中,从不修改系统文件 - **平滑降级** — 如果 `ss` 不可用,会直接回退到解析 `/proc/net/tcp` - **原子写入** — 注册表更新采用“临时文件-然后重命名”机制以防止数据损坏 - **CLI 优先** — 专为终端使用而设计,带有 emoji 状态指示器和整洁的表格输出 ## ⚙️ 配置 服务注册表位于 `~/.eve/services.json`。其结构如下: ``` { "critical": [22, 80, 443], "services": { "22": "SSH daemon", "80": "Heimdall dashboard", "5678": "N8n" } } ``` 你也可以通过设置 `EVE_TRACKER_DATA` 环境变量来指定自定义的数据文件路径: ``` export EVE_TRACKER_DATA="/path/to/custom/services.json" ``` ## 🧪 开发 ### 运行测试 ``` pytest tests/ -v ``` ### 代码风格 本项目遵循 PEP 8 规范并使用 type hints。提交前请运行格式化工具: ``` ruff check src/ tests/ ruff format src/ tests/ ``` ## 📜 许可证 MIT — 详情请参阅 [LICENSE](LICENSE)。 由 [Eve](https://eve-0607.github.io) 用 💜 构建。
标签:Awesome, Homebrew安装, Python, 家庭实验室, 插件系统, 数据统计, 无后门, 服务监控, 端口扫描, 系统管理, 逆向工具