一、概述
1.DPI(Deep packet inspection,深度报文解析)
所谓“深度”是和普通的报文分析层次相比較而言的,“普通报文检測”仅分析IP包4 层下面的内容,包含源地址、目的地址、源port、目的port以及协议类型。而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.传统的协议识别
基于port的协议识别
网络中多种应用层协议能够同一时候执行在同一台计算机的同一个 IP 地址上。因为 IP 地址与网络应用程序的关系是一对多的关系,所以主机须要通过port号来区分不同的网络服务。
对于port号的分配。有两种主要的方式:
1)全局分配,即由一个公认的中央机构(LANA)统一进行分配。尽管这样easy确定应用程序和port的相应关系,但不能适应大量且迅速变化的port使用环境。
2)本地分配,即动态分配。当某应用程序进程须要訪问网络时,主机操作系统暂时为该进程分配一个本地唯一的port号。但本地分配方式使得其他主机无法获知分配情况。无法建立通信。
Internet 同一时候採用上述两种分配方式,将port分成两部分:
1)保留port,以全局方式(IANA)进行分配。这样每个标准的server应用程序都拥有一个或多个全局的公认port号。
2)还有一部分是自由port,以本地方式进行分配。当某应用程序想要通过网络和远地程序通信之前,它会首先申请自由port号与远地程序通信。主机操作系统暂时为该进程分配一个本地唯一的port号。
下图是经常使用的保留port。部分另一定的參考价值。
传统上一直是基于port映射机制相应用层协议进行识别。随着越来越多的网络协议不使用固定的port进行通信。基于报文port的协议识别受到非常大限制,准确性受到非常大挑战。但因为基于公知port进行协议识别操作简单。识别速度快。如今的带宽越来越大,在识别
DNS、SMTP、POP3 等眼下port比較固定的传统协议时依旧有一定的价值。
基于測度的协议识别
基于測度的协议识别依据各协议产生的流測度的差异识别应用层协议。
基于測度识别协议无需分析报文体的内容,仅仅要依据报文头中的域值、报文大小、报文间隙等特征分析流量所属的应用类型。比如。Web 浏览产生的流量一般为短流小报文。而各种 P2P 协议的流量一般为长流大报文。基于測度的协议识别一般採用机器学习的方式,利用已经按协议类型分类的报文来训练系统,使其把握该类应用的流測度特征以识别新的流量。
温超、郑雪峰等提出通过网络流量信息识别 P2P 协议。基于流量分析的 P2P协议识别方法。根据下面四个特征识别 P2P 协议:
1)P2P 主机的上下行流量基本相当。
2)P2P 主机连接的其他主机的数量较多。
3)P2P 主机既为server又为client。
4)P2P主机的监听port的特点与其他协议不同。
尽管基于流量分析的识别方法仅仅需对数据包的头部信息进行检測,不须要检測数据包的负载。具有简单、高效的特点。可是仅仅能识别出网络流量是否为 P2P 协议,无法识别出详细是哪种 P2P 协议或是哪种非 P2P
协议,具有应用的局限性。PS:有些p2p下载应用也是能够识别的。兴许的文章能够分析一下试试。
基于负载的协议识别(基于正則表達式)
基于负载的协议识别,相应用层协议交互过程中产生报文的内容进行分析,找出不同于其他协议的模式特征,依据各协议特有的模式特征确定流量所属协议类型。基于负载的协议识别主要有採用固定字符串和正則表達式来表示协议特征两种方式。
这也是如今最经常使用的方式,大部门应用能够利用这样的方式识别。
採用固定字符串的方式过于笨拙,在这不在做介绍。事实上能够把它理解成基于正則表達式的子集。正則表達式比固定字符串具有更强的表达能力和更好的灵活性,採用正则表达式取代固定字符串表示协议的特征成为研究的热点。
正則表達式:又称正规表示法、常规表示法(英语:Regular
Expression。在代码中常简写为regex、regexp或RE)。正則表達式使用单个字符串来描写叙述、匹配一系列符合某个句法规则的字符串。
正則表達式语法学习站点:http://msdn.microsoft.com/zh-cn/library/ae5bf541(VS.80).aspx
上面说的相对照较全的正則表達式,以下这张表相对来说比較经常使用的: