Files
2026-03-06 17:07:57 +08:00

12 KiB
Raw Permalink Blame History

网络监控项目 (Network Monitor)

一个基于OOP设计的功能完整的网络监控解决方案,持续监控指定IP地址的连接状态,当检测到连续无法连接超过设定阈值时自动执行关机操作。

🎯 项目特性

核心功能

  • 持续监控指定IP地址的网络连接状态
  • 可配置的延迟阈值和ping间隔
  • 支持Windows、Linux和macOS系统
  • 自动关机功能(网络断开后)
  • 实时显示连接状态和日志

高级功能

  • 📝 详细的日志记录系统
  • 🔔 多种通知方式(控制台、桌面、邮件)
  • 📊 会话统计和历史记录
  • 🛠️ 完整的工具函数库
  • 📦 模块化的OOP项目结构

🏗️ 架构设计

OOP设计模式

本项目采用多种设计模式实现清晰的代码架构:

  1. 单例模式 - ConfigManager 配置管理器
  2. 策略模式 - PingExecutorShutdownHandler
  3. 观察者模式 - NetworkMonitorMonitorObserver
  4. 工厂模式 - PingExecutorFactoryShutdownHandlerFactory
  5. 门面模式 - Application 应用入口
  6. 组合模式 - NotificationManager
  7. 建造者模式 - NotificationBuilder
  8. 装饰器模式 - 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

交互式模式

运行程序后,您可以选择:

  1. 基础监控模式 - 基本的网络监控功能
  2. 高级监控模式 - 集成日志记录和通知
  3. 自定义参数 - 自定义所有监控参数
  4. 退出

配置管理

通过代码配置:

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: 验证器工厂

⚠️ 注意事项

  1. 谨慎使用: 此脚本会在网络断开后执行自动关机,建议先在测试环境验证。
  2. 管理员权限: Windows上需要管理员权限执行关机命令。
  3. 停止监控: 按 Ctrl+C 可以安全停止监控程序。
  4. 目标IP选择: 建议使用可靠的公网IP(如8.8.8.8)或内网网关。
  5. 日志目录: 日志文件保存在 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

🤝 贡献

欢迎提交问题和拉取请求!

🎓 设计原则

本项目遵循以下设计原则:

  1. 单一职责原则 (SRP): 每个类只有一个改变的理由
  2. 开闭原则 (OCP): 对扩展开放,对修改关闭
  3. 里氏替换原则 (LSP): 子类可以替换父类
  4. 接口隔离原则 (ISP): 使用小而专注的接口
  5. 依赖倒置原则 (DIP): 依赖抽象而非具体实现

📚 代码质量

  • 完整的类型提示
  • 详细的文档字符串
  • 清晰的命名规范
  • 模块化的设计
  • 遵循PEP 8编码规范