【网络BSP开发经验】网络流量应用识别技术

news2024/11/16 13:25:54

文章目录

  • 网络流量应用识别技术
    • 背景
    • 应用识别基本原理
    • 应用识别主流技术方向
      • 特征识别技术
        • 单报文解析
        • 流特征解析
      • 关联识别技术
        • DNS关联识别
      • 行为识别技术
    • 应用识别框架介绍
    • 应用特征提取经验
      • tcpdump 抓包方式
          • 默认启动
          • 监视指定网络接口的数据包
          • 监视指定主机的数据包
      • 禁用特征提取
      • 加速特征提取
      • 在线时长特征提取

网络流量应用识别技术

背景

儿童上网保护和智能QOS功能作为路由器常见的两个功能,对于应用流量识别的准确度和识别效率具有很高的要求,原有识别框架总体是基于openwrt的oaf框架以及iptables的部分识别,如图所示:

在这里插入图片描述

该框架存在以下几个问题:

1) 解包路径冗余,儿童上网保护与智能QOS以及大量的iptable规则,解包流程多次重复,导致解析效率降低,代码难以维护。

2)与设备强耦合。针对单一报文特征进行解析,对于复杂的特征现有框架单一描述。

应用识别基本原理

应用流量识别的基本原理是在网络报文的netfilter的链中挂上钩子,在钩子中对报文进行解析,然后与应用特征进行对比,如果对比成功则做出相应动作。

下图是linux netfilter在网络层的实现细节:

在这里插入图片描述

netfilter在网络层安装了5个钩子,对应5个链,还可以通过编写内核模块来扩展这5个链的功能。

五个链(chain)及对应钩子
PREROUTING --> NF_INET_PRE_ROUTING

INPUT --> NF_INET_LOCAL_IN

FORWARD --> NF_INET_FORWARD

OUTPUT–> NF_INET_LOCAL_OUT

POSTROUTING --> NF_INET_POST_ROUTING

挂载点解析:

PRE_ROUTING:路由前。数据包进入IP层后,但还没有对数据包进行路由判定前。

LOCAL_IN:进入本地。对数据包进行路由判定后,如果数据包是发送给本地的,在上送数据包给上层协议前。

FORWARD:转发。对数据包进行路由判定后,如果数据包不是发送给本地的,在转发数据包出去前。

LOCAL_OUT:本地输出。对于输出的数据包,在没有对数据包进行路由判定前。

POST_ROUTING:路由后。对于输出的数据包,在对数据包进行路由判定后。

路由判定:

从上图可以看出,路由判定是数据流向的关键点。

第一个路由判定通过查找输入数据包IP头部 的目的IP地址 是否为本机的IP地址,如果是本机的IP地址,说明数据是发送给本机的。否则说明数据包是发送给其他主机,经过本机只是进行中转。

第二个路由判定根据输出数据包IP头部 的目的IP地址 从路由表中查找对应的路由信息,然后根据路由信息获取下一跳主机(或网关)的IP地址,然后进行数据传输。

数据包流向 从图中可以看到,三个方向的数据包需要经过的钩子节点不完全相同:

发往本地:NF_INET_PRE_ROUTING -->NF_INET_LOCAL_IN

转发:NF_INET_PRE_ROUTING -->NF_INET_FORWARD -->NF_INET_POST_ROUTING

本地发出:NF_INET_LOCAL_OUT -->NF_INET_POST_ROUTING

那么为了实现为了处理所有的报文,应用识别的回调函数一定需要挂载在POST_ROUTING链上,因为应用识别需要关注的是路由器转发以及自己发出的所有报文,如果在PRE_ROUTING链上挂载,那么路由器自己作为DNS服务器发出的DNS报文就没有办法解析,所以为了解析所有报文应用识别报文需要放到POST_ROUTING上。

应用识别主流技术方向

特征识别技术

特征识别技术是业务感知应用识别最基本的技术手段,它通过识别非加密报文中的特征信息来确定业务流量所对应的应用。不同的应用通常会采用不同的协议,而不同的应用协议具有各自的特征,这些特征可能是特定端口,特定字符串,或者特定比特序列。除了检测报文中的传统五元组信息外,特征识别技术还会检测报文的应用层信息以获取更多的用于识别应用的特征。

