【论文学习】基于序列统计的未知无线协议特征提取方法

news2024/11/13 9:44:19

  • 【参考文献】刘治国,蔡文珠,李运琪,等.基于序列统计的未知无线协议特征提取方法[J].计算机工程,2021,47(11):192-197.DOI:10.19678/j.issn.1000-3428.0059551.
  • 【注】本文仅为作者个人学习笔记,如有冒犯,请联系作者删除。

这篇题为《基于序列统计的未知无线协议特征提取方法》的论文,主要研究在未知无线网络环境下,如何从比特流形式的协议数据中提取特征。由于比特流形式的协议数据帧特征不明显,且缺乏先验知识进行分析,特征提取面临较大困难。为了解决这一问题,作者提出了一种基于序列统计的特征提取方法。

在未知无线网络环境下,比特流形式的协议数据帧特征不明显,且缺乏先验知识对其进行分析,造成特征提取困难。提出一种利用序列统计提取未知无线协议特征的方法。统计数据中定长序列出现的频次和位置,根据概率和相似性筛选满足频繁条件的固定序列和交互序列,得到频繁项集,并借鉴关联规则连接频繁项集中的频繁序列,去除冗余的序列信息,得到协议特征集。仿真结果表明,该方法能够有效提高未知无线协议特征提取效果,准确率稳定在90%以上。

关键词:特征提取;序列统计;固定序列;关联规则;比特流

1.引言

由于比特流形式的协议包含的数据特征形式较为单一,因此提取关键的比特流序列作为协议特征是一种有效的方式。通过挖掘特征序列所在帧内位置、特征序列帧内位置关系等辅助信息,并将关键序列、序列位置和序列位置关系作为复合特征,可提高协议识别的准确率。

为提高未知协议特征提取的准确率,本文提出一种基于序列统计的特征提取方法FEMSA。统计定长序列出现的位置和频次,以序列是否固定和交互作为筛选条件来提取频繁项,从而提高频繁项提取的效率。同时通过关联规则连接频繁序列,去除冗余的序列信息来优化频繁项集,最终得到协议特征集合。

2.比特流形式协议

完整的帧格式由帧头、控制段、数据段、验证信息等组成,这些部分又可以分为固定域和变化域。

  • 固定域包括固定序列和交互序列。固定序列为在同一位置内只出现一种序列或者固定出现几种序列,若2种序列交替出现,则称为交互序列。
  • 变化域可称为数据域,指各种变化的数据序列。

为在后文中方便描述,做以下定义:

  1. 定义1:Fi为提取出的频繁项,Ci为提取出的协议特征,两者都由三元组[Si,Li,Pi]表示。其中:Si为统计序列;Li为序列Si在帧内出现的位置;Pi为序列Si在位置Li出现频率,频率阈值min_sup可以通过Jaccard系数来获得。
  2. 定义2:二元组[Lij,Tij]表示某一序列的位置和在当前位置出现的频次。其中:Lij为序列出现的位置;Tij为序列在位置Lij处出现的频次。
  3. 定义3:二元组[Sij,Pij]表示在帧内某一位置上出现的序列和序列在当前位置出现频率。其中:Sij为在某一位置处出现的序列;Pij为Sij序列在当前位置出现的频率。

3.基于序列统计的特征提取方法

常用的协议特征提取方法是遍历统计,即统计可能出现的比特组合各种状态出现的频次,选取出现频次多的比特组合供后续研究使用。若未知协议特征长度不固定,则需要在扫面数据帧集时逐次增加比特数,由此带来因反复扫描数据帧集而造成分析工作量大的问题。

对此,文献[13]提出了基于特征分析矩阵的协议特征获取方法FAMM。该方法无需反复扫描数据帧集,但是需要创建特征分析矩阵存储每一个备选特征序列的后续一定长度字符串,且备选特征序列长度增加需扫描特征分析矩阵。当源数据量很大时,需要增大空间创建分析矩阵,而当特征长度逐次增加比特时,则需要反复扫描特征分析矩阵。因此,文献[13]方法并未从本质上改变因长度变化导致的多次扫描数据时间消耗的问题。

