EZMonitor 是一个基于 Python 的网络流量监控工具,旨在捕获指定网卡的流量数据并记录到文件中,同时提供定时清理功能。该工具通过 YAML 配置文件灵活指定监控、记录和清理行为,适用于网络管理员或开发人员监控和分析网络流量。
- 多网卡监控:支持同时监控多个网络接口的流量。
- 端口过滤:可选指定需要监控的端口,默认监控所有端口。
- 灵活记录:支持将流量数据保存为 CSV、TXT 或 LOG 格式,并按周、天或小时分割文件。
- 定时清理:提供观察器模块,可自动清理指定天数前的日志文件。
- 配置文件驱动:通过 YAML 文件配置所有参数,易于修改和扩展。
捕获网络流量并记录到文件中,字段包括:时间戳、源 IP、目的 IP、源端口、目的端口、源 MAC、目的 MAC。
- 操作系统:Linux(推荐,需支持 Scapy 的原始数据包捕获),Windows(部分功能可能受限)
- Python 版本:3.6+
- 权限:运行程序需要管理员权限(捕获网络数据包)
-
安装 Python 依赖:
pip install scapy pyyaml
-
确保系统支持 Scapy 的原始数据包捕获:
- Linux:需要
libpcap(通常默认安装)。 - Windows:需要安装 Npcap(推荐)。
- Linux:需要
項目依賴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
完成配置之后即可运行程序。
-
准备配置文件(例如
config.yaml),具体格式见下文。 -
使用命令行启动程序并指定配置文件路径:
python main.py --config config.yaml
-
按
Ctrl+C停止程序,程序会自动清理资源。
日志文件会保存在指定路径下的子目录中,例如:
./2025-03/traffic_20250318.csv
配置文件使用 YAML 格式,包含三个主要部分:monitors(监视器)、writers(记录器)和 observers(观察器)。
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
- interface(必填):要监控的网卡名称(例如
eth0、wlan0)。 - interval(必填):监控周期(秒),每次捕获数据的间隔。
- ports(可选):要监控的端口列表(例如
[80, 443]),为空或不填表示监控所有端口。
- path(必填):日志文件保存路径(例如
./表示项目根目录)。 - format(必填):文件格式,可选
csv、txt或log。 - interval_type(必填):文件分割间隔,可选
week(按周)、day(按天)或hour(按小时)。
- enabled(必填):是否启用自动清理(
true或false)。 - 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/:实现定时清理过期日志文件。
- 多网卡监控:通过配置文件指定多个
interface,支持独立监控。 - 自定义监控时间间隔:通过
interval参数设置。 - 自定义监控网卡和端口:通过
interface和ports参数实现。 - 选择记录文件类型:支持
csv、txt和log格式。 - 定时清理模块:通过
observers配置启用并指定清理条件。 - 不同网卡记录不同目录:当前按月分目录,可扩展为按网卡分目录。
- 性能:使用线程异步处理监控和清理,确保高流量下稳定运行。
- 可扩展性:模块化设计,支持添加新文件格式或清理条件。
- 用户界面:命令行界面,通过配置文件管理所有参数。
- 安全性:日志文件权限依赖操作系统,建议设置适当权限。
- 可维护性:代码模块化,注释清晰,便于维护。
- 日志记录:使用 Python 的
logging模块记录关键操作和错误。
运行 monitors/unit_test.py 进行单元测试:
python monitors/unit_test.py
- 运行需要管理员权限(Linux 使用
sudo,Windows 以管理员身份运行)。 - 确保网卡名称正确,可通过
scapy.get_if_list()查看可用接口。 - 高流量环境下可能需要调整
interval参数以优化性能。
欢迎贡献代码或提出建议:
- Fork 本仓库。
- 创建新分支(例如
feature/new-format)。 - 提交 Pull Request,描述你的更改。
- 支持按网卡分目录存储日志。
- 添加更多文件格式(如 JSON)。
- 优化高流量场景下的性能。
本项目采用 MIT 许可证,详情见 LICENSE 文件(待添加)。