此外某一些应用协议的特征并不会在单个报文中体现,或者从单个报文仅仅存在弱特征,要完整描述这个流则需要多个报文特征,此时就需要对多个报文进行分析,才可以识别出应用。

在这里插入图片描述

单报文解析

单报文解析目前常见的两种解析模式:

1)标准协议解析:

目前支持HTTP,HTTPS,QUIC等标准协议的解析,以及拼多多,迅雷等私有协议的解析。

典型特征报文:虎牙禁用特征

在这里插入图片描述

上图是 单报文匹配中 通过URL禁用虎牙报文。

2)特征序列解析

特征序列的匹配核心不在于五元组信息中,而是在报文的有效载荷中,对于大多的游戏数据报文都会采用私有协议,这种协议特征明显体现在报文载荷存在固定的格式,可以以此作为该应用的报文特征。

在这里插入图片描述

典型报文特征 王者荣耀1号加速特征

在这里插入图片描述

流特征解析

基于单报文的特征识别,在特征序列长度不够时,可能存在误判情况,会发送误判,于是需要综合一条流上的多个序列特征来判断。所以基于快照表项来完成多特征匹配。如下图所示,当报文进入会首先判断报文是否以及加入候选快照表项中,如果不存在才会进行匹配,如果匹配上就会将这条流加入候选快照链表中。当全部匹配完成后就会将这条流从候选快照表项取出放入快照表项。当后续这条流再次进入就可以直接判定:

在这里插入图片描述

典型报文特征 腾讯通用1号加速特征:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

关联识别技术

关联识别技术主要用于识别多通道协议的应用。

采用多通道协议传输语音,视频和文件的应用越来越多。多通道协议的控制通道和数据通道是分开的,如FTP,SIP,H323,这些协议通过控制通道协商用来建立数据通道的通信参数(如端口信息等),通过数据通道传输具体的业务数据。特征识别技术可以识别出控制通道的应用与非加密的数据通道的应用,但是对于加密数据通道是没有很好的办法的。

关联识别技术的前提依然是特征识别,首先通过特征识别技术识别出控制通道报文承载的应用,同时从控制通道报文中提取数据通道信息并记录在应用识别关联表中,后续通过关联表识别出数据通道报文并标记位相应的应用,从而实现对于多通道协议报文的应用识别。

在这里插入图片描述

DNS关联识别

DNS 关联识别主要是提取DNS回包中的信息来进行IP与APP之间绑定。通过解析DNS协议中的URL字段匹配到具体的应用,再将所有返回的IP放入快照表,之后与这些IP的通信的时候就可以完成应用识别。

典型报文特征:穿越火线禁用特征

在这里插入图片描述
在这里插入图片描述

如图当检测到带有ap6.ssl.msdk.qq.com的DNS会话,就将该会话中解析出的IP加入禁用快照则可以完成穿越火线的禁用。

行为识别技术

互联网上还有一些更为复杂的应用,很难更具特征关键字作为识别的特征,还有很多应用的通信时加密的,数据加密将导致特征模糊化而无法识别。已有特征识别技术无法基于常规特征识别出这些复杂应用,而行为识别技术通过提取报文的行为特征来识别出报文承载的应用,不同的应用可以利用的行为特征不尽相同。要准备识别一个应用必须抓取海量的流量样本,分析提取出独特的行为特征。

通过上下行流量比例、报文发送频率、报文长度变化规律等,都是可以利用的行为特征。行为识别技术通过综合考察和选择多种行为指标特征指标实现精准的应用识别。

应用识别框架介绍

针对上述问题,我们新框架需要完成以下几个重要的功能点:

1)报文解析流程设备无关化

2)输出报文解析统计数据

3)流量重放

整体应用识别框架可以分为三个部分:

1)报文解析引擎:负责报文解析匹配,输入skb,输出flow_info,flow_info中包含匹配到的应用信息,特征库序号以及smac.然后基于次应用识别引擎开发跨平台报文分析工具,支持流量重放分析。

2)策略执行器:根据报文解析引擎返回的结果对报文进行相关处理(DROP 或者 MARK)

3)用户态接口:解密解析用户态特征库文件,然后通过接口将特征加载到内核态,以及设置禁用信息,设置加速模式接口。

在这里插入图片描述