[13] 张永光,翟绪论. 比特流分析[M]. 北京:电子工业出版社,2018. ZHANG Y G,ZHAI X L. Bit flow analysis [M]. Beijing: Electronic Industry Press,2018.(in Chinese)

本文结合闭包性思想[16]提出一种定长统计序列频繁度的方法,通过遍历一次数据,建立一个序列长度为lbit的特征分析矩阵A,记录统计序列、序列的位置和频次,同时统计频次大于min_sup的序列,得到初始频繁项集

对频繁序列仅通过出现的频次进行筛选,造成出现错误序列的可能性较大,对此,本文增加筛选条件以降低误识率。如图1所示,由于协议中存在固定和交互序列,因此为提高特征提取准确率和协议识别效率,挖掘更多的协议特征信息,本文根据概率统计和相似性度量思想,在满足频繁条件的序列中提取固定和交互序列,得到频繁项集。由于前序提取结果中存在序列重叠的问题,因此得到的频繁项集中存在大量的冗余信息。此外,真实的协议特征长度是不固定的,采用定长序列统计的方法无法完整表达协议特征。本文引入关联规则的思想连接相关频繁序列,以得到更长的频繁序列,并以更长频繁序列替换原有的频繁序列更新频繁项集,将协议特征集提取分为频繁项集提取和关联规则连接频繁序列两部分。

特征提取过程如图所示。

3.1 频繁项集提取

初始频繁序列提取过程。设初始序列长度l,将2l种lbit组合作为初始序列进行统计。扫描数据,统计所有2l种长度为l的比特组合出现的位置和频次以及存储位置和频次,构成特征分析矩阵A。该矩阵含有2l行,为列可增矩阵,每行元素数量不定,每个元素表示为[Lij,Tij]。特征分析矩阵A存储多种序列出现的位置和频次,矩阵的一行表示同一序列出现的位置和频次,表示如下:

构造特征分析矩阵(Construct the Feature Analysis Matrix,CFAM)算法描述如下:

算法:CFAM算法

输入:n帧比特流形式的数据

输出:特征分析矩阵A

根据概率统计和相似度思想提取固定序列和交互序列对初始频繁项集进行筛选。由于协议固定序列和交互序列出现的情况与位置和包含内容有关,因此根据初始频繁项集构建一个索引为位置Li的查询矩阵B,存储特征序列和频率。查询矩阵B是一个列可增矩阵,由二元组bij组成,存储在不同位置上出现的序列和序列在当前位置上出现的频率,矩阵的一行表示在相同位置上出现的所有序列和序列频率。

通过对大量协议帧集统计得出固定序列和交互序列在协议中存在的规律,通过查询矩阵B对满足规律的固定序列和交互序列提取到频繁项集。固定序列和交互序列提取(FixedandInteractiveSequenceExtraction,FISE)算法描述如下:

算法:FISE 算法

输入:查询矩阵 B

输出:频繁项集 F

在位置Li上的序列出现频率为1,对单协议而言这样的序列一定是此协议的固定序列,在位置Li上出现的序列频率和为1,说明在当前位置反复出现几个序列,这几个序列亦是此协议在当前位置上的固定序列。当similar()值超过repe_rate阈值时,即在Li位置超过repe_rate的数据在Lj位置的集合中也出现了,将位置Li和Lj出现的初始频繁序列作为交互序列提取出来;若在位置Li上,2个初始频繁序列具有repe_rate的相似度,则作为交互序列提取出来。
上述方法能够识别提取固定序列和在2个位置出现或相同位置出现的相似度很高的交互序列。在分析中出现固定序列和交互序列提取冲突时,以交互序列提取为准。但是交互序列的提取存在一定的局限性:提取的数据必须是短时间内有交互的数据,即对于在某些设备只发送信息而不接收信息或在另外的设备只接收信息而不发送信息的环境下抓取的数据帧,用此方法提取交互序列存在一定困难性。 

