e266b485c0688ed3110a70f8bf96d86992e01e89
网络监控项目 (Network Monitor)
一个基于OOP设计的功能完整的网络监控解决方案,持续监控指定IP地址的连接状态,当检测到连续无法连接超过设定阈值时自动执行关机操作。
🎯 项目特性
核心功能
- ✅ 持续监控指定IP地址的网络连接状态
- ✅ 可配置的延迟阈值和ping间隔
- ✅ 支持Windows、Linux和macOS系统
- ✅ 自动关机功能(网络断开后)
- ✅ 实时显示连接状态和日志
高级功能
- 📝 详细的日志记录系统
- 🔔 多种通知方式(控制台、桌面、邮件)
- 📊 会话统计和历史记录
- 🛠️ 完整的工具函数库
- 📦 模块化的OOP项目结构
🏗️ 架构设计
OOP设计模式
本项目采用多种设计模式实现清晰的代码架构:
- 单例模式 -
ConfigManager配置管理器 - 策略模式 -
PingExecutor和ShutdownHandler - 观察者模式 -
NetworkMonitor和MonitorObserver - 工厂模式 -
PingExecutorFactory和ShutdownHandlerFactory - 门面模式 -
Application应用入口 - 组合模式 -
NotificationManager - 建造者模式 -
NotificationBuilder - 装饰器模式 -
AdvancedNetworkMonitor
项目结构
network-monitor/
├── application.py # 应用入口(门面模式)
├── config_manager.py # 配置管理器(单例模式)
├── network_monitor.py # 核心监控器(观察者模式)
├── advanced_monitor.py # 高级监控器(装饰器模式)
├── ping_executor.py # Ping执行器(策略模式+工厂模式)
├── shutdown_handler.py # 关机处理器(策略模式+工厂模式)
├── logger.py # 日志记录器
├── notifier.py # 通知系统(组合模式+建造者模式)
├── utils.py # 工具类和验证器
├── requirements.txt # Python依赖
├── .gitignore # Git忽略文件
├── run_monitor.ps1 # PowerShell启动脚本
├── README.md # 项目文档
└── logs/ # 日志文件目录
类关系图
Application (应用入口)
├── ConfigManager (配置管理) - 单例
│ └── MonitorConfig (配置数据)
├── NetworkMonitor (基础监控器) - 观察者
│ ├── MonitorState (状态数据)
│ ├── PingExecutor (Ping执行器) - 策略
│ │ ├── WindowsPingExecutor
│ │ ├── LinuxPingExecutor
│ │ └── MacOSPingExecutor
│ ├── ShutdownHandler (关机处理器) - 策略
│ │ ├── WindowsShutdownHandler
│ │ ├── LinuxShutdownHandler
│ │ └── MacOSShutdownHandler
│ └── MonitorObserver (观察者接口)
│ ├── LoggingObserver (日志观察者)
│ └── NotificationObserver (通知观察者)
├── AdvancedNetworkMonitor (高级监控器) - 装饰器
│ ├── Logger (日志记录器)
│ └── NotificationManager (通知管理器) - 组合
│ ├── ConsoleNotifier (控制台通知)
│ ├── DesktopNotifier (桌面通知)
│ └── EmailNotifier (邮件通知)
└── Utils (工具类)
├── NetworkUtils (网络工具)
├── Formatter (格式化工具)
├── MathUtils (数学工具)
└── ValidatorFactory (验证器工厂)
🚀 快速开始
1. 环境要求
- Python 3.6 或更高版本
- 无需额外安装依赖(仅使用标准库)
- 可选:安装桌面通知库(见 requirements.txt)
2. 运行监控器
基础模式
# 使用默认配置
python application.py
# 或使用命令行参数
python application.py 192.168.1.1 30 5
高级模式(带日志和通知)
# Python代码中启用
from application import Application
from config_manager import ConfigManager
config = ConfigManager().load_from_args()
config.enable_logging = True
config.enable_notifications = True
app = Application()
app.run()
📖 使用方法
命令行参数
python application.py [IP地址] [延迟阈值] [Ping间隔]
参数说明:
IP地址: 要监控的IP地址(默认: 8.8.8.8)延迟阈值: 连续断开多少秒后关机(默认: 30)Ping间隔: 每隔多少秒执行一次ping(默认: 5)
示例:
# 使用默认配置
python application.py
# 监控内网网关,60秒后关机,每10秒ping一次
python application.py 192.168.1.1 60 10
交互式模式
运行程序后,您可以选择:
- 基础监控模式 - 基本的网络监控功能
- 高级监控模式 - 集成日志记录和通知
- 自定义参数 - 自定义所有监控参数
- 退出
配置管理
通过代码配置:
from config_manager import ConfigManager
# 获取配置管理器(单例)
config_manager = ConfigManager()
# 从命令行加载
config = config_manager.load_from_args()
# 从文件加载
config = config_manager.load_from_file('config.json')
# 从字典加载
config = config_manager.load_from_dict({
'target_ip': '192.168.1.1',
'delay_threshold': 60.0,
'ping_interval': 10.0,
'enable_logging': True,
'enable_notifications': True
})
# 更新配置
config_manager.update_config(
target_ip='8.8.8.8',
delay_threshold=30.0
)
# 保存配置
config_manager.save_to_file('config.json')
使用观察者模式
from network_monitor import NetworkMonitor, MonitorObserver, PingResult
class CustomObserver(MonitorObserver):
"""自定义观察者"""
def on_ping(self, result: PingResult):
print(f"Ping结果: {result}")
def on_status_change(self, is_connected, duration):
status = "连接" if is_connected else "断开"
print(f"状态变化: {status}")
def on_shutdown(self, reason):
print(f"关机原因: {reason}")
# 创建监控器
monitor = NetworkMonitor()
# 添加观察者
monitor.add_observer(CustomObserver())
# 启动监控
monitor.monitor()
高级功能使用
启用日志
from advanced_monitor import AdvancedNetworkMonitor
monitor = AdvancedNetworkMonitor(
enable_logging=True,
enable_notifications=False
)
monitor.monitor()
配置通知
from notifier import NotificationBuilder
# 构建通知管理器
builder = NotificationBuilder()
builder.enable_console(True)
builder.enable_desktop(True)
builder.enable_email(
smtp_server="smtp.example.com",
smtp_port=587,
username="user@example.com",
password="password",
from_email="sender@example.com",
to_email="receiver@example.com"
)
notification_manager = builder.build()
# 发送通知
notification_manager.notify("测试", "这是一个测试消息")
📁 核心模块说明
application.py
应用入口类,使用门面模式简化系统访问。
主要类:
Application: 应用程序主类
config_manager.py
配置管理模块,使用单例模式管理全局配置。
主要类:
ConfigManager: 配置管理器(单例)MonitorConfig: 监控配置数据类
network_monitor.py
核心网络监控器,使用观察者模式实现事件通知。
主要类:
NetworkMonitor: 网络监控器主类MonitorState: 监控状态数据类MonitorObserver: 监控观察者抽象基类PingResult: Ping结果数据类
advanced_monitor.py
高级网络监控器,使用装饰器模式扩展基础功能。
主要类:
AdvancedNetworkMonitor: 高级监控器LoggingObserver: 日志观察者NotificationObserver: 通知观察者
ping_executor.py
Ping执行器模块,使用策略模式和工厂模式。
主要类:
PingExecutor: Ping执行器抽象基类WindowsPingExecutor: Windows平台实现LinuxPingExecutor: Linux平台实现MacOSPingExecutor: macOS平台实现PingExecutorFactory: 执行器工厂
shutdown_handler.py
关机处理器模块,使用策略模式和工厂模式。
主要类:
ShutdownHandler: 关机处理器抽象基类WindowsShutdownHandler: Windows平台实现LinuxShutdownHandler: Linux平台实现MacOSShutdownHandler: macOS平台实现DummyShutdownHandler: 模拟关机处理器ShutdownHandlerFactory: 处理器工厂
logger.py
日志记录模块,提供完整的日志功能。
主要类:
Logger: 日志记录器类LogEvent: 日志事件数据类
notifier.py
通知系统模块,使用组合模式和建造者模式。
主要类:
Notifier: 通知器抽象基类ConsoleNotifier: 控制台通知器DesktopNotifier: 桌面通知器EmailNotifier: 邮件通知器NotificationManager: 通知管理器NotificationBuilder: 通知构建器
utils.py
工具模块,提供各种工具函数和验证器。
主要类:
Validator: 验证器抽象基类IPAddressValidator: IP地址验证器HostnameValidator: 主机名验证器RangeValidator: 范围验证器NetworkUtils: 网络工具类Formatter: 格式化工具类MathUtils: 数学工具类ValidatorFactory: 验证器工厂
⚠️ 注意事项
- 谨慎使用: 此脚本会在网络断开后执行自动关机,建议先在测试环境验证。
- 管理员权限: Windows上需要管理员权限执行关机命令。
- 停止监控: 按
Ctrl+C可以安全停止监控程序。 - 目标IP选择: 建议使用可靠的公网IP(如8.8.8.8)或内网网关。
- 日志目录: 日志文件保存在
logs/目录下,会自动清理旧日志。
🔧 扩展功能
启用桌面通知
# Windows
pip install win10toast
# Linux
pip install notify2
# macOS
pip install pync
添加自定义Ping执行器
from ping_executor import PingExecutor, PingResult
class CustomPingExecutor(PingExecutor):
def execute(self, target, timeout=5.0):
# 自定义实现
return PingResult(success=True, latency_ms=50.0)
def get_command(self, target, timeout):
return ['custom_ping', target]
# 注册自定义执行器
PingExecutorFactory.register_executor('custom', CustomPingExecutor)
添加自定义观察者
from network_monitor import MonitorObserver, PingResult
class EmailAlertObserver(MonitorObserver):
def on_shutdown(self, reason):
# 发送邮件警报
print(f"发送警报邮件: {reason}")
# 添加到监控器
monitor.add_observer(EmailAlertObserver())
📊 输出示例
============================================================
网络监控器 (Network Monitor)
============================================================
[2026-03-06 10:30:00] 系统信息:
- 操作系统: Windows
- 目标IP: 8.8.8.8
- 延迟阈值: 30.0秒
- Ping间隔: 5.0秒
- Ping超时: 5.0秒
============================================================
[2026-03-06 10:30:00] 开始监控网络连接...
[2026-03-06 10:30:00] 每 5.0 秒执行一次ping操作
------------------------------------------------------------
[2026-03-06 10:30:00] Ping #1 ✓ 成功 (延迟: 45.23ms)
[2026-03-06 10:30:00] 等待 5.0 秒...
[2026-03-06 10:30:05] Ping #2 ✓ 成功 (延迟: 43.87ms)
🐛 故障排除
问题: 无法执行关机命令
- Windows: 以管理员身份运行
- Linux/Mac: 检查用户权限
问题: ping失败
- 检查IP地址是否正确
- 检查网络连接
- 检查防火墙设置
问题: 依赖安装失败
- 使用
pip install -r requirements.txt - 确保使用Python 3.6+
📄 许可证
MIT License
🤝 贡献
欢迎提交问题和拉取请求!
🎓 设计原则
本项目遵循以下设计原则:
- 单一职责原则 (SRP): 每个类只有一个改变的理由
- 开闭原则 (OCP): 对扩展开放,对修改关闭
- 里氏替换原则 (LSP): 子类可以替换父类
- 接口隔离原则 (ISP): 使用小而专注的接口
- 依赖倒置原则 (DIP): 依赖抽象而非具体实现
📚 代码质量
- ✅ 完整的类型提示
- ✅ 详细的文档字符串
- ✅ 清晰的命名规范
- ✅ 模块化的设计
- ✅ 遵循PEP 8编码规范
Languages
Python
99.8%
PowerShell
0.2%