新框架具有以下几个优点:

  1. 解析路径统一,只挂一个HOOK点,提高解析效率,增强代码可维护性。
  2. 支持流量回放,提升新协议开发与app适配效率。
  3. 支持流量信息分析统计,输出统计信息,便于调试。
  4. 基于流特征的信息匹配,可以匹配更加复杂的特征。
  5. 采用快照缓存机制,提升报文转发效率。

经过比较采用新框架的情况下整体转发性能提升40%以上。

在这里插入图片描述

应用特征提取经验

tcpdump 抓包方式

用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具。 tcpdump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。

默认启动
tcpdump

普通情况下,直接启动tcpdump将监视第一个网络接口上所有流过的数据包。

监视指定网络接口的数据包
tcpdump -i eth1

如果不指定网卡,默认tcpdump只会监视第一个网络接口,一般是eth0,下面的例子都没有指定网络接口。

监视指定主机的数据包

打印所有进入或离开sundown的数据包.

tcpdump host sundown

也可以指定ip,例如截获所有210.27.48.1 的主机收到的和发出的所有的数据包

tcpdump host 210.27.48.1

打印helios 与 hot 或者与 ace 之间通信的数据包

tcpdump host helios and \( hot or ace \)

截获主机210.27.48.1 和主机210.27.48.2 或210.27.48.3的通信

tcpdump host 210.27.48.1 and \ (210.27.48.2 or 210.27.48.3 \)

打印ace与任何其他主机之间通信的IP 数据包, 但不包括与helios之间的数据包.

tcpdump ip host ace and not helios

如果想要获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包,使用命令:

tcpdump ip host 210.27.48.1 and ! 210.27.48.2

截获主机hostname发送的所有数据

tcpdump -i eth0 src host hostname

监视所有送到主机hostname的数据包

tcpdump -i eth0 dst host hostname

监视指定主机和端口的数据包

如果想要获取主机210.27.48.1接收或发出的telnet包,使用如下命令

tcpdump tcp port 23 and host 210.27.48.1

对本机的udp 123 端口进行监视 123 为ntp的服务端口

tcpdump udp port 123

所以抓包一般就是抓取指定网卡指定主机的包

比如要抓取连接WIFI设备IP为192.168.9.100的包 抓包命令为:

tcpdump -i wl0.0 host 192.168.9.100

需要保存为pcap文件则命令为

tcpdump -i wl0.0 -w xxx.pcap host 192.168.9.100

禁用特征提取

禁用的特征提取关键在于提取应用打开的时候的关键报文特征,完成识别后将相关的IP加入到快照列表中,即可完成对于这个应用的禁用。

以小红书和王者荣耀的禁用为例:

禁用最常见的特征是基于DNS特征禁用,也就是需要抓取应用在打开与登陆阶段的DNS报文进行分析,找出关键URL,加入特征库进行测试。

在这里插入图片描述

分析小红书的dns报文,发现大量出现xiaohongshu,xhscdn字段,解析带这样URL的DNS,然后将其中解析出的IP全部加入禁用快照中,然后进行测试,然后小红书的禁用就完成了。

王者荣耀是另外一种常见禁用特征:

这种是基于报文内部特征进行的禁用需要挨个网络流进行分析,找到特征明显的网络流然后进行禁用。

在这里插入图片描述

加速特征提取

加速特征关键需要抓取在游戏过程中的报文,分析在游戏过程中占比较大的几种报文,分析这些报文的特征然后进行标记。或者说找出这几条流建立基于的DNS报文,然后将该IP对应的流加入队列也可以完成加速。

以王者荣耀为例:

在王者荣耀对局的时候的报文进行统计学分析:

在这里插入图片描述

几乎所有报文集中在123.151.69.28

追踪这条流

在这里插入图片描述

可以发现这条流的报文数据部分具有固定的协议特征,提取该协议特征。其他几条流也差不多。

综合分析之后发现王者荣耀对局共有5条流特征,包括两条 腾讯通用特征以及三条王者荣耀独有特征。所以可以将跟踪到的数量用来判断特征是否仍然有效。

对英雄联盟也用同样的方式进行分析:

在这里插入图片描述

其主要分布在两个IP上追踪这两条流

一条是腾讯通用流量 特征是固定33 66 00 0b:

