berserk3142-max/Network-traffic-Analyser

GitHub: berserk3142-max/Network-traffic-Analyser

一个基于 Python 的轻量级网络流量分析系统,通过解析 PCAP 文件并匹配自定义威胁规则来检测可疑行为,同时提供 Web 可视化仪表盘和报告导出功能。

Stars: 0 | Forks: 0

# 🛡️ 网络流量分析器 **一个基于 Python 的网络安全网络流量分析系统**,能够读取 `.pcap` 文件,使用自定义威胁检测规则检测可疑网络行为,并提供高级的 Web 仪表盘,用于实时可视化和生成报告。 ![Python](https://img.shields.io/badge/Python-3.8+-3776AB?logo=python&logoColor=white) ![Flask](https://img.shields.io/badge/Flask-3.0-000000?logo=flask&logoColor=white) ![Scapy](https://img.shields.io/badge/Scapy-2.5+-orange) ![Snort](https://img.shields.io/badge/Snort-IDS-red) ![License](https://img.shields.io/badge/License-MIT-green) ## 📋 目录 - [概述](#-overview) - [功能](#-features) - [架构](#-architecture) - [项目结构](#-project-structure) - [工作原理](#-how-it-works) - [安装](#-installation) - [用法](#-usage) - [威胁检测规则](#-threat-detection-rules) - [Web 仪表盘](#-web-dashboard) - [Snort IDS 集成](#-snort-ids-integration) - [Linux 服务器加固](#-linux-server-hardening) - [使用 Nmap 测试](#-testing-with-nmap) - [技术栈](#-tech-stack) - [截图](#-screenshots) - [未来改进](#-future-improvements) - [许可证](#-license) ## 🔍 概述 网络流量分析是网络安全的重要组成部分。本项目提供了一个完整的工具包,用于: 1. **捕获与解析** — 使用 Scapy 读取 `.pcap` 网络捕获文件 2. **威胁检测** — 自动检测端口扫描、SYN 泛洪、DNS 隧道和 SSH 暴力破解等攻击 3. **可视化** — 在带有交互式图表的高级深色主题 Web 仪表盘中查看结果 4. **报告** — 生成 CSV 威胁报告和 JSON 分析日志 5. **防御** — 包含 Snort IDS 规则和 Linux 服务器加固脚本 ## ✨ 功能 | 功能 | 描述 | |---------|-------------| | 📦 **PCAP 分析** | 使用 Scapy 数据包解析功能解析 `.pcap`、`.pcapng`、`.cap` 文件 | | 🚨 **威胁检测** | 6 个可配置阈值的检测类别 | | 📊 **Web 仪表盘** | 使用 Chart.js 的高级 Flask 仪表盘(深色网络安全主题) | | 📂 **拖拽上传** | 通过浏览器直接上传 PCAP 文件 | | 📈 **交互式图表** | 协议分布(圆环图)+ 主要通信 IP(条形图) | | 🔴 **严重性徽章** | 颜色编码告警:低 / 中 / 高 / 严重 | | 📄 **CSV 报告** | 自动生成可从仪表盘下载的威胁报告 | | 📝 **JSON 日志** | 存储详细的分析日志以供审计追踪 | | 🔐 **Snort IDS 规则** | 12 条预配置的入侵检测规则 | | 🛡️ **服务器加固** | 用于 UFW、iptables、Fail2Ban、SSH 加固的 Bash 脚本 | | 🧪 **样本生成器** | 生成带有模拟攻击的测试 PCAP 以供测试 | | 🖥️ **CLI 接口** | 具有彩色终端输出的完整命令行分析 | ## 🏗️ 架构 ``` ┌──────────────────────────────────────────────────────────────┐ │ USER INTERFACE LAYER │ │ ┌─────────────────┐ ┌──────────────────────────────────┐ │ │ │ CLI Terminal │ │ Flask Web Dashboard (Port 5000)│ │ │ │ (analyzer.py) │ │ - Drag & Drop Upload │ │ │ │ - Colored output│ │ - Chart.js Visualizations │ │ │ │ - Terminal bars │ │ - Threat Alert Table │ │ │ └────────┬─────────┘ │ - CSV Report Download │ │ │ │ └──────────────┬─────────────────────┘ │ ├───────────┼────────────────────────────┼─────────────────────┤ │ │ ANALYSIS ENGINE │ │ │ ▼ ▼ │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ PacketAnalyzer (analyzer.py) │ │ │ │ - Load PCAP via Scapy rdpcap() │ │ │ │ - Extract IP conversations, DNS queries │ │ │ │ - Track protocol distribution (TCP/UDP/ICMP/DNS) │ │ │ │ - Identify top talkers, SYN packets, SSH attempts │ │ │ └──────────────────────┬──────────────────────────────┘ │ │ │ │ │ ▼ │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ ThreatDetector (suspicious_rules.py) │ │ │ │ - Rule 1: Port Scan Detection │ │ │ │ - Rule 2: SYN Flood Detection │ │ │ │ - Rule 3: DNS Tunneling Detection │ │ │ │ - Rule 4: Suspicious DNS (bad TLDs + keywords) │ │ │ │ - Rule 5: High Connection Rate │ │ │ │ - Rule 6: SSH Brute Force Detection │ │ │ └──────────────────────┬──────────────────────────────┘ │ │ │ │ ├─────────────────────────┼─────────────────────────────────────┤ │ OUTPUT LAYER │ │ │ ▼ ▼ │ │ ┌──────────────┐ ┌──────────────┐ ┌────────────────────┐ │ │ │ CSV Reports │ │ JSON Logs │ │ Terminal Alerts │ │ │ │ reports/*.csv│ │ logs/*.json │ │ Colored output │ │ │ └──────────────┘ └──────────────┘ └────────────────────┘ │ └──────────────────────────────────────────────────────────────┘ ┌──────────────────────────────────────────────────────────────┐ │ SECURITY LAYER (Linux) │ │ ┌──────────────────┐ ┌─────────────────────────────────┐ │ │ │ Snort IDS │ │ Hardening Script │ │ │ │ (snort.rules) │ │ (hardening.sh) │ │ │ │ 12 detection │ │ - UFW Firewall │ │ │ │ rules │ │ - iptables rules │ │ │ │ │ │ - Fail2Ban SSH protection │ │ │ │ │ │ - SSH key-only auth │ │ │ └──────────────────┘ └─────────────────────────────────┘ │ └──────────────────────────────────────────────────────────────┘ ``` ## 📁 项目结构 ``` Network-traffic-Analyser/ │ ├── analyzer.py # Core packet analysis engine ├── suspicious_rules.py # Threat detection rules (6 categories) ├── generate_pcap.py # Sample PCAP generator with attack simulations ├── dashboard.py # Flask web dashboard server ├── requirements.txt # Python dependencies ├── snort.rules # Snort IDS rules (12 rules) ├── hardening.sh # Linux server hardening script ├── README.md # This documentation │ ├── templates/ │ └── dashboard.html # Dashboard HTML template (Jinja2) │ ├── static/ │ ├── css/ │ │ └── style.css # Premium cybersecurity dark theme │ └── js/ │ └── dashboard.js # Chart.js visualizations & interactivity │ ├── pcaps/ # PCAP file storage │ └── sample.pcap # Auto-generated sample with attacks │ ├── reports/ # Generated CSV threat reports │ └── report_*.csv # Timestamped report files │ └── logs/ # Analysis JSON logs └── analysis_*.json # Timestamped log files ``` ## ⚙️ 工作原理 ### 步骤 1: PCAP 文件输入 系统通过以下方式接受 `.pcap`(Wireshark 数据包捕获)文件: - **CLI**:`python analyzer.py pcaps/sample.pcap` - **Web 仪表盘**:在 `http://127.0.0.1:5000` 拖拽上传 您还可以生成带有模拟攻击的真实测试 PCAP: ``` python generate_pcap.py ``` 这将创建一个包含 **540+ 个数据包** 的文件,内容如下: - 80 个正常 HTTP/HTTPS 浏览会话 - 40 个 DNS 查询(包括可疑隧道域名) - 20 个 ICMP ping 数据包 - 30 个内部 LAN 流量 - 60 个端口扫描探测(来自攻击者 IP `10.0.0.66`) - 80 个 SYN 泛洪数据包(来自攻击者 IP `10.0.0.99`) - 25 次 SSH 暴力破解尝试(来自攻击者 IP `10.0.0.77`) ### 步骤 2: 数据包解析 (analyzer.py) `PacketAnalyzer` 类使用 **Scapy** 解析每个数据包: ``` For each packet: ├── Extract source IP, destination IP ├── Classify protocol (TCP / UDP / ICMP / DNS) ├── Track destination ports per source IP ├── Count SYN-only packets (potential flood) ├── Track SSH (port 22) connection attempts └── Extract DNS query names ``` **输出数据结构:** | 数据 | 描述 | |------|-------------| | `ip_conversations` | `{ source_ip: packet_count }` | | `port_access` | `{ source_ip: set(destination_ports) }` | | `dns_queries` | `[ domain_name, ... ]` | | `syn_packets` | `{ source_ip: syn_count }` | | `ssh_attempts` | `{ source_ip: attempt_count }` | | `protocol_counts` | `{ TCP: n, UDP: n, ICMP: n, DNS: n }` | | `top_talkers` | 按数据包数量排名前 10 的 IP | ### 步骤 3: 威胁检测 (suspicious_rules.py) `ThreatDetector` 类对解析后的数据运行 **6 条检测规则**: | # | 规则 | 检测内容 | 阈值 | 严重性 | |---|------|----------------|-----------|----------| | 1 | **端口扫描** | 单个 IP 访问大量目标端口 | >10 个端口 = 中,>50 = 高 | 中/高 | | 2 | **SYN 泛洪** | 来自单个源的大量 SYN 数据包 | >50 = 高,>200 = 严重 | 高/严重 | | 3 | **DNS 隧道** | 异常长的域名或深度子域 | >30 个字符或 >5 层 | 高 | | 4 | **可疑 DNS** | 查询已知恶意 TLD 或包含恶意关键词 | TLD 匹配或关键词匹配 | 中/高 | | 5 | **高连接率** | IP 产生异常多的连接 | >100 个连接 | 中 | | 6 | **SSH 暴力破解** | 来自单个 IP 的多次 SSH 登录尝试 | >5 = 高,>20 = 严重 | 高/严重 | **受监控的可疑 TLD:** `.xyz`、`.top`、`.tk`、`.ml`、`.ga`、`.cf`、`.gq`、`.club`、`.work`、`.download`、`.racing`、`.win`、`.bid`、`.stream` 等。 **检查的恶意关键词:** `malware`、`phish`、`hack`、`exploit`、`trojan`、`c2`、`botnet`、`ransom`、`keylog` ### 步骤 4: 输出与报告 结果以三种格式输出: 1. **终端** — 带有严重性颜色编码告警的彩色 CLI 输出 2. **CSV 报告** — `reports/report_YYYYMMDD_HHMMSS.csv`,包含所有威胁详情 3. **JSON 日志** — `logs/analysis_YYYYMMDD_HHMMSS.json`,包含完整分析数据 ### 步骤 5: Web 仪表盘可视化 Flask 仪表盘提供: - **统计卡片** — 数据包总数、唯一 IP、检测到的威胁、协议 - **协议图表** — 显示 TCP/UDP/ICMP/DNS 分布的圆环图 - **主要通信图表** — 最活跃 IP 的水平条形图 - **威胁表** — 颜色编码的严重性徽章(严重/高/中/低) - **DNS 查询日志** — 带有可疑域名高亮显示的可滚动列表 - **CSV 下载** — 一键报告下载 ## 🚀 安装 ### 前置条件 - 已安装 **Python 3.8+** - **pip** 包管理器 - **Wireshark**(可选,用于捕获您自己的流量) ### 设置 ``` # 克隆 repository git clone https://github.com/berserk3142-max/Network-traffic-Analyser.git cd Network-traffic-Analyser # 安装 Python 依赖 pip install -r requirements.txt ``` ### 依赖项 | 包 | 版本 | 用途 | |---------|---------|---------| | `scapy` | ≥2.5.0 | 数据包解析与 PCAP 生成 | | `flask` | ≥3.0.0 | Web 仪表盘后端 | | `pandas` | ≥2.0.0 | CSV 报告生成 | | `colorama` | ≥0.4.6 | 彩色终端输出 | ## 💻 用法 ### 1. 生成样本 PCAP(用于测试) ``` python generate_pcap.py ``` **输出:** ``` ======================================================= [*] Network Traffic PCAP Generator ======================================================= [+] Generating 80 normal HTTP/HTTPS packets... [+] Generating 40 DNS query packets... [+] Generating 20 ICMP ping packets... [+] Generating 30 internal LAN packets... [!] Generating port scan attack (60 ports)... [!] Generating SYN flood attack (80 packets)... [!] Generating SSH brute force (25 attempts)... [OK] PCAP Generated: pcaps/sample.pcap (540 packets, 40.9 KB) ``` ### 2. 运行 CLI 分析 ``` python analyzer.py # Analyze default pcaps/sample.pcap python analyzer.py pcaps/custom.pcap # Analyze a custom file ``` **输出:** ``` ============================================================ [*] NETWORK TRAFFIC ANALYZER v1.0 ============================================================ [*] Loading: pcaps/sample.pcap [OK] Loaded 540 packets ============================================================ [*] NETWORK TRAFFIC ANALYSIS REPORT ============================================================ File: pcaps/sample.pcap Packets: 540 Unique IPs: 110 Analyzed: 2026-04-27T12:37:41 -- Protocol Distribution -- TCP 460 ############################## UDP 40 ######## ICMP 40 ######## DNS 40 ######## -- Top Talkers (by packets) -- 192.168.1.100 -> 220 packets 10.0.0.99 -> 80 packets 10.0.0.66 -> 60 packets 10.0.0.77 -> 50 packets ============================================================ [ALERT] THREAT ALERTS -- 21 issues found ============================================================ 1. [HIGH] Port Scan Detected - Source: 10.0.0.66 | Scanned 60 unique ports 2. [HIGH] SYN Flood Suspected - Source: 10.0.0.99 | 80 SYN packets sent 3. [CRITICAL] SSH Brute Force - Source: 10.0.0.77 | 50 SSH connection attempts 4. [HIGH] DNS Tunneling - Source: DNS | Suspiciously long domain... ... [REPORT] Report saved: reports/report_20260427_123746.csv [LOG] Log saved: logs/analysis_20260427_123746.json ``` ### 3. 启动 Web 仪表盘 ``` python dashboard.py ``` 在浏览器中打开 **http://127.0.0.1:5000**。 **仪表盘功能:** 1. 点击 **“Use Sample PCAP”** 以分析预先生成的样本 2. 或者将任意 `.pcap` 文件 **拖拽** 到上传区域 3. 查看交互式图表、威胁告警和 DNS 查询 4. 点击 **“Download CSV Report”** 导出威胁数据 ## 🚨 威胁检测规则 ### 规则 1: 端口扫描检测 **检测内容:** 单个 IP 尝试连接到目标上的许多不同端口 —— 典型的侦察行为。 ``` IF unique_destination_ports(source_ip) > 10 → MEDIUM alert IF unique_destination_ports(source_ip) > 50 → HIGH alert ``` ### 规则 2: SYN 泛洪检测 **检测内容:** 大量未完成三次握手的 TCP SYN 数据包 —— 一种拒绝服务 攻击技术。 ``` IF syn_only_packets(source_ip) > 50 → HIGH alert IF syn_only_packets(source_ip) > 200 → CRITICAL alert ``` ### 规则 3: DNS 隧道检测 **检测内容:** 通过 DNS 进行数据渗透,方式是将数据编码在异常长的子域标签中。 ``` IF domain_length > 30 characters → HIGH alert (encoded data suspected) IF subdomain_levels > 5 → HIGH alert (tunneling suspected) ``` **可疑域名示例:** ``` e9kzxkg71g.i9i98jq98ktx2.w70ku9zf7az1hi.evil-tunnel.xyz ``` ### 规则 4: 可疑 DNS 查询 **检测内容:** 对已知恶意顶级域或包含恶意软件相关关键词的域名进行的 DNS 查询。 ``` IF domain ends with .tk/.ml/.ga/.xyz/etc → MEDIUM alert IF domain contains "malware"/"phish"/etc → HIGH alert ``` ### 规则 5: 高连接率 **检测内容:** 单个 IP 产生异常数量的连接,表明存在自动扫描或僵尸网络活动。 ``` IF total_connections(source_ip) > 100 → MEDIUM alert ``` ### 规则 6: SSH 暴力破解 **检测内容:** 来自单个源的多次 SSH (端口 22) 连接尝试,表明存在密码猜测攻击。 ``` IF ssh_attempts(source_ip) > 5 → HIGH alert IF ssh_attempts(source_ip) > 20 → CRITICAL alert ``` ## 🌐 Web 仪表盘 该仪表盘使用 **Flask**(Python 后端)和 **Chart.js**(前端可视化)构建。 ### 设计特点 - 🎨 **高级深色网络安全主题** — 深海军蓝背景 (#0a0e17) - ✨ **玻璃拟态卡片效果** — 半透明背景模糊 - 🎯 **动画渐变强调** — 青色 → 蓝色 → 紫色渐变 - 📱 **响应式布局** — 适用于桌面、平板和移动设备 - ⚡ **动画统计计数器** — 数字通过缓动动画递增 - 🔤 **等宽数据显示** — 使用 JetBrains Mono 字体显示 IP 和数据 - 🖱️ **悬停效果** — 悬停时卡片抬起并带有发光边框 ### 仪表盘部分 | 部分 | 描述 | |---------|-------------| | **上传区域** | 支持 .pcap、.pcapng、.cap 文件的拖放区 | | **文件信息栏** | 显示文件名、数据包数量、唯一 IP、时间戳 | | **统计卡片** | 4 个动画卡片:数据包、IP、威胁、协议 | | **协议图表** | TCP/UDP/ICMP/DNS 细分的圆环图 | | **主要通信** | 最活跃源 IP 的水平条形图 | | **威胁告警** | 带有严重性徽章和详细描述的表格 | | **DNS 查询** | 带有可疑域名红色高亮的可滚动列表 | | **操作** | 下载 CSV 报告或开始新分析 | ## 🔐 Snort IDS 集成 `snort.rules` 文件包含 **12 条预配置的规则**,用于在 Linux 上部署: | SID | 规则 | 描述 | |-----|------|-------------| | 1000001 | ICMP 检测 | 对任何 ICMP ping 流量发出告警 | | 1000002 | SSH 访问 |到端口 22 的 TCP 连接发出告警 | | 1000003 | HTTP 流量 | 对到端口 80 的 TCP 连接发出告警 | | 1000004 | HTTPS 流量 | 对到端口 443 的 TCP 连接发出告警 | | 1000005 | 端口扫描 | 对 10 秒内超过 20 次 SYN 探测发出告警 | | 1000006 | DNS 隧道 | 对超过 100 字节的 DNS 查询发出告警 | | 1000007 | Telnet 访问 | 对不安全的 Telnet (端口 23) 发出告警 | | 1000008 | FTP 访问 | 对 FTP 连接 (端口 21) 发出告警 | | 1000009 | SSH 暴力破解 | 对 60 秒内超过 5 次 SSH SYN 发出告警 | | 1000010 | SYN 泛洪 | 对 10 秒内超过 100 次 SYN 发出告警 | | 1000011 | SQL 注入 | 对 HTTP 流量中的 SELECT...FROM 发出告警 | | 1000012 | 反向 Shell | 对 TCP 负载中的 /bin/bash 发出告警 | ### 在 Linux 上部署: ``` # 复制 rules sudo cp snort.rules /etc/snort/rules/local.rules # 在 console alert mode 下运行 Snort sudo snort -A console -q -c /etc/snort/snort.conf -i eth0 ``` ## 🛡️ Linux 服务器加固 `hardening.sh` 脚本自动执行 8 个安全加固步骤: | 步骤 | 操作 | |------|--------| | 1 | **系统更新** — `apt update && apt upgrade` | | 2 | **UFW 防火墙** — 仅允许 SSH (22)、HTTP (80)、HTTPS (443) | | 3 | **iptables 规则** — 阻止 Telnet/FTP,限制 SSH 速率,丢弃无效数据包 | | 4 | **Fail2Ban** — 保护 SSH 免受暴力破解(3 次失败尝试后封禁) | | 5 | **SSH 加固** — 禁用 root 登录,仅密钥认证,会话超时 | | 6 | **禁用服务** — 停止 CUPS、Avahi、Bluetooth | | 7 | **AppArmor 检查** — 验证强制访问控制是否激活 | | 8 | **安全审计** — 记录开放端口、UFW 状态、失败登录 | ### 在 Ubuntu/Debian 上运行: ``` sudo bash hardening.sh ``` ## 🔍 使用 Nmap 测试 使用 Nmap 生成真实攻击流量并测试检测系统: ``` # 基本 SYN scan(触发 port scan 检测) nmap -sS 127.0.0.1 # 带 OS detection 的 aggressive scan nmap -A localhost # Full port scan nmap -p 1-65535 127.0.0.1 # 将 scan 流量捕获为 PCAP sudo tcpdump -i eth0 -w pcaps/nmap_scan.pcap & nmap -sS 127.0.0.1 # 然后分析:python analyzer.py pcaps/nmap_scan.pcap ``` ## 🛠️ 技术栈 | 技术 | 用途 | |-----------|---------| | **Python 3** | 核心脚本与自动化 | | **Scapy** | 数据包解析、解包与 PCAP 生成 | | **Flask** | Web 仪表盘后端与 REST API | | **Chart.js** | 交互式数据可视化(圆环图、条形图) | | **Pandas** | DataFrame 操作与 CSV 报告生成 | | **Colorama** | CLI 接口的彩色终端输出 | | **HTML/CSS/JS** | 带有高级深色主题的仪表盘前端 | | **Snort** | 网络入侵检测系统 (IDS) | | **Nmap** | 网络扫描与安全测试 | | **Bash** | 服务器加固自动化脚本 | | **UFW/iptables** | Linux 防火墙配置 | | **Fail2Ban** | 暴力破解攻击防护 | ## 🖼️ 截图 ### 登录页面 高级深色主题仪表盘,带有拖放 PCAP 上传区、渐变强调和玻璃拟态效果。 ### 分析结果 上传 PCAP 文件后: - 显示数据包数量和唯一 IP 的文件信息栏 - 带有威胁计数的动画统计卡片 - 协议分布圆环图 - 主要通信水平条形图 - 带有严重性徽章的颜色编码威胁告警表 - 带有可疑域名高亮的 DNS 查询日志 ## 🚀 未来改进 - [ ] **实时捕获** — 使用 `tcpdump` 集成实时分析流量 - [ ] **AI 驱动的检测** — 用于异常检测的机器学习模型 - [ ] **GeoIP 映射** — 在世界地图上可视化流量来源 - [ ] **自动 IP 封禁** — 自动将恶意 IP 添加到防火墙规则 - [ ] **电子邮件告警** — 在检测到严重威胁时发送通知 - [ ] **PCAP 比较** — 比较多次捕获的流量模式 - [ ] **用户认证** — 用于多用户仪表盘访问的登录系统 - [ ] **Docker 部署** — 容器化设置以便于部署 ## 📝 许可证 MIT 许可证 — 为教育和作品集目的而构建。 ## 👤 作者 **berserk3142-max** 作为网络安全与网络项目构建,旨在演示网络流量分析、入侵检测和服务器加固技能。
标签:AMSI绕过, cap, CISA项目, CSV报告, DNS隧道, Flask, IP 地址批量处理, JSON日志, MSSQL, Nmap, pcap, pcapng, PCAP分析, Python, Scapy, SSH暴力破解, SYN洪泛攻击, Web仪表盘, 入侵检测系统, 威胁检测, 安全数据湖, 应用安全, 插件系统, 无后门, 服务器加固, 流量抓包, 端口扫描检测, 网络安全, 虚拟驱动器, 逆向工具, 隐私保护