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, 插件系统, 数据统计, 无后门, 端口扫描, 网络调试, 自动化, 运维工具, 逆向工具