3.2 关联规则连接频繁序列

本文引入关联规则的思想,通过频繁序列连接(FrequentlySequenceConnected,FSC)算法连接频繁项集中的序列得到更长频繁序列,更新频繁项集。此操作能够去除冗余信息,得到更为精简的频繁序列,最终得到协议特征集。

通过 FSC 算法对频繁项集中的频繁序列根据关联的思想进行连接,去除频繁项集中冗余信息,优化频繁项集得到协议特征集。算法描述如下:

FSC 算法
输入: 频繁项集 F

输出: 协议特征集 C

4.代码复现

假设数据为这种比特流的数据序列形式:

 给出这三个算法的python的实现代码,数据中,每一行为一个协议数据序列。

4.1 CFAM 算法

import numpy as np

def construct_feature_analysis_matrix(data, sequence_length):
    num_sequences = 2 ** sequence_length
    feature_matrix = [[] for _ in range(num_sequences)]
    
    for i, frame in enumerate(data):
        for j in range(len(frame) - sequence_length + 1):
            sequence = frame[j:j + sequence_length]
            sequence_index = int(sequence, 2)
            if not any(pos == j for pos, _ in feature_matrix[sequence_index]):
                feature_matrix[sequence_index].append([j, 1])
            else:
                for pos_freq in feature_matrix[sequence_index]:
                    if pos_freq[0] == j:
                        pos_freq[1] += 1
                        break
    
    return feature_matrix

# Usage
sequence_length = 3  # Example sequence length
data_sequences = data[0].tolist()
feature_matrix = construct_feature_analysis_matrix(data_sequences, sequence_length)

4.2 FISE 算法

def fixed_and_interactive_sequence_extraction(feature_matrix, min_sup, repe_rate):
    frequent_items = []
    for index, sequences in enumerate(feature_matrix):
        total_count = sum(freq for _, freq in sequences)
        if total_count / len(data_sequences) >= min_sup:
            frequent_items.append([index, sequences])
    
    fixed_sequences = []
    interactive_sequences = []
    for seq_index, sequences in frequent_items:
        if len(sequences) == 1 and sequences[0][1] / len(data_sequences) == 1:
            fixed_sequences.append([seq_index, sequences[0][0], 1])
        elif len(sequences) == 2:
            s1, s2 = sequences
            similar = len(set(s1).intersection(s2)) / len(set(s1).union(s2))
            if similar >= repe_rate:
                interactive_sequences.append([seq_index, sequences])
        else:
            total_freq = sum(freq for _, freq in sequences)
            if total_freq == len(data_sequences):
                fixed_sequences.append([seq_index, sequences[0][0], 1])
    
    return fixed_sequences, interactive_sequences

# Usage
min_sup = 0.1  # Example minimum support threshold
repe_rate = 0.8  # Example repeat rate threshold
fixed_sequences, interactive_sequences = fixed_and_interactive_sequence_extraction(feature_matrix, min_sup, repe_rate)

4.3 FSC 算法

def frequently_sequence_connected(fixed_sequences, interactive_sequences, min_conf):
    frequent_item_set = fixed_sequences + interactive_sequences
    connected_sequences = []
    
    for i in range(len(frequent_item_set)):
        for j in range(i + 1, len(frequent_item_set)):
            seq1, pos1, _ = frequent_item_set[i]
            seq2, pos2, _ = frequent_item_set[j]
            if pos1 <= pos2 + len(seq2) or pos2 <= pos1 + len(seq1):
                combined_seq = f"{seq1}{seq2}"
                combined_freq = sum(1 for seq in data_sequences if combined_seq in seq)
                combined_prob = combined_freq / len(data_sequences)
                if combined_prob >= min_conf:
                    connected_sequences.append([combined_seq, pos1, combined_prob])
    
    return connected_sequences