在这里插入图片描述

一条是UDP数据流

在这里插入图片描述

这条数据流的IP经过分析是通过DNS协议解析出来的

所以来说一般的游戏加速特征提取也就是这两种通用的方式,一种是游戏中的主要报文具有特定的格式,需要分析出游戏中占主要部分的流量特征,这条流需要时连续快速的,另外一种时游戏全程和一个固定IP通信,这种需要分析这个IP的来源,一般是通过DNS获取的。

在线时长特征提取

一般而言在线时长特征可以复用禁用与加速特征,如果不行再抓包分析。

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

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

相关文章

VUE2+THREE.JS项目搭建

THREE项目搭建 简介学习文档推荐搭建1.下载three.js2.新建3DWorkShop.vue文件3.创建utils/three/tool.js4.创建components/three/draw.vue[重点]4.1 引入文件4.2 初始化场景4.3 初始化渲染器4.4 初始化光源4.5 初始化相机(人眼模式)4.6 初始化控制器4.7 初始化动画4.8 添加全局…

TZOJ 1389 人见人爱A^B

答案&#xff1a; #include <stdio.h> int pow(int a, int b) //定义一个a的b次方函数 {int m 1;int i 0;for (i 0; i < b; i) //b次方{m (m * a) % 1000; // %1000用来控制最后输出为后三位&#xff0c;同时每次乘法结果取模&#xff0c;避免溢出 }retu…

Andrioid T 实现充电动画(2)

Andrioid T 实现充电动画&#xff08;2&#xff09; 以MTK平台为例&#xff0c;实现充电动画 效果图 资源包 修改文件清单 system/vendor/mediatek/proprietary/packages/apps/SystemUI/res/layout/prize_charge_layout.xmlsystem/vendor/mediatek/proprietary/packages/ap…

iptables防火墙之SNAT与DNET

NAT 1.SNAT&#xff1a;让内网可以访问外网 2.DNAT&#xff1a;让外网可以访问到内网的机器 网关服务器&#xff0c;要开启路由功能 内核功能&#xff1a; sysctl -a 列出所有参数 内核参数&#xff0c;然后grep可以查看到默认的内核参数 内核参数配置文件 /etc/sysctl.…

时序预测 | Python实现GA-TCN-LSTM遗传算法-时间卷积神经网络-长短期记忆网络时间序列预测

时序预测 | Python实现GA-TCN-LSTM遗传算法-时间卷积神经网络-长短期记忆网络时间序列预测 目录 时序预测 | Python实现GA-TCN-LSTM遗传算法-时间卷积神经网络-长短期记忆网络时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 使用先进的机器学习技术和优化算法…

window10家庭版中文转专业版流程

1.确认当前为家庭中文版 2.用管理员权限打开cmd窗口 3.输入 dism /online /get-targeteditions &#xff0c;查询当前支持的升级的版本 4.专业版密钥&#xff1a;VK7JG-NPHTM-C97JM-9MPGT-3V66T 5.changepk.exe /productkey VK7JG-NPHTM-C97JM-9MPGT-3V66T

微服务--07--Seata 分布式事务

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 分布式事务1.认识Seata2.部署TC服务2.1.准备数据库表2.2.准备配置文件2.3.Docker部署 3.微服务集成Seata3.1.引入依赖3.2.改造配置3.3.添加数据库表3.4.测试 分布式…

事务级 REST API 在网络管理中的应用

什么是REST API&#xff1f; REST&#xff08;Representational State Transfer&#xff0c;也称RESTful&#xff09;API是一种架构风格&#xff0c;用于构建网络应用程序和服务之间的通信&#xff0c;是基于HTTP协议的一种应用程序接口。它提供了一组规范和约定&#xff0c;使…

【每日一坑】KiCAD导Gerber 文件

第一&#xff0c;软件版本 第二、操作选择注意点 第三步&#xff0c;那个坑。。。 不知道什么原因&#xff0c;这第二个框里会选其他不必要得一些东西&#xff0c;导致最终光绘是废的&#xff1b; 一定切记只选edge.cut就好了。 最后&#xff0c;上Gerber图&#xff0c;还有一…

Java数据结构之《顺序查找》问题

