【科研】ET-BERT代码分析

news2024/11/15 13:39:41

0. 数据集

论文使用的TLS1.3数据集是从 2021 年 3 月到 2021 年 7 月在中国科技网 (CSTNET) 上收集的。

如果要使用自己的数据集的话,需要检查数据格式是否与datasets/cstnet-tls1.3/目录下一致,并且在data_process/目录下指定数据集路径。
在这里插入图片描述

用于微调的数据集,分为train、test、valid。微调数据集的链接—>fine-tuning cstnet-tls 1.3


1. 数据预处理【最难的】

数据预处理的md说明文件

1.1 预训练阶段

主程序dataset_generation.py

函数pretrain_dataset_generationget_burst_feature

  1. 初始化。将变量pcap_path(line:616)设置为要处理的 PCAP数据的目录。设置变量word_dir(line:23)和word_name(line:24)为预训练数据集的存放目录。
  2. 预处理PCAP。设置变量output_split_path(line:583)和pcap_output_path(line:584)。表示PCAP数据的pcapng格式转换为pcap格式的pcap_output_path存放目录。output_split_path代表PCAP数据切片成session格式的存储目录。
  3. 生成预训练数据集PCAP数据处理完成后,程序生成由BURST组成的预训练数据集。
def pretrain_dataset_generation(pcap_path):
    # pcap--->session的存储路径
    output_split_path = ".\\data\\dataset\\"
    # pcapng--->pcap的存储路径
    pcap_output_path = ".\\data\\dataset\\"    
    if not os.listdir(pcap_output_path):
        print("Begin to convert pcapng to pcap.")
        for _parent,_dirs,files in os.walk(pcap_path):
            for file in files:
                if 'pcapng' in file:
                    #print(_parent + file)
                    convert_pcapng_2_pcap(_parent, file, pcap_output_path)
                else:
                    shutil.copy(_parent+"\\"+file, pcap_output_path+file)
    
    if not os.path.exists(output_split_path + "splitcap"):
        print("Begin to split pcap as session flows.")
        
        for _p,_d,files in os.walk(pcap_output_path):
            for file in files:
                split_cap(output_split_path,_p+file,file)
    print("Begin to generate burst dataset.")
    # burst sample
    for _p,_d,files in os.walk(output_split_path + "splitcap"):
        for file in files:
            get_burst_feature(_p+"\\"+file, payload_len=64)
    return 0
# 预训练阶段dataset_generation.py  main函数主要的子函数
if __name__ == '__main__':
    # pretrain
    pcap_path = "I:\\pcaps\\"
    # pretrain data
    pretrain_dataset_generation(pcap_path)
input:原始的pcap流量
output:word_dir+word_name的burst数据--->encrypted_burst.txt文件
word_dir = "I:/corpora/"
word_name = "encrypted_burst.txt"

1.2 微调阶段

主程序data_process/main.py

函数data_preprocess.pydataset_generation.pyopen_dataset_deal.pydataset_cleanning.py

处理公共PCAP数据集微调阶段的核心思想是先对数据集中不同标签的数据进行文件夹区分,然后对数据进行session切分,最后根据样本需要生成包级或流级数据集.

注意:由于可能存在原始PCAP数据的复杂性,建议在报错时执行以下步骤检查代码执行情况。

  1. 初始化pcap_path, dataset_save_path, samples, features,dataset_level(line:28)为基础变量,分别代表原始数据目录、存储的生成数据目录、样本数量、特征类型和数据级别open_dataset_not_pcap(line:215)表示将不是PCAP数据转换为pcap格式的处理,例如pcapngpcapfile2dir(line:226) 表示当一个pcap文件为类别时,生成类别目录存放PCAP数据。
  2. 预处理。数据预处理主要是将目录中的PCAP数据拆分成session数据。请将该splitcap_finish参数设置为0,初始化样本数数组,sample此时设置的值不要超过最小样本数。然后您可以设置splitcap=True(line:54)并运行拆分 PCAP 数据的代码。拆分的会话将保存在pcap_path\splitcap.
  3. 生成数据。数据预处理完成后,需要更改变量以生成微调的训练数据。pcap_path应该是拆分数据的路径并且修改splitcap=False。现在sample的大小可以不受最小样本量的限制。open_dataset_not_pcapfile2dir应该是False。然后生成微调的数据集并保存在dataset_save_path.

2. 微调

step 1. 下载预训练模型,这个预训练模型是作者提供的pretrained_model.bin
step 2. ET-BERT 可以通过使用标记的网络流量在数据包级别进行微调来应用于特定任务
corpora链接—>encrypted_traffic_burst.txt

【困惑点1】执行代码里使用的encryptd_vocab.txt不造从哪里生成的,,待我看看代码

python3 fine-tuning/run_classifier.py --pretrained_model_path models/pre-trained_model.bin \
                                   --vocab_path models/encryptd_vocab.txt \
                                   --train_path datasets/cstnet-tls1.3/packet/train_dataset.tsv \
                                   --dev_path datasets/cstnet-tls1.3/packet/valid_dataset.tsv \
                                   --test_path datasets/cstnet-tls1.3/packet/test_dataset.tsv \
                                   --epochs_num 10 --batch_size 32 --embedding word_pos_seg \
                                   --encoder transformer --mask fully_visible \
                                   --seq_length 128 --learning_rate 2e-5