# Usage
min_conf = 0.6  # Example minimum confidence threshold
connected_sequences = frequently_sequence_connected(fixed_sequences, interactive_sequences, min_conf)

对提供的代码进行微调,可实现代码:

# — coding: utf-8 —
import numpy as np
import pandas as pd

# Load the data
file_path = 'xxx.csv'
data = pd.read_csv(file_path, header=None)

# Display the first few rows of the data to understand its structure
print(data.head())

# CFAM Algorithm
def construct_feature_analysis_matrix(data, sequence_length):
    num_sequences = 2 ** sequence_length
    feature_matrix = [[] for _ in range(num_sequences)]
    
    for i, frame in enumerate(data[0]):
        frame = frame.strip()  # Remove any surrounding whitespace
        for j in range(len(frame) - sequence_length + 1):
            sequence = frame[j:j + sequence_length]
            if all(c in '01' for c in sequence):  # Ensure the sequence is a binary string
                sequence_index = int(sequence, 2)
                if not any(pos == j for pos, _ in feature_matrix[sequence_index]):
                    feature_matrix[sequence_index].append([j, 1])
                else:
                    for pos_freq in feature_matrix[sequence_index]:
                        if pos_freq[0] == j:
                            pos_freq[1] += 1
                            break
    
    return feature_matrix

# Usage
sequence_length = 3  # Example sequence length
data_sequences = data[0].tolist()
feature_matrix = construct_feature_analysis_matrix(data_sequences, sequence_length)

# Displaying the feature matrix for the first few sequences
print("Feature Matrix:", feature_matrix[:5])

# FISE Algorithm
def fixed_and_interactive_sequence_extraction(feature_matrix, min_sup, repe_rate):
    frequent_items = []
    for index, sequences in enumerate(feature_matrix):
        total_count = sum(freq for _, freq in sequences)
        if total_count / len(data_sequences) >= min_sup:
            frequent_items.append([index, sequences])
    
    fixed_sequences = []
    interactive_sequences = []
    for seq_index, sequences in frequent_items:
        if len(sequences) == 1 and sequences[0][1] / len(data_sequences) == 1:
            fixed_sequences.append([seq_index, sequences[0][0], 1])
        elif len(sequences) == 2:
            s1, s2 = sequences
            similar = len(set(s1).intersection(s2)) / len(set(s1).union(s2))
            if similar >= repe_rate:
                interactive_sequences.append([seq_index, sequences])
        else:
            total_freq = sum(freq for _, freq in sequences)
            if total_freq == len(data_sequences):
                fixed_sequences.append([seq_index, sequences[0][0], 1])
    
    return fixed_sequences, interactive_sequences

# Usage
min_sup = 0.1  # Example minimum support threshold
repe_rate = 0.8  # Example repeat rate threshold
fixed_sequences, interactive_sequences = fixed_and_interactive_sequence_extraction(feature_matrix, min_sup, repe_rate)
print("Fixed Sequences:", fixed_sequences)
print("Interactive Sequences:", interactive_sequences)

# FSC Algorithm
def frequently_sequence_connected(fixed_sequences, interactive_sequences, min_conf):
    frequent_item_set = fixed_sequences + interactive_sequences
    connected_sequences = []
    
    for i in range(len(frequent_item_set)):
        for j in range(i + 1, len(frequent_item_set)):
            seq1, pos1, _ = frequent_item_set[i]
            seq2, pos2, _ = frequent_item_set[j]
            if pos1 <= pos2 + len(seq2) or pos2 <= pos1 + len(seq1):
                combined_seq = f"{seq1}{seq2}"
                combined_freq = sum(1 for seq in data_sequences if combined_seq in seq)
                combined_prob = combined_freq / len(data_sequences)
                if combined_prob >= min_conf:
                    connected_sequences.append([combined_seq, pos1, combined_prob])
    
    return connected_sequences

# Usage
min_conf = 0.6  # Example minimum confidence threshold
connected_sequences = frequently_sequence_connected(fixed_sequences, interactive_sequences, min_conf)
print("Connected Sequences:", connected_sequences)

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

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