一、前言&#xff1a; 这是怀化学院的&#xff1a;Java数据结构中的一道难度中等偏下的一道编程题(此方法为博主自己研究&#xff0c;问题基本解决&#xff0c;若有bug欢迎下方评论提出意见&#xff0c;我会第一时间改进代码&#xff0c;谢谢&#xff01;) 后面其他编程题只要我…

位图和布隆过滤器(C++)

位图和布隆过滤器 一、位图1. 引入2. 概念3. 代码实现setreset完整代码 4. 位图的应用 二、布隆过滤器1. 引入2. 概念3. 逻辑结构4. 特点5. 代码实现6. 布隆过滤器的应用 三、哈希切割 一、位图 1. 引入 当面对海量数据需要处理时&#xff0c;内存不足以加载这些数据&#xf…

网络基础_1

目录 网络基础 协议 协议分层 OSI七层模型 网络传输的基本流程 数据包的封装和分用 IP地址和MAC地址 网络基础 网络就是不同的计算机之间可以进行通信&#xff0c;前面我们学了同一台计算机之间通信&#xff0c;其中有进程间通信&#xff0c;前面学过的有管道&#xff…

C++ 学习之函数成员指针的一个小细节

看看下面的代码&#xff0c;你能看出错误吗 class A { public:void fun(){}}; int main() {A a;void (A:: * p)() &A::fun;(*p)(); } 这段代码在调用成员函数时存在问题。正确的方式是使用对象来调用成员函数&#xff0c;而不是通过指针。以下是修正后的代码&#xff1a…

java学校高校运动会报名信息管理系统springboot+jsp

课题研究方案&#xff1a; 结合用户的使用需求&#xff0c;本系统采用运用较为广泛的Java语言&#xff0c;springboot框架&#xff0c;HTML语言等关键技术&#xff0c;并在idea开发平台上设计与研发创业学院运动会管理系统。同时&#xff0c;使用MySQL数据库&#xff0c;设计实…

【数据清洗 | 数据规约】数据类别型数据 编码最佳实践,确定不来看看?

&#x1f935;‍♂️ 个人主页: AI_magician &#x1f4e1;主页地址&#xff1a; 作者简介&#xff1a;CSDN内容合伙人&#xff0c;全栈领域优质创作者。 &#x1f468;‍&#x1f4bb;景愿&#xff1a;旨在于能和更多的热爱计算机的伙伴一起成长&#xff01;&#xff01;&…

1-3、DOSBox环境搭建

语雀原文链接 文章目录 1、安装DOSBox2、Debug进入Debugrdeautq 1、安装DOSBox 官网下载下载地址&#xff1a;https://www.dosbox.com/download.php?main1此处直接下载这个附件&#xff08;内部有8086的DEBUG.EXE环境&#xff09;8086汇编工作环境.rar执行安装DOSBox0.74-wi…

2021年8月18日 Go生态洞察:整合Go的网络体验

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

带大家做一个,易上手的家常炒鸡蛋

想做这道菜 先准备五个鸡蛋 然后将鸡蛋打到碗里面 然后 加小半勺盐 这个看个人喜好 放多少都没问题 不要太咸就好 将鸡蛋搅拌均匀 起锅烧油 油温热了之后 放三个干辣椒进去炒 干辣椒烧黑后 捞出来 味道就留在油里了 然后 倒入鸡蛋液 翻炒 注意翻炒 不要粘锅底 或者 一面糊…

Oracle SQL优化

1、书写顺序和执行顺序 在Oracle SQL中&#xff0c;查询的书写顺序和执行顺序是不同的。 1.1SQL书写顺序如下&#xff1a; SELECTFROMWHEREGROUP BYHAVINGORDER BY 1.2 SQL执行顺序 FROM&#xff1a;数据源被确定&#xff0c;表连接操作也在此步骤完成。 WHERE&#xff1a;对…

防爆执法记录仪、防爆智能安全帽助力海上钻井平台远程可视化监管平台建设

推动远程安全管理&#xff0c;海上钻井"视"界拓新—防爆执法记录仪与防爆智能安全帽的创新应用 在海上钻井作业领域&#xff0c;安全生产一直是萦绕在每一个业者心头的重大课题。由于环境的恶劣及作业的特殊性&#xff0c;一旦发生安全事故&#xff0c;其后果往往极…