jandresportilla/CICFlowMeter-Pipeline_ProyectoAplicado_UNAD_ECDyA

GitHub: jandresportilla/CICFlowMeter-Pipeline_ProyectoAplicado_UNAD_ECDyA

基于 CICFlowMeter 的网络流量特征提取与机器学习推断流水线,将 .pcap 抓包文件转换为结构化特征数据以供预测模型评估,并通过 Docker 和 Codespaces 实现完全可复现的实验环境。

Stars: 0 | Forks: 0

[![Python 3.8.18](https://img.shields.io/badge/python-3.8.18-blue.svg)](https://www.python.org/downloads/release/python-3818/) [![Scapy 2.4.3](https://img.shields.io/badge/scapy-2.4.3-green.svg)](https://scapy.net/) [![CICFlowMeter](https://img.shields.io/badge/cicflowmeter-0.1.6-orange.svg)](https://pypi.org/project/cicflowmeter/) # CICFlowMeter Pipeline - 毕业设计目标 3 的应用 ##通过在测试集以及 CIC IoT 2023 数据集中未见过数据上的评估,分析具有最高效能的模型的泛化能力。 **生产 / 推断 --->> MLOps** image ### 数据 Pipeline:涵盖从网络捕获文件(Packet Capture,`.pcap`)到逗号分隔值(`.csv`)格式的转换,旨在将先前开发的预测模型应用于未见过的新 IoT 网络流量。 最终目的是在 GitHub Codespaces 上挂载一个使用 Python 3.8.18、scapy 2.4.3 和 cicflowmeter 0.1.6 的 devcontainer,与我本地 100% 正常运行的 Ubuntu 环境保持一致 Jaime Andres Portilla Jaimes 工程师      电信工程师 攻读数据科学与分析专家学位 基础科学、技术与工程学院 (ECBTI) 国立开放与远程教育大学 (UNAD)      专业注册号:SN290-159014      第 135 号决议 2021 年 12 月 14 日 ``` japortillaj@unadvirtual.edu.co andres.portilla@unipamplona.edu.co ``` ## CICFlowMeter(前身为 ISCXFlowMeter) #### CICFlowMeter 是一个网络流量生成器和分析器。 image image https://www.unb.ca/cic/research/applications.html 了解更多关于 CICFlowMeter 的信息 Arash Habibi Lashkari, Gerard Draper-Gil, Mohammad Saiful Islam Mamun 和 Ali A. Ghorbani,《使用基于时间的特征表征 Tor 流量》,载于第三届信息系统安全与隐私国际会议论文集,SCITEPRESS,葡萄牙波尔图,2017 年。 https://www.scitepress.org/PublicationsDetail.aspx?ID=g4gLnPa/2OM=&t=1 Gerard Drapper Gil, Arash Habibi Lashkari, Mohammad Mamun, Ali A. Ghorbani,《使用时间相关特征表征加密和 VPN 流量》,载于第二届信息系统安全与隐私国际会议论文集 (ICISSP 2016),pp.s 407-414,意大利,2016 年。 https://www.scitepress.org/PublicationsDetail.aspx?ID=cazNsYLjzhw=&t=1 本项目作为应用项目开发,此环境专为在 Docker 容器和 GitHub Codespaces 中实现**绝对的可复现性**而设计。因为谷歌 Colab 云服务限制了 UNB 的 CIC 的 cicflowmeter 所需的旧版 scrapy 版本。 ## 文件 "/content/micromamba/envs/cic38/lib/python3.8/ctypes/util.py", 第 100 行, 在 _is_elf with open(filename, 'br') as thefile: FileNotFoundError: [Errno 2] No such file or directory: b'liblibc.a' CalledProcessError Traceback (most recent call last) /tmp/ipykernel_14454/144793733.py in () ----> 1 get_ipython().run_cell_magic('bash', '', 'set -e\n\nexport MAMBA_ROOT_PREFIX=/content/micromamba\n\nPCAP="/content/drive/MyDrive/TG-Esp-DataScience-Analytics/pcap_files/DoS-TCP_Flood10.pcap"\nOUTDIR="/content/cicflow_work"\nmkdir -p "$OUTDIR"\n\nrm -f "$OUTDIR/DoS-TCP_Flood10.csv"\n\n/content/bin/micromamba run -n cic38 cicflowmeter -f "$PCAP" -c "$OUTDIR/DoS-TCP_Flood10.csv"\n\necho "Archivo generado:"\nls -lh "$OUTDIR/DoS-TCP_Flood10.csv"\necho\necho "Primeras líneas:"\nhead -n 5 "$OUTDIR/DoS-TCP_Flood10.csv"\n') 4 frames in shebang(self, line, cell) /usr/local/lib/python3.12/dist-packages/IPython/core/magics/script.py in shebang(self, line, cell) 243 sys.stderr.flush() 244 if args.raise_error and p.returncode!=0: --> 245 raise CalledProcessError(p.returncode, cell, output=out, stderr=err) 246 247 def _run_script(self, p, cell, to_close): CalledProcessError: Command 'b'set -e\n\nexport MAMBA_ROOT_PREFIX=/content/micromamba\n\nPCAP="/content/drive/MyDrive/TG-Esp-DataScience-Analytics/pcap_files/DoS-TCP_Flood10.pcap"\nOUTDIR="/content/cicflow_work"\nmkdir -p "$OUTDIR"\n\nrm -f "$OUTDIR/DoS-TCP_Flood10.csv"\n\n/content/bin/micromamba run -n cic38 cicflowmeter -f "$PCAP" -c "$OUTDIR/DoS-TCP_Flood10.csv"\n\necho "Archivo generado:"\nls -lh "$OUTDIR/DoS-TCP_Flood10.csv"\necho\necho "Primeras l\xc3\xadneas:"\nhead -n 5 "$OUTDIR/DoS-TCP_Flood10.csv"\n'' returned non-zero exit status 1. image ## Pipeline 架构 工作流分为两个主要层级: 1. **提取引擎(`scripts/`):** 通过在传入 `cicflowmeter` 之前使用 `tcpdump` 对 `.pcap` 文件实现分片,克服了 RAM(OOM Killer)的限制。 2. **分析层(`notebooks/`):** 用于 Machine Learning 实验的顺序执行和记录文档。 ## 安装与复现性 项目已预先配置了一个 `Dockerfile`,用于解决低级依赖问题(例如 Python 3.8 的 `ctypes` bug 以及对 `libpcap-dev` 的需求)。 **在 Codespaces 中运行:** 1. 点击 `Code` > `Codespaces` > `Create codespace on main`。 2. 容器将自动安装所有依赖项。 3. 打开 `notebooks/` 文件夹并按顺序执行从 `01` 到 `05` 的步骤。 ## 支持的结果与模型 应用于不同多分类、8 系列和二分类模型的 Pipeline * XGBoost * LightGBM * CatBoost * HistGradientBoosting * 像 Random Forest 这样非常庞大、存储空间超过 2GB 的模型,很难在免费的云环境中实现。就我个人而言,我的初衷并不是为专用的云服务或私有云付费。 ## 对样本应用及向 MLOps 过渡的思考 将这个 Pipeline 实施到交互式云环境源于个人提出的一个明确设想:超越传统的答辩幻灯片。其目的是为评委和指导老师提供一个直接的浏览器链接,并将其留存在我必须不断扩充的 GitHub 仓库中,作为我的作品集和参与过的项目,从而进行一次交互式的展示。这使 Jupyter Notebooks 成为一种鲜活的方法论工具,逐步展示了架构、数据科学以及在完全功能化且应用场景下的预测模型。 此外,这一决定也是一项技术风险缓解策略。尽管监督式机器学习模型最初是在基于 Linux(Ubuntu)的本地环境中使用 Spyder IDE 设计和开发的,但 MS Teams 等视频会议平台在 UNIX 系统的高需求会话中经常出现历史性的不稳定现象。为了确保虚拟答辩期间的连接万无一失,展示将通过一台 Windows 11 本地计算机进行,同时将所有密集的计算和网络依赖项委派给云端。 这样一来,实施工作就提升到了一个小规模的 MLOps 场景,直接且切实地实现了项目的第三个具体目标:在近实时场景中执行推断,以验证模型面对未见过的大规模流量样本时的效能和泛化能力。 ### 技术挑战:从 Google Colab 到 Docker 容器 从本地环境迁移到云端构成了这一阶段最大的技术挑战。一个在本地 Ubuntu 机器上仅需几天就能完成的部署,在云服务中却需要一周多的研究和调整。 最初的努力集中在 Google Colab 上,这是该大学学术活动中经常使用的平台。然而,该环境的限制性政策与 New Brunswick 大学(CIC)官方工具所需的低级依赖项产生了无法克服的冲突。scapy 的旧版本、cicflowmeter 与 Colab 的 Python 3.8 内核之间的不兼容,导致了子进程的执行失败,并生成了损坏或空的 .csv 文件,从而引发了严重的系统异常: 为了克服这一障碍,我们需要探索预配置工具之外的替代云计算路径。通过自学,最终通过 GitHub Codespaces 编排定制的 Docker 容器实现了最终的解决方案。这种方法不仅解决了操作系统级别的网络兼容性冲突,还巩固了云基础设施方面的高级技能,最终打造出了一个具备绝对可复现性的环境。 ## 关于检测仪表板 (IDS) 📊 的说明 值得一提的是,在最终的 Notebook 中,通过 seaborn 和 matplotlib 构建的用于监控警报的集成仪表板具有功能性,并且设计得很简单。图形界面或高级网络安全可视化的开发超出了本应用项目目标的正式范围。其根本目的是方法论上的:用以说明持续的预测流,并在近乎实时的时间序列中,以视觉方式验证算法在分类复杂入侵时的出色性能。 ## 故障排除与常见问题解答 **问:处理我的大型 PCAP 文件时,环境返回 `Return: -15` 错误** * **答:** 此错误对应于由于 RAM 耗尽而引发的 `SIGTERM`。请验证 `scripts/config.py` 中的 `CHUNK_SIZE_MB` 参数是否设置为 `20`。Pipeline 将自动对文件进行分片,以保护 Codespaces 的内存。 **问:为什么要使用 Python 3.8.18?** * **答:** 该版本确保了 PyPI 中可用的原生 `cicflowmeter` 版本与 `scapy==2.4.3` 之间的严格兼容性,从而实现对 84 个网络特征的最优提取。
标签:MLOps, NoSQL, Python, 无后门, 机器学习推理, 物联网, 网络流量分析, 请求拦截, 逆向工具