CICFlowMeter

关注
义项:网络流量特征提取工具
CICFlowMeter

CICFlowMeter是加拿大网络安全研究所(CIC)开发的一款开源网络流量双向流生成与特征提取工具,原名ISCXFlowMeter。它从pcap文件中生成双向流,并按正向和反向分别统计持续时间、数据包数量、字节数、数据包长度、到达间隔时间等80余项流量特征,结果以CSV格式输出。该工具被广泛用于构建CICIDS2017、CICAndMal2017、CICDDoS2019等公开入侵检测数据集,是网络异常检测与加密流量分类研究中常用的特征提取环节。

百科 图文
目录
  1. 定义
  2. 原理
  3. 发展历程
  4. 应用
  5. 局限
  6. 参见

定义

CICFlowMeter是一款开源工具,其作用是从pcap文件生成双向流,并从这些流中提取特征[1]。按照加拿大网络安全研究所的介绍,它同时是一个网络流量的流生成器与分析器,输出的CSV文件每一行对应一条流,前6列分别为流标识、源IP、目的IP、源端口、目的端口和协议,其后是80余项网络流量分析特征[2]。

该工具的可移植实现版本称为CICFlowmeter-V4.0,早期名为ISCXFlowMeter,定位是用于异常检测的以太网流量双向流生成与分析器[3]。除提取特征外,它还支持从已有特征列表中挑选特征、添加新特征,以及调整流超时的时长[1]。

原理

工具以数据包为最小处理单位,把共享同一连接标识(通常为源与目的IP地址及端口的组合)的一串数据包归并为一条流[4]。在生成双向流时,以观察到的第1个数据包确定方向:从源到目的为正向,从目的到源为反向,因此与时间相关的统计量可以分别在两个方向上计算[2]。

流的结束规则依协议而异。TCP流通常在连接拆除(收到FIN包)时终止,而UDP流依靠超时结束,超时值可由使用者自行设定,例如TCP和UDP都取600秒[1]。提取出的特征可分为若干类:长度类统计如正向与反向数据包长度的最小值、最大值、均值与标准差;时间类统计如流持续时间以及相邻数据包到达间隔(Flow IAT)的均值、标准差、最大值与最小值;速率类统计如每秒字节数与每秒数据包数;此外还有FIN、SYN、RST、PSH、URG等TCP标志的计数,以及正向和反向首部长度[1]。

以到达间隔均值与包长均值这两类特征为例,它们在形式上可写作对同一条流内样本的算术平均:$\overline{IAT}=\frac{1}{n-1}\sum_{i=2}^{n}(t_i-t_{i-1})$、$\overline{L}=\frac{1}{n}\sum_{i=1}^{n}l_i$,其中$t_i$为第$i$个数据包的时间戳,$l_i$为其长度,$n$为流内数据包数。这些统计量只依赖传输层首部与包长信息,因此在载荷被加密时仍然可获得[5]。

工具用若干工作线程并行处理到达的数据包,可以离线读取pcap和pcapng文件,也可以绑定网络接口实时采集,并可将结果导出为CSV[6]。实时模式下,使用者先加载网络接口列表,选定要监视的接口后开始采集,停止时将结果保存为CSV文件[1]。

发展历程

CICFlowMeter的前身是ISCXFlowMeter,由加拿大网络安全研究所的研究者开发。与工具配套的代表性论文包括2016年发表于第2届信息系统安全与隐私国际会议(ICISSP 2016)的《利用时间相关特征刻画加密与VPN流量》,以及2017年发表的《利用基于时间的特征刻画Tor流量》,两篇论文的作者包括Gerard Draper-Gil、Arash Habibi Lashkari、Mohammad Mamun与Ali A. Ghorbani[2]。

工具随后发展出多个版本。ISCXFlowMeter时期的功能与特征集后来被更新为CICFlowMeter,公开仓库中记录到CICFlowmeter-V4.0,并有移植为Python实现的分支[3]。工具在早期需要预先安装libpcap库(Windows下为WinPcap)才能运行[1]。

在使用过程中,研究者陆续报告了特征计算方面的问题,作者随后对部分问题作了修正。例如TCP标志计数原先只对每条流的第1个数据包递增,导致数据集中这些特征的取值只有0或1,该问题于2019年10月15日被原作者修复;正向首部长度特征重复、活动与空闲时间统计中混入绝对时间戳等问题也得到处理[5]。作者还表示将在后续版本中删除重复的特征[7]。

与CICFlowMeter同源的其他工具陆续出现。研究者在CICFlowMeter基础上开发了CSTITool,在原有特征之外增加了53项特征,主要补充流的网络标识信息、描述符与字节分布[8]。2024年,面向网络层与传输层的流分析器NTLFlowLyzer发布,作者称其设计目标之一就是处理CICFlowMeter遇到的若干问题,并可从基于TCP的流量中提取300余项特征[7]。

应用

CICFlowMeter最常见的用途是为机器学习模型准备输入数据。研究者用它将原始抓包转换为按流组织、带数值特征的表,再交给随机森林、支持向量机等分类器,用于判断流量属于哪一类应用或是否为攻击[9]。在这种流程中,工具输出的CSV既可用于离线训练,也可在检测到攻击流之后,为该流生成阻断规则提供依据[9]。

