基于DPI(深度报文解析)的应用识别 - CSDN博客

标签: | 发表时间:2018-09-05 20:48 | 作者:
出处:https://blog.csdn.net

一、概述

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 深度 报文] 推荐:

基于DPI(深度报文解析)的应用识别 - CSDN博客

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

DPI (Deep Packet Inspection) 深度包检测技术 - 简书

- -
近年来,网络新业务层出不穷,有对等网络(Peer-to-Peer,简称 P2P)、VoIP、流媒体、Web TV、音视频聊天、互动在线游戏和虚拟现实等. 这些新业务的普及为运营商吸纳了大量的客户资源,同时也对网络的底层流量模型和上层应用模式产生了很大的冲击,带来带宽管理、内容计费、信息安全、舆论管控等一系列新的问题.

流控技术之DPI介绍

- - CSDN博客数据库推荐文章
DPI技术,即DPI(Deep Packet Inspection)深度包检测技术是一种基于应用层的流量检测和控制技术,当IP数据包、TCP或UDP数据流通过基于DPI技术的带宽管理系统时,该系统通过深入读取IP包载荷的内容来对OSI七层协议中的应用层信息进行重组,从而得到整个应用程序的内容,然后按照系统定义的管理策略对流量进行整形操作.

深度搜索

- - 译言最新精选
译者: HorseHour 原文地址: streamhacker.com. 当我们准备发布 Weotta时,我们已经为如何描述它犯了难. 我们使用了机器学习和自然语言处理吗. 我们最终觉得“深度搜索”是对我们工作最贴切的描述,它是一个超越了基本文本搜索的复杂搜索系统的简洁描述. 无需赘言,不管怎么看,我们都不是这个领域唯一的一家公司;谷歌和很多其他公司都在对深度搜索的各个方面进行研究.

Cookie深度解析

- - CSDN博客互联网推荐文章
       最近在公司做了Web端单点登录(SSO)功能,基于Cookie实现,做完之后感觉有必要总结一下,本文着重讲解Cookie,下文会说明单点登录的实现方案.        众所周知,Web协议(也就是HTTP)是一个无状态的协议. 一个Web应用由很多个Web页面组成,每个页面都有唯一的URL来定义.

Kafka深度解析

- - zzm
原创文章,转载请务必将下面这段话置于文章开头处. 本文转发自Jason’s Blog,原文链接. http://www.jasongj.com/2015/01/02/Kafka深度解析. Kafka是一种分布式的,基于发布/订阅的消息系统. 以时间复杂度为O(1)的方式提供消息持久化能力,即使对TB级以上数据也能保证常数时间的访问性能.

TCP报文结构

- - 互联网 - ITeye博客
一、TCP报文结构如下:.  固定首部长度为20字节,可变部分0~40字节,各字段解释:. source port number:源端口,16bits,范围0~65525. target port number:目的端口,16bits,范围同上. sequence number:数据序号,32bits,TCP 连接中传送的数据流中的每一个字节都编上一个序号.

HBase性能深度分析

- Rubby - 《程序员》杂志官网
HBase作为BigTable的一个开源实现,随着其应用的普及,用户对它的性能数据愈发关注. 本文将为您揭开HBase性能测试的一角,邀您一起参与到对云计算模块性能调优的深度思考中. 对于BigTable类型的分布式数据库应用来说,用户往往会对其性能状况有极大的兴趣,这其中又对实时数据插入性能更为关注.

[转][转]ZeroMQ 深度探索

- - heiyeluren的blog(黑夜路人的开源世界)
最初认识 ZeroMQ 是被它的名号所吸引,最近在一个高性能中间件的项目中用到了 ZeroMQ,对这个号称“史上最快的消息队列”有了更深层次的了解. 如果我们仅仅把 ZeroMQ 看作是一个消息队列,那就完全搞错了,ZeroMQ 是一套智能传输层协议,它不仅为开发者提供了强大的开发包,还包含了一套很棒的通信协议的实现,更值得一提是,它对分布式系统开发有着相当独到的见解,绝对值得我们好好学习.

HashMap深度解析(一)

- - CSDN博客编程语言推荐文章
       HashMap可以说是Java中最常用的集合类框架之一,是Java语言中非常典型的数据结构,我们总会在不经意间用到它,很大程度上方便了我们日常开发. 在很多Java的笔试题中也会被问到,最常见的,“HashMap和HashTable有什么区别. ”,这也不是三言两语能说清楚的,这种笔试题就是考察你来笔试之前有没有复习功课,随便来个快餐式的复习就能给出简单的答案.