step 3. 微调分类器模型的默认路径为models/finetuned_model.bin. 然后您可以使用微调模型进行预测:

【困惑点2】finetuned_model.bin不知道哪来的,,待我看看代码

python3 inference/run_classifier_infer.py --load_model_path models/finetuned_model.bin \
                                          --vocab_path models/encryptd_vocab.txt \
                                          --test_path datasets/cstnet-tls1.3/packet/nolabel_test_dataset.tsv \
                                          --prediction_path datasets/cstnet-tls1.3/packet/prediction.tsv \
                                          --labels_num 120 \
                                          --embedding word_pos_seg --encoder transformer --mask fully_visible

总结,要仔细阅读run_classifier.pyrun_classifier_infer.py两份代码!!!


3. 预训练

3.1 预处理

要复现在网络流量数据上预训练 ET-BERT,执行以下步骤:

  1. 运行vocab_process/main.py生成加密后的流量语料或者直接使用生成的语料在corpora/.
    请注意,您需要更改文件路径和文件代码顶部的一些配置。

  2. 运行main/preprocess.py对加密流量burst语料库进行预处理。

   python3 preprocess.py --corpus_path corpora/encrypted_traffic_burst.txt \
                         --vocab_path models/encryptd_vocab.txt \
                         --dataset_path dataset.pt --processes_num 8 --target bert
  1. data_process/main.py如果有pcap格式的数据集需要处理,运行生成下游任务的数据。这个过程包括两个步骤:
    第一步是分割。通过设置datasets/main.py:54中的splitcap=True来拆分流量文件并另存为npy数据集;
    第二步是生成微调数据。如果您使用共享数据集,则需要在dataset_save_path下创建一个文件夹dataset并将数据集复制到此处。

3.2 预训练

要复现在标记数据上微调 ET-BERT 所需的步骤,运行pretrain.py以进行预训练。

   python3 pre-training/pretrain.py --dataset_path dataset.pt --vocab_path models/encryptd_vocab.txt \
                       --output_model_path models/pre-trained_model.bin \
                       --world_size 8 --gpu_ranks 0 1 2 3 4 5 6 7 \
                       --total_steps 500000 --save_checkpoint_steps 10000 --batch_size 32 \
                       --embedding word_pos_seg --encoder transformer --mask fully_visible --target bert

3.3 微调

要查看如何使用 ET-BERT 执行加密流量分类任务的示例,运行fine-tuning下的run_classifier.py脚本。

具体看上文的1. 微调章节

注意:您需要更改程序中的路径。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/187531.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Pomotroid 使用指南:一款高颜值 PC 端番茄时钟

文章首发于个人公众号:「阿拉平平」 番茄工作法作为一套高效易行的时间管理方案,是由意大利人弗朗西斯科西里洛于 1992 年创立的。作者发明的初衷源自于自身严重的拖延症,于是他找来一个厨房用的番茄计时器,调到 10 分钟&#xff…

游戏SDK(二)框架设计

前言 根据上一篇游戏SDK(一) 客户端整体架构,介绍了游戏SDK 及 游戏SDK的需求分析。根据需求分析,对游戏SDK的设计分为3大块: 客户端:接口统一,做好逻辑转发和处理。具体渠道具体实现&#xf…

【高并发】- 生产级系统搭建 - 4

前言 关于高并发系统中,当前比较热门的还是属于“秒杀”系统,前面章节在整理了“秒杀”系统的相关设计概念后,本章节,来讲解扣减库存相关的业务逻辑。 1 库存的那些事 一般电商网站中,购买流程一般都是这样的&#xff…

多线程之Callable接口、ReentrantLock、信号量 Semaphore以及CountDownLatch

目录:一、Callable接口Callable的用法小结二、ReentrantLockReentrantLock 的用法ReentrantLock 和 synchronized 的区别?为什么有了 synchronized 还需要 juc(java.util.concurrent) 下的 lock?三、信号量 Semaphore如何理解信号量&#xff…

Python接口测试实战4(下) - 框架完善:用例基类,用例标签,重新运行上次失败用例

本节内容使用用例基类自定义TestSuitecollect-only的实现testlist的实现用例tags的实现rerun-fails的实现命令行参数的使用更简单的用例编写使用用例基类因为每条用例都需要从excel中读取数据,解析数据,发送请求,断言响应结果,我们…

阿里云ECS学习笔记1

ECS:弹性计算服务。CPU可以热插、内存可变大变小、硬盘可以增加~ 注册: 在企业中,应该以企业的身份进行注册,而不是以个人身份进行注册。 手机号:行政部门专门管理注册的账号资源的,而不使用个人或者老板…

【可解释性机器学习】解释基于XGBoost对泰坦尼克号数据集的预测过程和结果