相关文章

U-Net++原理与实现(含Pytorch和TensorFlow源码)

U-Net原理与实现 引言1. U-Net简介1.1 编码器&#xff08;Encoder&#xff09;1.2 解码器&#xff08;Decoder&#xff09;1.3 跳跃连接&#xff08;Skip Connections&#xff09; 2. U-Net详解2.1 密集跳跃连接2.2 嵌套和多尺度特征融合2.3 参数效率和性能2.4 Pytorch代码2.5 …

conda搭建环境,pycham使用

相信学习了tensorflowjs后一定不会满足&#xff0c;毕竟tensorflowjs使用场景以及开源度远不及pyhton的tensorflow&#xff0c;所以不要犹豫&#xff0c;开始使用python吧&#xff0c;有ChatGPT帮助&#xff0c;比想象的简单很多 python环境安装 conda环境安装 推荐大家直接…

[STM32][Bootloader][教程]STM32 HAL库 Bootloader开发和测试教程

0. 项目移植 对于不想知道其执行过程的朋友来说&#xff0c;可以直接移植&#xff0c;我的板子是STM32F411CER6, 512K M4内核 项目地址&#xff1a; Bootloader&#xff08;可以自己写标志位用于自测&#xff0c;项目中这部分代码已经被注释&#xff0c;可以打开自行测试&…

中国智能物流头部集成商的“江湖地位”及其“独门秘笈”

导语 大家好&#xff0c;我是社长&#xff0c;老K。专注分享智能制造和智能仓储物流等内容。 物流仓储自动化领域犹如一片充满机遇与挑战的江湖&#xff0c;各大企业群雄逐鹿&#xff0c;各展所长。这些企业&#xff0c;如同金庸小说中的武林高手&#xff0c;不仅拥有深厚的内功…

后台列表复制功能

html&#xff1a; <el-button click"copy(row)">复制</el-button><!-- 复制弹框 --> <el-dialog :close-on-click-modal"false" title"复制" width"600px" :visible.sync"copyVisible" append-to-bod…

博世战胜三星,577亿最大笔收购,豪赌杀入自动化新业务

导语 大家好&#xff0c;我是社长&#xff0c;老K。专注分享智能制造和智能仓储物流等内容。 新书《智能物流系统构成与技术实践》 德国工业巨头博世再次震惊业界&#xff01;近日&#xff0c;这家总部位于斯图加特的科技公司以74亿欧元&#xff08;约合人民币577亿&#xff09…

自动化测试常用函数(Java方向)

目录 一、元素的定位 1.1 cssSelector 1.2 xpath 1.2.1 获取HTML页面所有的节点 1.2.2 获取HTML页面指定的节点 1.2.3 获取⼀个节点中的直接子节点 1.2.4 获取⼀个节点的父节点 1.2.5 实现节点属性的匹配 1.2.6 使用指定索引的方式获取对应的节点内容 二、操作测试对…

麒麟系统如何删除光盘刻录痕迹??

&#x1f3c6;本文收录于《CSDN问答解惑-专业版》专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收…

一文解读ReentrantLock

本期说一下ReentrantLock的相关面试题。 Lock接口 是JDK层面锁 悲观锁 可重入锁。&#xff08;可重入锁&#xff08;Reentrant Lock&#xff09;是一种支持线程重复获取锁的锁机制。当一个线程已经获得了可重入锁后&#xff0c;它可以再次请求该锁而不会被阻塞&#xff0c;这就…

第G6周:CycleGAN实战

本文为365天深度学习训练营 中的学习记录博客 原作者&#xff1a;K同学啊 可参考论文&#xff1a;《Unpaired Image-to-Image Translation》 1、CycleGAN 能做什么&#xff1f; CycleGAN的一个重要应用领域是Domain Adaptation&#xff08;域迁移&#xff1a;可以通俗的理解为…

