一、概述

1.DPI(Deep packet inspection,深度报文解析)

所谓“深度”是和普通的报文分析层次相比较而言的,“普通报文检测”仅分析IP包4 层以下的内容,包括源地址、目的地址、源端口、目的端口以及协议类型,而DPI 除了对前面的层次分析外,还增加了应用层分析,识别各种应用及其内容,主要实现一下功能:

1)应用分析——网络流量构成分析、性能分析、流向分析等;

2)用户分析——用户群区分、行为分析、终端分析、趋势分析等;

3)网元分析——根据区域属性(市、区、街道等)、基站负载情况进行分析等;

4)流量管控——P2P限速、保证QoS、带宽保障、网络资源优化等;

5)安全保障——DDoS攻击、数据广播风暴、防范恶意病毒攻击等。

2.网络应用的大致分类

           现在的上的应用不计其数,但大众常用的网络应用可以进行穷举。
       据我的了解应用识别做的最好的就是华为,号称能识别4000种应用。协议分析是很多防火墙公司(华为、网神、天融信、网康等)的基础模块,也是很重要的模块,支撑着其他的功能模块的实现,精准的应用识别,大大提高产品的性能和可靠性。像我现在在做的基于网络流量特征识别恶意软件的建模,精准的,大量的协议识别也是很重要的一环。公司出口的流量剔除掉常用应用的网络流量,剩下的流量占比会很少,更好的进行恶意软件的分析,报警。
根据我的经验将现有常用的应用根据作用进行分类:
     ps:根据个人对应用的理解进行应用分类,大家有什么好的建议欢迎留言提议
    1、电子邮件类
    2、视频类
    3、游戏类
    4、办公OA类
    5、软件更新类
    6、金融类(银行、支付宝)
    7、股票类
    8、社交通讯类(IM软件)
    9、Web浏览(借助url可能会更好的识别)
   10、下载工具类(网盘、P2P下载、BT类相关)
 
      P2P下载是很蛋疼的硬骨头!
 
      P2P下载相关:迅雷、Flashget-2.4/3.4、EasyMule-1.1.11、QQDownload、Vagaa-2.6.7.1、Baidu下吧-4.0.0.1
      BT类相关:BitComet/BitTorrent、gnutella、KAZAA、directconnect、ARES、SOUL、WINMX、APPLE、DC、MUTE、XDCC、WASTE

3.传统的协议识别

 

基于端口的协议识别

 

网络中多种应用层协议可以同时运行在同一台计算机的同一个 IP 地址上。由于 IP 地址与网络应用程序的关系是一对多的关系,所以主机需要通过端口号来区分不同的网络服务。

 
      对于端口号的分配,有两种基本的方式:
       1)全局分配,即由一个公认的中央机构(LANA)统一进行分配。虽然这样容易确定应用程序和端口的对应关系,但不能适应大量且迅速变化的端口使用环境;
       2)本地分配,即动态分配。当某应用程序进程需要访问网络时,主机操作系统临时为该进程分配一个本地唯一的端口号。但本地分配方式使得其它主机无法获知分配情况,无法建立通信。
     Internet 同时采用上述两种分配方式,将端口分成两部分:
       1)保留端口,以全局方式(IANA)进行分配。这样每一个标准的服务器应用程序都拥有一个或多个全局的公认端口号;
       2)另一部分是自由端口,以本地方式进行分配。当某应用程序想要通过网络和远地程序通信之前,它会首先申请自由端口号与远地程序通信,主机操作系统临时为该进程分配一个本地唯一的端口号。
 
下图是常用的保留端口,部分还有一定的参考价值。
 
 
       传统上一直是基于端口映射机制对应用层协议进行识别。随着越来越多的网络协议不使用固定的端口进行通信,基于报文端口的协议识别受到很大限制,准确性受到很大挑战。但由于基于公知端口进行协议识别操作简单,识别速度快,现在的带宽越来越大,在识别 DNS、SMTP、POP3 等目前端口比较固定的传统协议时依然有一定的价值。
 