解释基于XGBoost对泰坦尼克号数据集的预测过程和结果1. 训练数据2. 简单的 XGBoost 分类器3. 解释重量4. 解释预测5. 添加文本特性参考资料本文介绍如何分析XGBoost分类器的预测( eli5也支持 XGBoost和大多数 scikit-learn树集成的回归)。 我们将使用 Ti…

【数据结构】8.5 归并排序

文章目录相邻两个有序子序列的归并归并排序算法归并排序算法分析基本思想 将两个或两个以上的有序子序列归并为一个有序序列。在内部排序中,通常采用的是2-路归并排序。 即:将两个位置相邻的有序子序列 R[l…m] 和 R[m1…n] 归并为一个有序序列 R[l…n]…

1个寒假能学会多少网络安全技能?

现在可以看到很多标题都声称三个月内就可以转行网络安全领域,并且成为月入15K的网络工程师。那么,这个寒假的时间能学多少网络安全知识?是否能入门网络安全工程师呢? 答案是肯定的。 虽然网络完全知识是一门广泛的学科&#xff…

在线支付系列【9】微信支付之申请微信公众号

有道无术,术尚可求,有术无道,止于术。 文章目录前言申请微信公众号前言 由于微信支付的产品体系全部搭载于微信的社交体系之上,所以直连商户或服务商接入微信支付之前,都需要有一个微信社交载体,该载体对应…

天啦撸~ChatGPT通过国际软件测试工程师(ISTQB)认证了~

天啦撸!目前最火的AI应用ChatGPT通过ISTQB认证了~ 近期,国外的一位工程师,放出了他用ChatGPT通过认证的相关信息。 ChatGPT相信大家都知道是什么了,ISTQB相信很多测试小伙伴也不陌生,而且很多考证的小伙伴也对此梦寐以…

Linux之网络性能测试工具netperf实践

一、netperf简介 Netperf是一种网络性能的测量工具,主要针对基于TCP或UDP的传输。Netperf根据应用的不同,可以进行不同模式的网络性能测试,即批量数据传输(bulk data transfer)模式和请求/应答(request/rep…

公司通知要大裁员,hr太强势,和所有人吵起来,老板见势不妙,不得不答应大家要求,把HR一起裁掉了!...

在裁员中,hr一般都会代表老板的利益和员工对抗,但如果hr和员工闹翻了,老板会维护hr吗?一位网友说:一上班就收到消息要裁员,立马让报上名单面谈,锁电脑关权限。后面那些人面谈的时候吵起来了&…

OpenAI Chatgpt注册及使用教程

零、什么是chatgpt?​ 1、简介 ChatGPT(Chat Generative Pre-trained Transformer)是OpenAI于 2022 年 11 月推出的聊天机器人。它建立在 OpenAI 的GPT-3大型语言模型家族之上,并经过微调(一种迁移学习的方法)…

双点双向的ISIS与OSPF、OSPF与OSPF、ISIS与ISIS环境以路由策略解决(1tag、2tag、4tag介绍与配置)

3.1.1 双点双向的ISIS与OSPF、OSPF与OSPF、ISIS与ISIS环境以路由策略解决(1tag、2tag、4tag介绍与配置) OSPF与ISIS双点双向 次优的产生与解决: 由于OSPF引入外部路由之后其优先级为150,再由ASBR进行双向引入之后。 原先OSPF外部…

闲鱼自动化软件——筛选/发送系统 V20已经测试完毕

做程序,就是不断地改,不断地优化。当改动达到一定程序,已经和前面形成断代,程序的升级时刻便到了。V20做了哪些更改或优化。1。优化抓取:在抓取环境优化参数,使抓取更顺滑,抓取数据效果上更准确…

智能家居创意DIY-Homekit智能灯

一、什么是智能灯 传统的灯泡是通过手动打开和关闭开关来工作。有时,它们可以通过声控、触控、红外等方式进行控制,或者带有调光开关,让用户调暗或调亮灯光。 智能灯泡内置有芯片和通信模块,可与手机、家庭智能助手、或其他智能…

若依-excel预览功能实现

实现效果及源码 实现效果如下图所示: 实现思路: 1.动态表格:定义表头数组,表格遍历表头生成表格列 2.读取excel文件内容,封装表头,绑定表格数据 代码修改 首先参考若依官网,先实现excel导入功…

C++基础——C++ 字符串

C基础——C 字符串C 字符串C 风格字符串C 中的 String 类C 字符串 C 提供了以下两种类型的字符串表示形式: C 风格字符串C 引入的 string 类类型 C 风格字符串 C 风格的字符串起源于 C 语言,并在 C 中继续得到支持。字符串实际上是使用 null 字符 ‘…

126、【回溯算法】leetcode ——332. 重新安排行程:回溯算法(C++版本)

题目描述 原题链接:332. 重新安排行程 解题思路 本题要解决的问题: 需要构建起始与目的机场的映射关系;每次选择目的机场时,需要选择当前最小字母顺序的机场;从“JFK”之后依次飞往,并且可能会有多条路径…