该工具也是多个公开数据集的生成环节。据公开仓库的信息,基于它构建的数据集包括Android广告与通用恶意软件数据集CICAAGM2017、入侵检测数据集CICIDS2017、Android恶意软件数据集CICAndMal2017以及分布式拒绝服务数据集CICDDoS2019[3]。有研究报告指出,CICIDS2017中的网络流特征正是由该工具计算得到的[10]。此外,也有研究者用它在5G场景下从pcap文件批量提取基于流的特征[11]。

在加密流量研究领域,该工具被用于区分VPN与非VPN流量、识别Tor流量等任务,其依据是加密载荷之外仍可获得的时序与长度统计量。有研究以ISCXVPN2016数据集为基准,比较了基于ISCXFlowMeter旧特征集与CICFlowMeter新特征集的分类表现,结果显示新特征集在多数流间隔设定下取得更高的F1分数。在工程部署上,也有方案把该工具与实时抓包结合,将采集结果转换为CSV后接入检测模块[9]。

局限

该工具的输出只包含双向流的汇总信息,不提供对单个协议的直接访问,也不具备文件提取能力,且未见支持跨分布式网络的监视[6]。它的Java实现依赖jnetpcap这一pcap处理库,而该库在macOS上并未获得官方支持[6]。另有观察指出,处理大型pcap文件时已完成的流会持续留在内存中直到文件处理完毕,同时流未被正确超时,导致在跟踪的流不断增长[6]。

特征计算方面存在多处已知错误。有分析指出,包长均值、标准差与方差等统计量因第1个数据包被重复计入而出错;会话在出现带FIN标志的包时即被终止,使本属于同一连接的FIN ACK等后续包被划入下一条会话,产生大量只含一两个包、载荷长度为零的流;正向首部长度特征重复出现;计算TCP包长时误将以太网帧的填充长度计入[12]。也有代码层面的分析指出,反向流初始窗口字节数实际记录的是反向最后一个数据包的窗口大小,正向与反向PSH标志的统计结果也与字面含义不符[13]。

流的方向判定也会带来问题。工具依据第1个收到的数据包判断源与目的,当pcap文件未按时间戳排序、SYN-ACK包先于SYN包被读入时,输出流描述中的源与目的会被颠倒[14]。当TCP连接被RST标志中断时,工具不会认为会话已关闭,后续具有相同标识的通信会被并入本应关闭的那条流[15]。此外,由第1个数据包确定方向的机制在存在TCP附加段时可能使后续流继承相反的方向,进而影响标注结果[5]。

这些缺陷会影响以该工具输出为基础的数据集与模型。有研究认为,流构造中对TCP协议的理解偏差与特征提取错误违反了网络流量正确实现的要求,而过于笼统的标注策略又造成相当数量的流被错误标注[16]。另有研究指出,该工具提取的时间与长度类特征数量众多,容易造成特征高度稀疏,从而影响模型的收敛[17]。此外,工具本身只能提取特征而不能对流量作标注,数据集中的标签需要研究者按各自的方法和实验场景自行补充[7]。

参见

  • 网络流量分类 —— 依据流量的统计或载荷特征判断其所属应用类型,是该工具的主要服务目标。

  • 入侵检测系统 —— 监测网络或主机上的异常行为,常以该工具提取的流量特征作为输入。

  • 双向流 —— 由同一连接标识下正向与反向数据包共同构成的流量单元,是该工具处理的基本对象。

  • 数据包捕获 —— 从网络接口记录原始数据包并保存为pcap文件的过程,是该工具的输入来源。

  • 机器学习 —— 从样本中学习分类或判别规则的方法,使用该工具输出的特征表进行训练与检测。

参考资料

  1. Intro [引用日期2026-10-14]
  2. applications [引用日期2026-10-14]
  3. CICFlowMeter [引用日期2026-10-14]
  4. chalmers.se 上的文件 [引用日期2026-10-14]
  5. extended_doc [引用日期2026-10-14]
  6. mied18(PDF) [引用日期2026-10-14]
  7. github.com 上的网页 [引用日期2026-10-14]
  8. up.pt 上的 PDF 文件 [引用日期2026-10-14]
  9. TFM-FernandoBenayas(PDF) [引用日期2026-10-14]
  10. wtmc2021_Engelen_Troubleshooting(PDF) [引用日期2026-10-14]
  11. 5G flow-based datasets [引用日期2026-10-14]
  12. высокопроизводительного анализа сетевого трафика [引用日期2026-10-14]
  13. CICFlowMeter代码的一些问题 [引用日期2026-10-14]
  14. Sec2graph is a NIDS proposed in [11], [84] [引用日期2026-10-14]
  15. 2022LEMA1044(PDF) [引用日期2026-10-14]
  16. scispace.com 上的 PDF 文件 [引用日期2026-10-14]
  17. 2ddLqhcFo5i [引用日期2026-10-14]
词条评价
词条统计

浏览次数:2 次

阅读量:0 次 · 阅读完成量:0 次

最近更新:2026-10-13T18:44:53Z

历史版本

本条目引用的词条
网络流量分类 入侵检测系统 双向流 数据包捕获 机器学习