Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

STC-WF:基于流间时空关联分析的图神经网络网站指纹识别

项目简介

本项目实现了一种基于图神经网络(GNN)的网站指纹识别方法,通过将网络流量建模为图结构,捕捉流间的时空相关性,从而实现对网站流量的高精度分类。项目对应论文《[2024][TIFS]Inter-Flow_Spatio-Temporal_Correlation_Analysis_Based_Website_Fingerprinting_Using_Graph_Neural_Network.pdf》。

核心思想:将每个网络会话(session)表示为一个图,其中节点是数据包,边表示数据包之间的时空关系,利用GNN学习图的整体特征,实现端到端的网站识别。

整体流程

整个项目分为三个主要阶段:

  1. 数据采集:在Windows系统上使用浏览器自动化工具采集指定网站的流量数据(PCAP格式)
  2. 数据处理:将PCAP文件转换为结构化CSV特征,并构建图数据格式
  3. 模型训练:使用图神经网络进行训练和测试,评估网站识别性能
原始流量采集 → PCAP文件 → CSV特征提取 → 图结构构建 → GNN训练 → 网站分类

第一部分:数据网站采集(Windows环境)

采集脚本

  • 文件位置: cellect_web.py
  • 运行环境: Windows(需要管理员权限)
  • 功能: 自动化采集指定网站的流量数据

准备工作

  1. 安装依赖

    pip install selenium webdriver-manager
  2. 安装抓包工具

    • 安装Wireshark(包含tshark命令行工具)
    • 配置TSHARK_PATH指向tshark.exe
  3. 配置浏览器驱动

    • 下载Chrome浏览器和对应版本的ChromeDriver
    • 在脚本中配置CHROMEDRIVER_PATHCHROME_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

采集过程:

  1. 为每个网站启动独立的浏览器实例
  2. 同时启动tshark抓包
  3. 模拟用户浏览行为(随机滚动、停留)
  4. 保存PCAP文件到dataset_output/pcaps/目录
  5. 记录元数据到dataset_output/logs/目录

注意事项

  • 需要管理员权限运行(tshark抓包需要特权)
  • 确保网络接口名称正确
  • 每个样本采集时长随机(10-60秒)
  • 采样间隔2-6秒,避免频率过高

第二部分:数据处理(PCAP → 特征CSV)

1. PCAP转CSV特征提取

  • 文件位置: pcap_to_csv.py
  • 功能: 从PCAP文件提取流量特征,生成结构化CSV文件

特征提取流程

  1. 流划分:按五元组(源IP、目标IP、协议、源端口、目标端口)划分数据流
  2. 特征计算
    • 长度序列特征(20维):len0-len19,流的前20个数据包长度
    • 统计特征(6维):
      • umax: 上行最大长度
      • alen: 平均长度
      • uper9: 上行第90百分位长度
      • uper8: 上行第80百分位长度
      • dlen: 下行数据包数量
      • dmean: 下行平均长度
  3. 输出格式:每行一个数据包,共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)

输出CSV格式

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中):

  1. 特征变换层:线性层将26维输入特征映射到隐藏维度
  2. 图注意力层:GATConv(3 heads),边维度为2
  3. 池化层:SAGPool(自注意力池化),池化比例0.5
  4. 分类层:三个全连接层输出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

训练流程

  1. 数据加载:使用TrafficDataset加载训练、验证、测试集(将前面处理的的csv特征文件转换图格式,并将.csv文件格式变成.pt文件格式)
  2. 模型初始化:实例化Net模型,使用Adam优化器
  3. 训练循环
    • 每轮遍历训练集,计算负对数似然损失(NLL Loss)
    • 反向传播更新参数
    • 在验证集上评估,实现早停机制
  4. 模型保存:保存最佳模型到latest.pth

评估指标

模型在测试集上提供两种评估视角:

  1. 单流指标:将图中所有节点视为独立样本进行分类统计
  2. 多流指标:将每个图(流量会话)作为一个整体进行分类统计

输出详细的分类报告(精确率、召回率、F1-score)。

结果可视化

训练过程中生成:

  1. 训练曲线图Dynamic of Training Process.jpg(验证准确率和损失变化)
  2. 验证结果CSVvalid_result.csv(每轮的验证准确率)
  3. 分类报告:控制台输出的详细分类指标

预处理数据集

项目已提供预处理好的数据集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版本

  • 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

PyTorch Geometric安装说明

由于torch-geometric及其扩展包(scatter、sparse等)需要与CUDA版本匹配,项目中已提供预编译的wheel文件:

  • torch_cluster-1.6.0+pt112cu116-cp37-cp37m-linux_x86_64.whl
  • torch_scatter-2.0.9-cp37-cp37m-linux_x86_64.whl
  • torch_sparse-0.6.14-cp37-cp37m-linux_x86_64.whl
  • torch_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文件包含两个对象:dataslices

  • 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 新浪

常见问题

1. 数据采集问题

  • tshark找不到网卡:检查TSHARK_INTERFACE设置,使用tshark -D查看可用接口
  • ChromeDriver版本不匹配:下载与Chrome浏览器版本对应的ChromeDriver
  • 权限不足:以管理员身份运行命令提示符或PowerShell

2. 特征提取问题

  • 内存不足:减少--max_packets参数值,或分批处理大型PCAP文件
  • 特征计算错误:确保PCAP文件包含完整的数据包,且时间戳正确

3. 模型训练问题

  • CUDA内存不足:减小--batch_size,或使用CPU训练(args.device = 'cpu'
  • 训练不收敛:调整学习率--lr,或增加--weight_decay防止过拟合
  • 早停过早触发:增加--patience参数值

4. 依赖安装问题

  • torch-geometric安装失败:使用项目提供的预编译wheel文件
  • pyshark依赖错误:确保已安装Wireshark,且tshark在系统PATH中

实际性能可能因数据质量、参数设置和硬件环境有所差异。

参考文献

  1. 核心论文[2024][TIFS]Inter-Flow_Spatio-Temporal_Correlation_Analysis_Based_Website_Fingerprinting_Using_Graph_Neural_Network.pdf
  2. PyTorch Geometric文档https://pytorch-geometric.readthedocs.io/
  3. Selenium文档https://www.selenium.dev/documentation/
  4. 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

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages