【科研】ET-BERT代码分析
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_generation
,get_burst_feature
- 初始化。将变量
pcap_path
(line:616)设置为要处理的 PCAP数据的目录。设置变量word_dir
(line:23)和word_name
(line:24)为预训练数据集的存放目录。 - 预处理PCAP。设置变量
output_split_path
(line:583)和pcap_output_path
(line:584)。表示PCAP
数据的pcapng
格式转换为pcap
格式的pcap_output_path
存放目录。output_split_path
代表PCAP
数据切片成session
格式的存储目录。 - 生成预训练数据集。
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 samplefor _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__':# pretrainpcap_path = "I:\\pcaps\\"# pretrain datapretrain_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.py
、dataset_generation.py
、open_dataset_deal.py
、dataset_cleanning.py
处理公共PCAP
数据集微调阶段的核心思想是先对数据集中不同标签的数据进行文件夹区分,然后对数据进行session
切分,最后根据样本需要生成包级或流级数据集.
注意:由于可能存在原始PCAP数据的复杂性,建议在报错时执行以下步骤检查代码执行情况。
- 初始化。
pcap_path
,dataset_save_path
,samples
,features,dataset_level
(line:28)为基础变量,分别代表原始数据目录、存储的生成数据目录、样本数量、特征类型和数据级别。open_dataset_not_pcap
(line:215)表示将不是PCAP
数据转换为pcap
格式的处理,例如pcapng
到pcap
。file2dir
(line:226) 表示当一个pcap
文件为类别时,生成类别目录存放PCAP
数据。 - 预处理。数据预处理主要是将目录中的
PCAP
数据拆分成session
数据。请将该splitcap_finish
参数设置为0,初始化样本数数组,sample此时设置的值不要超过最小样本数。然后您可以设置splitcap=True
(line:54)并运行拆分PCAP
数据的代码。拆分的会话将保存在pcap_path\splitcap
. - 生成数据。数据预处理完成后,需要更改变量以生成微调的训练数据。
pcap_path
应该是拆分数据的路径并且修改splitcap=False
。现在sample
的大小可以不受最小样本量的限制。open_dataset_not_pcap
和file2dir
应该是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.py
和run_classifier_infer.py
两份代码!!!
3. 预训练
3.1 预处理
要复现在网络流量数据上预训练 ET-BERT,执行以下步骤:
运行
vocab_process/main.py
生成加密后的流量语料或者直接使用生成的语料在corpora/
.
请注意,您需要更改文件路径和文件代码顶部的一些配置。运行
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
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. 微调章节
注意:您需要更改程序中的路径。
【科研】ET-BERT代码分析相关推荐
- 开源代码分析技巧之四——国外技术社区提问
开源代码分析技巧之四--国外技术社区提问 在分析源码的时候,我们或多或少都会遇到过技术瓶颈.如果不突破这个瓶颈,接下来的研究就无法继续进行.并且不止对自己是瓶颈.对团队人员.技术顾问.资深人士都没有很 ...
- 20145236《网络攻防》Exp4 恶意代码分析
20145236<网络攻防>Exp4 恶意代码分析 一.基础问题回答 如果在工作中怀疑一台主机上有恶意代码,但只是猜想,所有想监控下系统一天天的到底在干些什么.请设计下你想监控的操作有哪些 ...
- C#中类的继承 override virtual new的作用以及代码分析
继承中override virtual new的作用 virtual 父类中需要注明允许重写的方法: override 子类中必须显示声明该方法是重写的父类中的方法: new 子类中忽略父类的已存在的 ...
- 2017.4.18 静态代码分析工具sonarqube+sonar-runner的安装配置及使用
配置成功后的代码分析页面: 可以看到对复杂度.语法使用.重复度等等都做了分析,具体到了每一个方法和每一句代码. 四种使用方式: sonarqube + sonar-runner sonarqube + ...
- lighttpd1.4.18代码分析
lighttpd1.4.18代码分析(八)--状态机(2)CON_STATE_READ状态 posted @ 2008-09-24 10:50 那谁 阅读(2225) | 评论 (1) 编辑 lig ...
- Device Tree(三):代码分析
2019独角兽企业重金招聘Python工程师标准>>> 一.前言 Device Tree总共有三篇,分别是: 1.为何要引入Device Tree,这个机制是用来解决什么问题的?(请 ...
- 使用Hadoop和ELK进行业务代码分析!分分钟捉到Bug!
大数据是计算领域的新高地,它有望提供一种方法来应对二十一世纪不断增长的数据生成.越来越多的大数据爱好者正在涌现,越来越多的公司正在采用各种大数据平台,并希望提出以客户为中心的解决方案,帮助他们在竞争激 ...
- 20145328 《网络对抗技术》恶意代码分析
20145328 <网络对抗技术>恶意代码分析 ------看到这句话说明还没写完-------- 实践内容: 使用schtasks指令监控系统运行 使用sysmon工具监控系统运行 使用 ...
- starGAN原理代码分析
下载: git clone https://github.com/yunjey/StarGAN.git 1 cd StarGAN/ 1 下载celebA训练数据: bash download.sh 1 ...
最新文章
- 求1!+2!+3!+...+10!的值
- 神策数据实战学堂开课,分享行业最佳业务和技术实践
- pom文件报错_maven-resources-plugin修改了我的文件
- kafka关闭终端继续执行命令(转载)
- 用python生成的猜数字游戏
- Spring源码之bean的加载(一)
- C# 按拼音/笔划 排序的简单示例(转)
- Photoshop水平线快捷键怎么使用的?
- java开发环境实验总结_20155229 实验一《Java开发环境的熟悉》实验报告
- C# WebService 远程服务器返回错误:(500)内部服务器错误
- nginx: worker process is shutting down
- 2020年02月编程语言排行榜
- Java石头剪刀布(简单小游戏)
- 2021高考成绩已出城市查询,查分时间已公布!高考结束后别急着浪,这些填志愿技巧考生需知晓...
- Unity3D 批量修改模型名称
- 瞎搞!你真的懂什么是ERP、中台和低代码吗?
- 微软副总裁沈向洋:三十年科研路,我踩过的那些坑
- 信息学奥赛一本通-1012:计算多项式的值
- 基于C实现HMAC-MD5和HMAC-SM3
- 微信小程序开发教程手册文档
热门文章
- Unity 物理效果插件OBI使用记录,包含OBI-Rope绳索,OBI-Fluid,OBI-Cloth
- ChatGPT 帮你写情人节文案
- 东财《自我认知与职业生涯规划》单元作业一二三
- OpenGL - Hermite算法多点画光滑曲线
- 恶搞好朋友 java
- android关闭硬件动画加速器,Android中的硬件加速
- latex编辑器的选择、texlive的安装及学位模板的使用
- 解决Appium Desktop 测试中,元素不能准确定位的问题
- html+css+javascript满屏雪花爱心520表白网站 (含音乐)520告白/七夕情人节/生日礼物/程序员表白必备
- u云支付 php05,优云易支付-免签约支付平台-彩虹易支付,1分钟快速接入支付功能...