基于测度的协议识别

 
       基于测度的协议识别根据各协议产生的流测度的差异识别应用层协议。
       基于测度识别协议无需分析报文体的内容,只要根据报文头中的域值、报文大小、报文间隙等特征分析流量所属的应用类型。例如,Web 浏览产生的流量一般为短流小报文,而各种 P2P 协议的流量一般为长流大报文。基于测度的协议识别一般采用机器学习的方式,利用已经按协议类型分类的报文来训练系统,使其把握该类应用的流测度特征以识别新的流量。
温超、郑雪峰等提出通过网络流量信息识别 P2P 协议。基于流量分析的 P2P协议识别方法,依据以下四个特征识别 P2P 协议:
        1)P2P 主机的上下行流量基本相当;
2)P2P 主机连接的其它主机的数量较多;
        3)P2P 主机既为服务器又为客户端;
4)P2P主机的监听端口的特点与其它协议不同。
虽然基于流量分析的识别方法只需对数据包的头部信息进行检测,不需要检测数据包的负载,具有简单、高效的特点。但是只能识别出网络流量是否为 P2P 协议,无法识别出具体是哪种 P2P 协议或是哪种非 P2P
协议,具有应用的局限性。PS:有些p2p下载应用也是可以识别的,后续的文章可以分析一下试试。
 

基于负载的协议识别(基于正则表达式)

 

基于负载的协议识别,对应用层协议交互过程中产生报文的内容进行分析,找出不同于其它协议的模式特征,根据各协议特有的模式特征确定流量所属协议类型。基于负载的协议识别主要有采用固定字符串和正则表达式来表示协议特征两种方式。这也是现在最常用的方式,大部门应用可以利用这种方式识别。

 
        采用固定字符串的方式过于笨拙,在这不在做介绍,其实可以把它理解成基于正则表达式的子集。正则表达式比固定字符串具有更强的表达能力和更好的灵活性,采用正则表达式代替固定字符串表示协议的特征成为研究的热点。
 
       正则表达式:又称正规表示法、常规表示法(英语:Regular Expression,在代码中常简写为regex、regexp或RE)。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串
 
      正则表达式语法学习网站:http://msdn.microsoft.com/zh-cn/library/ae5bf541(VS.80).aspx
 

基于DPI(深度报文解析)的应用识别的更多相关文章

  1. DPI深度报文检测架构及关键技术实现

    DPI深度报文检测架构及关键技术实现 当前DPI(Deep Packet Inspect深度报文识别)技术是安全领域的关键技术点之一,围绕DPI技术衍生出的安全产品类型也非常的多样.在分析DPI的进一 ...

  2. 基于DPI(深度报文解析)的应用识别2------实际分析

    新浪微博的分析 早上刚刚起床先刷微博,打算就分析一下新浪微博.登陆之后抓取公布微博的数据包.进行分析. 1.抓包的要点: 1.关闭其它网络应用,保证本机网络流量的干净,便于分析. 2.先开启wires ...

  3. 基于深度学习的人脸性别识别系统(含UI界面,Python代码)

    摘要:人脸性别识别是人脸识别领域的一个热门方向,本文详细介绍基于深度学习的人脸性别识别系统,在介绍算法原理的同时,给出Python的实现代码以及PyQt的UI界面.在界面中可以选择人脸图片.视频进行检 ...

  4. 行人重识别(ReID) ——基于深度学习的行人重识别研究综述

    转自:https://zhuanlan.zhihu.com/p/31921944 前言:行人重识别(Person Re-identification)也称行人再识别,本文简称为ReID,是利用计算机视 ...

  5. 解析基于keras深度学习框架下yolov3的算法

    一.前言 由于前一段时间以及实现了基于keras深度学习框架下yolov3的算法,本来想趁着余热将自己的心得体会进行总结,但由于前几天有点事就没有完成计划,现在趁午休时间整理一下. 二.Keras框架 ...

  6. 基于tensorflow的MNIST手写数字识别(二)--入门篇

    http://www.jianshu.com/p/4195577585e6 基于tensorflow的MNIST手写字识别(一)--白话卷积神经网络模型 基于tensorflow的MNIST手写数字识 ...

  7. 人工智能深度学习框架MXNet实战:深度神经网络的交通标志识别训练

    人工智能深度学习框架MXNet实战:深度神经网络的交通标志识别训练 MXNet 是一个轻量级.可移植.灵活的分布式深度学习框架,2017 年 1 月 23 日,该项目进入 Apache 基金会,成为 ...

  8. 报文解析及CRC类

    /// <summary> /// 报文解析转换类 /// </summary> public class DatagramConvert { public static En ...

  9. ISO8583报文解析

    在此只写了一个8583报文的拆包,组包其实也差不多的. 不多说直接上文件, 具体思路过程,在解析类里面写的有. 其中包含了四个文件 8583resp.txt报文 ISO8583medata配置文件 B ...