Stable Diffusion 使用详解(5)---- 光影效果与场景融入

目录 背景 底模选取 提示词 ControlNet openpose illumination 效果 背景 有一家服装品牌店&#xff0c;需要绘制一款模特穿着某个英文LOG的漂亮服装&#xff0c;这是一种很常见UI作画需求&#xff0c;这类需求实际上可以透过选取正确的底模 controlNet 进行完美的实现…

vite vue3 Webstorm multiple export width the same name “default“

系统格式不一样&#xff0c;导致代码文件格式冲突导致的&#xff0c;解决方法找到对应的文件&#xff0c;将文件类型切换成LF。

软件测试--兼容性测试

兼容性测试综述 软件兼容性测试是指检查软件之间是否能够正确的交互和共享信息 交互可以同时运行于同一台计算机上的两个程序之间&#xff0c;甚至在相隔几千公里通过因特网连接的不同计算机上的两个程序之间进行。还可以离线介质如导出到介质然后导入到其他计算机的其他软件…

2024年最新护眼台灯攻略:孩视宝、飞利浦和书客护眼台灯哪个好

在当今数字时代&#xff0c;无论是工作还是学习&#xff0c;长时间面对电子屏幕已成为日常。这对眼睛健康提出了挑战&#xff0c;尤其是对于成长中的孩子&#xff0c;正确的照明环境对保护视力至关重要。因此&#xff0c;选择一款高质量的护眼台灯成为了许多家庭的刚需。 如今…

OPenCV高级编程——OPenCV形态学之腐蚀、膨胀、开运算、闭运算、形态学梯度等详解

目录 引言 形态学基础 结构元素&#xff08;Structuring Element&#xff09; 基本形态学操作 腐蚀&#xff08;Erosion&#xff09; 膨胀&#xff08;Dilation&#xff09; 开运算&#xff08;Opening&#xff09; 闭运算&#xff08;Closing&#xff09; 高级形态学…

读零信任网络:在不可信网络中构建安全系统06授权

1. 授权 1.1. 授权决策不容忽视&#xff0c;所有访问请求都必须被授权 1.2. 数据存储系统和其他各支撑子系统是授权的基石 1.2.1. 子系统提供访问控制的权威数据源和评估依据&#xff0c;直接影响授权决策 1.2.2. 谨慎区分各子系统的职责和能力&#xff0c;需要将其严格隔离…

高数经典反例记录(持续更新)

这篇博客总结了一些易混淆的概念以及经典反例&#xff0c;全部看完会有收获的&#xff0c;后期可能会继续补充&#xff01; 1.概念模糊 2.极限存在/不存在问题

豹5全新价格引爆市场,技术平权开启SUV新篇章

关注汽车市场的小伙伴&#xff0c;想必都知道最近方程豹品牌的豹5车型&#xff0c;打出了23.98万元至30.28万元的全新价格区间&#xff0c;重新定义了SUV市场的竞争格局。 方程豹的这一举动&#xff0c;立刻引发了市场的热烈讨论&#xff1a;“豹5现在值得入手吗&#xff1f;”…

科普文: jdk 1.7和 jdk 1.8 中ConcurrentHashMap 原理浅析

1. 前言 为什么要使用 ConcurrentHashMap 主要基于两个原因&#xff1a; 在并发编程中使用 HashMap 可能造成死循环(jdk1.7,jdk1.8 中会造成数据丢失)HashTable 效率非常低下 2. ConcurrentHashMap 结构 jdk 1.7 和 jdk 1.8 中&#xff0c;ConcurrentHashMap 的结构有着很…

软件产品测试报告包括哪些内容?专业软件测试服务供应商推荐

在当今快速发展的软件行业中&#xff0c;软件产品测试报告的重要性愈加凸显。卓码软件测评作为专业的软件测试服务供应商&#xff0c;深知一份高质量的测试报告对于开发团队、管理层以及客户的重要性。 软件产品测试报告是对软件产品在测试过程中所表现出来的各项指标和特性的…