mknauer514/CYB333-Port-Monitor

GitHub: mknauer514/CYB333-Port-Monitor

一款基于 Python 标准库的 Linux 端口监控工具,通过多线程扫描 1-1024 端口并与历史基线对比,自动检测并告警端口状态的变更。

Stars: 0 | Forks: 0

# 自动化 Linux 端口状态监控与告警系统 一款 Python 工具,用于扫描 Linux 主机的开放端口,并将结果 与上一次扫描进行对比,当端口状态由关闭变为开放 或由开放变为关闭时发出告警。专为 CYB 333(安全自动化)构建。 ## 项目目标 - 自动化端口状态监控,取代手动检查端口。 - 检测未经授权的服务变更 —— 意外的开放端口可能意味着 配置错误或未经授权的服务;意外的关闭端口 可能意味着服务故障。 - 维护带有时间戳的事件日志,供日后安全审查。 ## 功能 - 扫描可配置目标 IP 上完整的 1-1024 端口范围。 - 多线程扫描(最多同时检查 100 个端口),因此完整扫描 可在几秒钟内完成,而非几分钟。 - 将每次扫描与上一次扫描进行对比以检测变更。 - 实时在终端打印告警信息。 - 将每次扫描(基线、无变更和告警)连同时间戳记录到 `port_monitor.log` 中。 ## 文件 | 文件 | 作用 | |---|---| | `config.py` | 设置要扫描的目标 IP 和端口范围。编辑此项以指向不同的主机。 | | `scanner.py` | 扫描目标并返回哪些端口处于开放状态,使用 Python 内置的 `socket` 库。 | | `comparator.py` | 将当前扫描结果与上一次扫描进行对比,并报告发生的变化。 | | `alert_logger.py` | 在终端打印告警信息,并将带有时间戳的条目写入日志文件。 | | `main.py` | 运行整个流程:扫描、对比、告警/记录日志,并保存新的基线。 | ## 前置条件 - Python 3.8 或更高版本 - 无需外部库 —— 所使用的所有模块(`socket`、 `concurrent.futures`、`datetime`、`json`、`os`)均内置于 Python 中。 - 扫描机器到目标 IP 之间的网络访问权限。 ## 安装说明与使用方法 1. 克隆仓库: git clone https://github.com/mknauer514/CYB333-Port-Monitor.git cd CYB333-Port-Monitor 2. 打开 `config.py` 并设置目标 IP: TARGET_IP = "192.168.56.101" # 替换为你的目标 IP 3. 运行扫描: python3 main.py 4. 结果: - **首次运行**:由于尚无上一次的扫描记录,工具会将 当前处于开放状态的端口保存为基线。 - **此后的每次运行**:与已保存的基线进行对比,并打印 以下信息之一: - `[OK] No change detected` - `[ALERT] Port(s) [...] OPENED` - `[ALERT] Port(s) [...] CLOSED` - 每次结果也会被追加到 `port_monitor.log` 中。 5. 要测试告警功能,请在目标机器的 1-1024 范围内开放一个端口(例如 `sudo python3 -m http.server 888`),然后再次运行 `python3 main.py` — 它应该会报告该端口为新开放。停止服务器并再次 运行扫描,即可查看端口关闭的告警。 ## 补充说明 - 开发期间使用的目标是 VirtualBox 中一个隔离的 Ubuntu Server 虚拟机, 通过 Host-Only 网络适配器连接,这样可以安全地从主机进行 扫描,而不会将其暴露在更广泛的网络中。 - `last_scan_state.json`(保存的基线)和 `port_monitor.log` 在工具 运行时自动生成,并已通过 `.gitignore` 排除在 仓库之外,因为它们属于扫描输出,而非项目代码。 ## 作者 Michael -- CYB 333,安全自动化
标签:Python, 插件系统, 数据统计, 无后门, 端口扫描, 网络调试, 自动化, 运维工具, 逆向工具