随机推荐

  1. SpringBoot中使用纯scala进行开发 配置教程 非常简单的案例

    新建项目 建好之后 建一个叫scala的文件夹 并把它标记为root文件夹 修改pom.xml文件 复制粘贴如下内容: 添加的插件的作用,如果不添加,在新建文件的时候右键只能新建java的文件,无法创 ...

  2. Db2与Oracle的区别

    这个部分是自己随便整理下. 在工作上需要,公司需要DB2兼容Oracle. 不懂DB2与Oracle的细节,这里努力整理,以后精通了再回来重新修改. https://www.2cto.com/data ...

  3. CI框架与Thinkphp框架的一些区别

    初学CI框架遇到的一些问题,与Thinkphp框架对比的不同之处. system             是框架核心 application        是项目目录 index.php        ...

  4. 阿里云服务器(windows)配置项目域名

    一.数据库是放在阿里云上!二.项目部署到服务器上,tomcat会一直运行(除非你手动停止)三.设置域名及tomcat配置(1)在阿里云控制台上的域名解析设置中添加记录,将域名映射到你的阿里云esc公网 ...

  5. 003.LVM扩容

    一 LVM扩容步骤 创建分区 创建PV 扩容VG 扩容LV 载大小 二 创建分区 使用分区工具(如fdisk等)创建LVM分区,却将分区标识为LVM的分区类型8e. [root@kauai ~]# f ...

  6. 004.FTP匿名用户访问

    一 匿名用户配置项 [root@imxhy~]# vi /etc/vsftpd/vsftpd.conf anonymous_enable #允许匿名用户访问 anon_upload_enable #允 ...

  7. 聊聊zookeeper的分布式锁

    分布式锁就是多台机器,分布在不同的JVM中,这些不同JVM内的方法需要获取一个唯一锁,比如获取锁之后要把数据写入数据库,保证数据在同一时刻只有一台机器写入数据库. 分布式锁的实现有多种实现方法,除了今 ...

  8. 使用Vmware安装linux且配置终端可以连接虚拟机总结

    首先是下载一个linux镜像,我下载的是:ubuntu-16.04.2-desktop-amd64.iso 1.使用vmware安装linux,都使用默认的配置就行了,最多改一下主机名什么的,密码最好 ...

  9. VB.NET中lambda的写法

    lambda 或者叫匿名方法 '有返回值的匿名函数,func前面输入参数,最后一个输出参数 Dim func1 As Func(Of Integer, Integer) = Function(ByVa ...

  10. CF 494 F. Abbreviation(动态规划)

    题目链接:[http://codeforces.com/contest/1003/problem/F] 题意:给出一个n字符串,这些字符串按顺序组成一个文本,字符串之间用空格隔开,文本的大小是字母+空 ...