Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

ProkingDu/EZmonitor

Repository files navigation

EZMonitor

项目概述

EZMonitor 是一个基于 Python 的网络流量监控工具,旨在捕获指定网卡的流量数据并记录到文件中,同时提供定时清理功能。该工具通过 YAML 配置文件灵活指定监控、记录和清理行为,适用于网络管理员或开发人员监控和分析网络流量。

主要功能

  • 多网卡监控:支持同时监控多个网络接口的流量。
  • 端口过滤:可选指定需要监控的端口,默认监控所有端口。
  • 灵活记录:支持将流量数据保存为 CSV、TXT 或 LOG 格式,并按周、天或小时分割文件。
  • 定时清理:提供观察器模块,可自动清理指定天数前的日志文件。
  • 配置文件驱动:通过 YAML 文件配置所有参数,易于修改和扩展。

项目目标

捕获网络流量并记录到文件中,字段包括:时间戳、源 IP、目的 IP、源端口、目的端口、源 MAC、目的 MAC。


安装

环境要求

  • 操作系统:Linux(推荐,需支持 Scapy 的原始数据包捕获),Windows(部分功能可能受限)
  • Python 版本:3.6+
  • 权限:运行程序需要管理员权限(捕获网络数据包)

依赖安装

  1. 安装 Python 依赖:

    pip install scapy pyyaml
  2. 确保系统支持 Scapy 的原始数据包捕获:

    • Linux:需要 libpcap(通常默认安装)。
    • Windows:需要安装 Npcap(推荐)。

使用方法

初始化Nginx

項目依賴Nginx整合網站日誌,需要执行初始化命令来进行Nginx的依赖注入。

python3 nginx_initializaiton.py --config config.yaml

如果此程序不起作用,则可以手动编辑NGINX的配置文件,在http块中添加(或修改):

'log_format custom \'$remote_addr|$remote_port|[$time_local]|$scheme://$http_host$request_uri|$status $body_bytes_sent|"$http_referer"|[UA]$http_user_agent[UA]|$server_addr|$server_port\''

同时修改需要监控的站点的网站access_log为:

access_log 你的日志文件地址 custom

完成配置之后即可运行程序。

运行程序

  1. 准备配置文件(例如 config.yaml),具体格式见下文。

  2. 使用命令行启动程序并指定配置文件路径:

    python main.py --config config.yaml
  3. Ctrl+C 停止程序,程序会自动清理资源。

示例输出

日志文件会保存在指定路径下的子目录中,例如:

./2025-03/traffic_20250318.csv

配置文件说明

配置文件使用 YAML 格式,包含三个主要部分:monitors(监视器)、writers(记录器)和 observers(观察器)。

示例配置文件 (config.yaml)

monitors:
 - interface: "eth0"
 interval: 5
 ports: [80, 443]
 - interface: "eth1"
 interval: 10
 ports: []
writers:
 path: "./"
 format: "csv"
 interval_type: "day"
observers:
 enabled: true
 cleanup_days: 30

配置项详解

1. monitors

  • interface(必填):要监控的网卡名称(例如 eth0wlan0)。
  • interval(必填):监控周期(秒),每次捕获数据的间隔。
  • ports(可选):要监控的端口列表(例如 [80, 443]),为空或不填表示监控所有端口。

2. writers

  • path(必填):日志文件保存路径(例如 ./ 表示项目根目录)。
  • format(必填):文件格式,可选 csvtxtlog
  • interval_type(必填):文件分割间隔,可选 week(按周)、day(按天)或 hour(按小时)。

3. observers

  • enabled(必填):是否启用自动清理(truefalse)。
  • cleanup_days(必填):清理多少天前的文件(整数,例如 30)。

项目结构

├── 2025-03/ # 示例日志文件子目录
│ └── traffic_20250318.csv # 示例日志文件
├── config_manager.py # 配置解析模块
├── config.yaml # 默认配置文件
├── documents/
│ └── requirement.md # 需求文档
├── main.py # 主程序入口
├── monitors/ # 监视器模块
│ ├── monitor_factory.py # 监视器工厂
│ ├── network_monitor.py # 网络监控核心类
│ ├── __pycache__/ # Python 缓存文件
│ └── unit_test.py # 单元测试
├── observers/ # 观察器模块
│ ├── observer.py # 文件清理观察器
│ └── __init__.py
├── writers/ # 记录器模块
│ ├── writer.py # 流量数据记录器
│ └── __init__.py

文件说明

  • config_manager.py:解析 YAML 配置文件并验证其有效性。
  • main.py:程序入口,协调监视器、记录器和观察器的运行。
  • monitors/:包含网络流量捕获的逻辑。
  • writers/:负责将捕获的数据写入文件。
  • observers/:实现定时清理过期日志文件。

功能性需求实现

  1. 多网卡监控:通过配置文件指定多个 interface,支持独立监控。
  2. 自定义监控时间间隔:通过 interval 参数设置。
  3. 自定义监控网卡和端口:通过 interfaceports 参数实现。
  4. 选择记录文件类型:支持 csvtxtlog 格式。
  5. 定时清理模块:通过 observers 配置启用并指定清理条件。
  6. 不同网卡记录不同目录:当前按月分目录,可扩展为按网卡分目录。

非功能性需求实现

  1. 性能:使用线程异步处理监控和清理,确保高流量下稳定运行。
  2. 可扩展性:模块化设计,支持添加新文件格式或清理条件。
  3. 用户界面:命令行界面,通过配置文件管理所有参数。
  4. 安全性:日志文件权限依赖操作系统,建议设置适当权限。
  5. 可维护性:代码模块化,注释清晰,便于维护。
  6. 日志记录:使用 Python 的 logging 模块记录关键操作和错误。

开发与调试

测试

运行 monitors/unit_test.py 进行单元测试:

python monitors/unit_test.py

注意事项

  • 运行需要管理员权限(Linux 使用 sudo,Windows 以管理员身份运行)。
  • 确保网卡名称正确,可通过 scapy.get_if_list() 查看可用接口。
  • 高流量环境下可能需要调整 interval 参数以优化性能。

贡献指南

欢迎贡献代码或提出建议:

  1. Fork 本仓库。
  2. 创建新分支(例如 feature/new-format)。
  3. 提交 Pull Request,描述你的更改。

待改进

  • 支持按网卡分目录存储日志。
  • 添加更多文件格式(如 JSON)。
  • 优化高流量场景下的性能。

许可证

本项目采用 MIT 许可证,详情见 LICENSE 文件(待添加)。

About

A simple server visitation log program

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

Languages

AltStyle によって変換されたページ (->オリジナル) /