berserk3142-max/Network-traffic-Analyser
GitHub: berserk3142-max/Network-traffic-Analyser
一个基于 Python 的轻量级网络流量分析系统,通过解析 PCAP 文件并匹配自定义威胁规则来检测可疑行为,同时提供 Web 可视化仪表盘和报告导出功能。
Stars: 0 | Forks: 0
# 🛡️ 网络流量分析器
**一个基于 Python 的网络安全网络流量分析系统**,能够读取 `.pcap` 文件,使用自定义威胁检测规则检测可疑网络行为,并提供高级的 Web 仪表盘,用于实时可视化和生成报告。





## 📋 目录
- [概述](#-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仪表盘, 入侵检测系统, 威胁检测, 安全数据湖, 应用安全, 插件系统, 无后门, 服务器加固, 流量抓包, 端口扫描检测, 网络安全, 虚拟驱动器, 逆向工具, 隐私保护