当前位置: 首页 > news >正文

从原始流量到CSV特征:CSE-CIC-IDS2018数据集预处理实战指南(含CICFlowMeter)

从原始流量到CSV特征:CSE-CIC-IDS2018数据集预处理实战指南(含CICFlowMeter)

当你第一次打开CSE-CIC-IDS2018数据集目录时,面对数百GB的PCAP文件和数十个CSV文件,很容易陷入"数据沼泽"——知道这些是网络安全研究的金矿,却不知从何挖起。本文将带你穿越这片沼泽,从原始流量解析到特征工程,手把手教你用专业工具链将杂乱的数据转化为机器学习友好的格式。

1. 理解数据集目录结构:原始流量与处理数据的双重视角

解压后的数据集通常包含两个核心目录:Original Network Traffic and Log dataProcessed Traffic Data for ML Algorithms。前者是未经加工的原始素材,后者是已经过初步处理的半成品。

原始流量文件(PCAP)的特点

  • 按日期分目录存储(如Friday-23-02-2018
  • 每个目录包含:
    • pcap.zip:原始网络流量包(平均40-50GB/天)
    • logs.zip:对应的系统日志(200MB左右)

已处理CSV文件的关键属性

  • 文件名包含日期标识(如Wednesday-28-02-2018_TrafficForML_CICFlowMeter.csv
  • 使用CICFlowMeter提取的80+个流特征
  • 文件大小差异显著(从100MB到3.8GB不等)

实际案例:周四的数据往往比周三更大,这是因为数据集刻意在不同日期模拟了不同强度的攻击流量。

2. PCAP解析实战:CICFlowMeter工具链深度应用

2.1 环境配置与工具安装

CICFlowMeter是加拿大网络安全研究所开发的专用工具,推荐使用其Java版本:

# 安装依赖 sudo apt-get install default-jre libpcap-dev # 下载CICFlowMeter wget https://www.unb.ca/cic/datasets/ids/files/CICFlowMeter-4.0.zip unzip CICFlowMeter-4.0.zip

常见问题排查表

问题现象解决方案
缺少libpcapsudo apt-get install libpcap-dev
Java版本冲突使用update-alternatives --config java切换
内存不足修改CICFlowMeter.vmoptions中的Xmx参数

2.2 从PCAP到特征流的完整流程

处理单个日期PCAP文件的典型命令:

java -jar CICFlowMeter.jar /input/pcap/dir /output/csv/dir 1000

参数说明:

  • 最后一个数字1000表示流超时阈值(毫秒)
  • 建议对大型PCAP分块处理:
# 用tcpdump分割大文件 tcpdump -r original.pcap -w chunk-%d.pcap -C 1000

特征提取过程中的关键指标

  1. 流特征统计

    • 前向/后向包数量
    • 流持续时间
    • TCP窗口大小
  2. 时序特征

    • 包到达时间间隔
    • 字节传输速率
  3. 标记信息

    • 攻击类型标签
    • 时间戳对齐

3. 大数据量CSV处理的Pandas进阶技巧

当直接读取3GB的CSV文件时,多数机器会内存溢出。以下是经过实战检验的优化方案:

3.1 内存优化读取方案

import pandas as pd # 分块读取+类型优化 dtypes = { 'Flow Bytes/s': 'float32', 'Flow Packets/s': 'float32', 'Label': 'category' } chunks = pd.read_csv('large_file.csv', chunksize=100000, dtype=dtypes) df = pd.concat([chunk for chunk in chunks])

各数据类型内存占用对比

数据类型内存使用适用场景
float648字节高精度计算
float324字节大多数特征
category变长枚举型字段

3.2 特征工程关键步骤

  1. 无效值处理

    # 替换无限大值 df.replace([np.inf, -np.inf], np.nan, inplace=True) # 填充缺失值 df.fillna({ 'Flow Duration': df['Flow Duration'].median(), 'Flow Bytes/s': df['Flow Bytes/s'].mean() }, inplace=True)
  2. 攻击类型标准化

    attack_map = { 'DDoS': ['DDoS-LOIC-UDP', 'DDoS-HOIC'], 'Brute Force': ['Brute Force-Web', 'Brute Force-XSS'] } df['AttackType'] = df['Label'].map( lambda x: next((k for k,v in attack_map.items() if x in v), 'Benign') )
  3. 时间特征提取

    df['Timestamp'] = pd.to_datetime(df['Timestamp']) df['Hour'] = df['Timestamp'].dt.hour df['DayPart'] = pd.cut(df['Hour'], bins=[0,6,12,18,24], labels=['Night','Morning','Afternoon','Evening'])

4. 构建机器学习就绪数据集

4.1 特征选择方法论

必选的20个核心特征

  1. Flow Duration
  2. Total Fwd Packets
  3. Total Backward Packets
  4. Fwd Packet Length Max
  5. Bwd Packet Length Max
  6. Flow Bytes/s
  7. Flow Packets/s
  8. Flow IAT Mean
  9. Fwd IAT Total
  10. Bwd IAT Total

经验提示:避免同时选择高度相关的特征如Flow Bytes/sFlow Packets/s

4.2 数据集划分策略

由于攻击具有时间连续性,需采用特殊划分方式:

from sklearn.model_selection import TimeSeriesSplit tss = TimeSeriesSplit(n_splits=3) for train_idx, test_idx in tss.split(X): X_train, X_test = X.iloc[train_idx], X.iloc[test_idx] y_train, y_test = y.iloc[train_idx], y.iloc[test_idx]

不同攻击类型的数据分布示例

攻击类型样本比例出现日期
DDoS12%周三、周五
Brute Force8%周二、周四
Infiltration3%周一
Benign77%全周期

4.3 类别不平衡处理实战

采用分层抽样+过采样组合方案:

from imblearn.over_sampling import SMOTE from imblearn.under_sampling import RandomUnderSampler # 先降采样多数类 under = RandomUnderSampler(sampling_strategy={'Benign': 100000}) X_under, y_under = under.fit_resample(X_train, y_train) # 再对少数类过采样 over = SMOTE(sampling_strategy={'DDoS': 50000, 'Brute Force': 30000}) X_balanced, y_balanced = over.fit_resample(X_under, y_under)

在处理周三的数据时发现,直接应用SMOTE会导致某些时序特征失真,这时需要考虑使用ADASYN等替代算法。

http://www.cnnetsun.cn/news/2800104.html

相关文章:

  • 告别漂移!用ArcPy+Python2.7搞定公交GPS轨迹地图匹配(附完整代码)
  • 从ATPG到ATE:一个DFT工程师的OCC电路实战配置全流程(含TestKompress/TetraMAX)
  • 别再只用默认配置了!手把手教你给MinIO单机版(CentOS 7)配置自定义端口和密码
  • CAC/IEEE会议投稿查重怎么办?Turnitin国际版实测与降重心得
  • 「知识图谱生成工具」:一键将文件夹内容变身为交互式知识图谱的免安装桌面工具(文末附免费下载链接)
  • 别再只盯着JConsole了!手把手教你用Visual VM排查Java内存泄漏(附OOM实战代码)
  • SRA数据下载太慢?试试用 Aspera 加速你的 SRA Toolkit 数据获取流程
  • AI的下一场战争:从算力到存力
  • 保姆级教程:用QGIS 3.28切好瓦片,再用CesiumJS 1.107一步调用成功
  • 别再手动试错了!用Minitab做全因子DOE,5步搞定工艺参数优化(附实战数据)
  • XHS-Downloader小红书作品下载终极指南:一键获取图文视频的完整解决方案
  • 告别野路子!STM32F4标准库V1.4.0工程搭建保姆级教程(Keil MDK环境)
  • 别再死磕公式了!用Python实战模拟TDOA定位:从Chan‘s Method到误差分析
  • 3步彻底解决Mac滚动方向混乱:Scroll Reverser终极配置指南
  • NMEA0183协议避坑指南:GPS、北斗模块数据解析中常见的5个错误
  • 运营效率重构:从“人力密集”到“人机协同高效运转”
  • Ultimate ASI Loader终极指南:3分钟学会游戏MOD加载技巧
  • 从用户视角看模态:Qt::WindowModal和ApplicationModal如何影响你的软件体验设计
  • 3分钟极速上手:全能网盘直链解析工具实战指南
  • Git实战:遇到‘本地领先远程N个提交’时,你的完整决策树与操作指南
  • 避开ANSYS SOLID65钢筋定义的坑:从实常数R/RMORE到材料TB,完整配置流程详解
  • 微调后的模型把“拒绝回答”学成了“我不知道”,合规红线直接踩穿
  • TypeScript 从零基础到精通(五):高级类型与泛型
  • 修改带mermaid的html文件生成bug:国产模型束手
  • 别只盯着热点函数了!用Intel VTune的‘异常探测’和‘内存消耗’分析揪出隐藏的性能鬼影
  • RAG系统性能优化与视觉分析方法实践
  • SAP BASIS入门实操:手把手教你配置STMS传输请求(从清空到测试全流程)
  • 为什么你的专栏引流失效?CSDN后台最新V2.3.8算法升级后,必须重配的6个AI链接关键字段
  • 云计算从入门到云原生:一篇文章吃透虚拟化、容器化、IaC与编排
  • 告别网络卡顿:手把手教你为RoCEv2配置DC-QCN拥塞控制(附mlnx_qcn命令详解)