本项目实现了一种基于图神经网络(GNN)的网站指纹识别方法,通过将网络流量建模为图结构,捕捉流间的时空相关性,从而实现对网站流量的高精度分类。项目对应论文《[2024][TIFS]Inter-Flow_Spatio-Temporal_Correlation_Analysis_Based_Website_Fingerprinting_Using_Graph_Neural_Network.pdf》。
核心思想:将每个网络会话(session)表示为一个图,其中节点是数据包,边表示数据包之间的时空关系,利用GNN学习图的整体特征,实现端到端的网站识别。
整个项目分为三个主要阶段:
- 数据采集:在Windows系统上使用浏览器自动化工具采集指定网站的流量数据(PCAP格式)
- 数据处理:将PCAP文件转换为结构化CSV特征,并构建图数据格式
- 模型训练:使用图神经网络进行训练和测试,评估网站识别性能
原始流量采集 → PCAP文件 → CSV特征提取 → 图结构构建 → GNN训练 → 网站分类
- 文件位置:
cellect_web.py - 运行环境: Windows(需要管理员权限)
- 功能: 自动化采集指定网站的流量数据
-
安装依赖:
pip install selenium webdriver-manager
-
安装抓包工具:
- 安装Wireshark(包含tshark命令行工具)
- 配置
TSHARK_PATH指向tshark.exe
-
配置浏览器驱动:
- 下载Chrome浏览器和对应版本的ChromeDriver
- 在脚本中配置
CHROMEDRIVER_PATH和CHROME_BINARY_PATH
编辑cellect_web.py中的以下配置项:
# ChromeDriver 路径(Windows)
CHROMEDRIVER_PATH = r"D:\path\to\chromedriver.exe"
CHROME_BINARY_PATH = r"C:\path\to\chrome.exe"
# tshark 路径
TSHARK_PATH = r"D:\path\to\tshark.exe"
# 抓包网卡(根据实际网络接口修改)
TSHARK_INTERFACE = "WLAN" # 或 "Ethernet", "Wi-Fi" 等脚本默认采集以下21类网站,每类5个样本:
- 视频类: bilibili、爱奇艺、腾讯视频
- 直播类: 斗鱼、虎牙
- 新闻类: 凤凰网、新华网、今日头条、新浪、搜狐、腾讯门户
- 购物类: 淘宝、京东
- 博客类: CSDN、简书
- 音乐类: 网易云音乐、QQ音乐
- 其他类: 汽车之家、豆瓣、喜马拉雅、东方财富
python cellect_web.py采集过程:
- 为每个网站启动独立的浏览器实例
- 同时启动tshark抓包
- 模拟用户浏览行为(随机滚动、停留)
- 保存PCAP文件到
dataset_output/pcaps/目录 - 记录元数据到
dataset_output/logs/目录
- 需要管理员权限运行(tshark抓包需要特权)
- 确保网络接口名称正确
- 每个样本采集时长随机(10-60秒)
- 采样间隔2-6秒,避免频率过高
- 文件位置:
pcap_to_csv.py - 功能: 从PCAP文件提取流量特征,生成结构化CSV文件
- 流划分:按五元组(源IP、目标IP、协议、源端口、目标端口)划分数据流
- 特征计算:
- 长度序列特征(20维):
len0-len19,流的前20个数据包长度 - 统计特征(6维):
umax: 上行最大长度alen: 平均长度uper9: 上行第90百分位长度uper8: 上行第80百分位长度dlen: 下行数据包数量dmean: 下行平均长度
- 长度序列特征(20维):
- 输出格式:每行一个数据包,共34列
# 单个PCAP文件处理
python pcap_to_csv.py --pcap input.pcap --output traffic.csv --label bilibili --graph_id 1
# 参数说明
--pcap : 输入PCAP文件路径
--output : 输出CSV文件路径
--label : 网站标签(如bilibili、CSDN等)
--graph_id : 图ID,同一会话的数据包共享相同graph_id
--time_window : 时间窗口(毫秒,默认5000)
--max_packets : 每个流最大数据包数(默认1000)file_name,src_ip,src_port,protol,dst_ip,IP归属,dst_port,begin_time,
len0,len1,...,len19,umax,alen,uper9,uper8,dlen,dmean,
label,graph_indicator
- 文件位置:
main.py - 功能: 图神经网络的训练、验证、测试和可视化
网络结构(定义在networks.py中):
- 特征变换层:线性层将26维输入特征映射到隐藏维度
- 图注意力层:GATConv(3 heads),边维度为2
- 池化层:SAGPool(自注意力池化),池化比例0.5
- 分类层:三个全连接层输出21类分类结果
可通过命令行参数调整:
python main.py \
--seed 52 \
--batch_size 64 \
--lr 0.0005 \
--weight_decay 0.0001 \
--nhid 128 \
--pooling_ratio 0.5 \
--dropout_ratio 0.1 \
--epochs 100 \
--patience 500 \
--pooling_layer_type GCNConv- 数据加载:使用
TrafficDataset加载训练、验证、测试集(将前面处理的的csv特征文件转换图格式,并将.csv文件格式变成.pt文件格式) - 模型初始化:实例化
Net模型,使用Adam优化器 - 训练循环:
- 每轮遍历训练集,计算负对数似然损失(NLL Loss)
- 反向传播更新参数
- 在验证集上评估,实现早停机制
- 模型保存:保存最佳模型到
latest.pth
模型在测试集上提供两种评估视角:
- 单流指标:将图中所有节点视为独立样本进行分类统计
- 多流指标:将每个图(流量会话)作为一个整体进行分类统计
输出详细的分类报告(精确率、召回率、F1-score)。
训练过程中生成:
- 训练曲线图:
Dynamic of Training Process.jpg(验证准确率和损失变化) - 验证结果CSV:
valid_result.csv(每轮的验证准确率) - 分类报告:控制台输出的详细分类指标
项目已提供预处理好的数据集traffic.zip,包含:
train_data.pt: 训练集(2,767个图,109,991个节点)valid_data.pt: 验证集(923个图,36,656个节点)test_data.pt: 测试集(923个图,36,268个节点)
unzip traffic.zip# 1. 解压数据集
unzip traffic.zip
# 2. 开始训练
python main.py
# 3. 查看结果
# - 模型文件: latest.pth
# - 训练曲线: Dynamic of Training Process.jpg
# - 验证结果: valid_result.csv- Python 3.7+
pip install -r requirements.txt- 深度学习: torch, torch-geometric, torch-scatter, torch-sparse, torch-cluster, torch-spline-conv
- 数据处理: numpy, pandas, scikit-learn
- 网络抓包: pyshark, scapy
- 可视化: matplotlib
- 浏览器自动化: selenium, webdriver-manager
由于torch-geometric及其扩展包(scatter、sparse等)需要与CUDA版本匹配,项目中已提供预编译的wheel文件:
torch_cluster-1.6.0+pt112cu116-cp37-cp37m-linux_x86_64.whltorch_scatter-2.0.9-cp37-cp37m-linux_x86_64.whltorch_sparse-0.6.14-cp37-cp37m-linux_x86_64.whltorch_spline_conv-1.2.1+pt112cu116-cp37-cp37m-linux_x86_64.whl
如需重新安装,请参考PyTorch Geometric官方文档选择适合的版本。
stc-wf-main/
├── cellect_web.py # 数据采集脚本(Windows)
├── pcap_to_csv.py # PCAP转CSV特征提取
├── main.py # 主训练脚本
├── networks.py # 图神经网络模型定义
├── layers.py # 自定义网络层
├── TrafficDataset.py # 数据集加载类
├── utils.py # 工具函数(数据加载、图构建)
├── analysis.py # 数据分析脚本
├── file_label.py # 文件标签处理
├── plot_utils.py # 绘图工具
├── merge_csv.py # CSV文件合并工具
├── test.py # 测试脚本
├── requirements.txt # Python依赖包列表
├── traffic.zip # 预处理的图数据集
├── latest.pth # 训练好的模型权重
├── [2024][TIFS]Inter-Flow_Spatio-Temporal_Correlation_Analysis_Based_Website_Fingerprinting_Using_Graph_Neural_Network.pdf
├── dataset.md # 数据集详细说明
├── pcap_to_csv.md # 特征提取脚本说明
├── main.md # 训练脚本说明
└── README.md # 本文档
traffic/
└── processed/
├── train_data.pt # 训练集图数据
├── valid_data.pt # 验证集图数据
└── test_data.pt # 测试集图数据
每个.pt文件包含两个对象:data和slices
- data.x: 节点特征矩阵
[总节点数, 26] - data.edge_index: 边连接索引
[2, 总边数] - data.edge_attr: 边属性矩阵
[总边数, 2] - data.y: 图级别标签
[图总数] - slices: 数据切片索引,支持批量图数据处理
详细说明见dataset.md。
21个网站类别对应的数字标签:
| 标签 | 网站 | 标签 | 网站 | 标签 | 网站 |
|---|---|---|---|---|---|
| 1 | bilibili | 8 | 凤凰网 | 15 | 淘宝 |
| 2 | CSDN | 9 | 虎扑 | 16 | 腾讯门户 |
| 3 | QQ音乐 | 10 | 简书 | 17 | 腾讯视频 |
| 4 | 爱奇艺 | 11 | 今日头条 | 18 | 网易云音乐 |
| 5 | 东方财富 | 12 | 京东 | 19 | 喜马拉雅 |
| 6 | 斗鱼 | 13 | 汽车之家 | 20 | 新华网 |
| 7 | 豆瓣 | 14 | 搜狐 | 21 | 新浪 |
- tshark找不到网卡:检查
TSHARK_INTERFACE设置,使用tshark -D查看可用接口 - ChromeDriver版本不匹配:下载与Chrome浏览器版本对应的ChromeDriver
- 权限不足:以管理员身份运行命令提示符或PowerShell
- 内存不足:减少
--max_packets参数值,或分批处理大型PCAP文件 - 特征计算错误:确保PCAP文件包含完整的数据包,且时间戳正确
- CUDA内存不足:减小
--batch_size,或使用CPU训练(args.device = 'cpu') - 训练不收敛:调整学习率
--lr,或增加--weight_decay防止过拟合 - 早停过早触发:增加
--patience参数值
- torch-geometric安装失败:使用项目提供的预编译wheel文件
- pyshark依赖错误:确保已安装Wireshark,且
tshark在系统PATH中
实际性能可能因数据质量、参数设置和硬件环境有所差异。
- 核心论文:
[2024][TIFS]Inter-Flow_Spatio-Temporal_Correlation_Analysis_Based_Website_Fingerprinting_Using_Graph_Neural_Network.pdf - PyTorch Geometric文档:https://pytorch-geometric.readthedocs.io/
- Selenium文档:https://www.selenium.dev/documentation/
- Wireshark/tshark文档:https://www.wireshark.org/docs/
本项目采用 MIT License 开源协议。
本项目代码包含两部分来源:
1. 原始论文代码(原始作者版权) 以下文件基于论文《Inter-Flow Spatio-Temporal Correlation Analysis Based Website Fingerprinting Using Graph Neural Network》的官方实现:
utils.py- 数据加载和图处理工具analysis.py- 数据分析脚本networks.py- 图神经网络模型定义layers.py- 自定义网络层plot_utils.py- 可视化工具main.py- 主训练脚本(部分)test.py- 测试脚本(部分)file_label.py- 文件标签处理TrafficDataset.py- 数据集加载类 原始代码版权归论文作者所有,引用请注明:
[Tan, Xiaobin, et al. "Inter-flow spatio-temporal correlation analysis based website fingerprinting using graph neural network." IEEE Transactions on Information Forensics and Security 19 (2024): 7619-7632.]
2. 新增功能代码(本仓库作者版权) 以下文件为本项目新增实现:
cellect_web.py- Windows环境数据采集脚本pcap_to_csv.py- PCAP到CSV特征提取工具merge_csv.py- CSV文件合并工具- 对原始代码的修改和优化部分
新增代码版权归本仓库作者所有,采用MIT许可证授权。
- 本项目仅用于学术研究目的
- 使用本项目进行网络流量分析需遵守相关法律法规和隐私政策
- 商业使用需获得相应授权
感谢所有为本项目提供代码、数据和文档的贡献者。
最后更新:2026-03-25