让大家对科来DPI_Filter有了初步了解,接下来我们将陆续介绍科来DPI_Filter的相关语法运用和科来DPI_Filter在数据包视图的场景化运用。今天,我们进行科来DPI_Filter的语法介绍,让网络分析师能够自由写出符合自己需求的过滤语句。 一、科来DPI_Filter规则语句的概念
提到语法,大家自然地会联想到编程语言,如Python、JAVA等编程语言。难道应用一个小小的过滤器还要掌握这么复杂的内容?答案当然是否定的。科来DPI_Filter虽然有语法规范,但它的语法非常简单,只要对网络数据包有所了解、会简单的数学逻辑运算即可。下面就一起来认识一下科来DPI_Filter的语法:
一图胜千言,先看一张图:
上图是一条标准的科来DPI_Filter规则语句。我们要用好科来DPI_Filter过滤器,其实就是掌握如何写出直观易懂的规则语句。
图中的几个名词解释如下:
(1) 规则语句
规则语句其实就是我们说的过滤条件,它由一个或多个过滤条件共同组成(上图中就是由两条过滤条件组成的一条规则语句),科来DPI_Filter通过我们输入的规则语句来进行过滤;
(2) 子语句
单个过滤条件,按规范写出来就成为一条子语句。多条子语句通过“逻辑关系”运算符的连接,就构成了一条规则语句;
(3) 简单表达式
是规则语句的最小组成单位,由数据源和成员函数共同构成(后文会作具体介绍)。它可以直接构成一条子语句,也可以通过某种关系运算(如“=”、“+”等)后再成为一条子语句;
(4) 逻辑运算符
代表“与”、“或”、“非”逻辑运算的符号,通过它们把各条子语句连接在一起,构成了一条具体的规则语句;
二、如何写出所需科来DPI_Filter规则语句
先用一段话总结写规则语句的方法:
2、再把简单表达式转变为子语句(通过关系运算符赋值);
3、最后通过逻辑运算符把子语句连起来组成一条规则语句。
下面就具体讲解,如何通过上面这3个步骤编辑出规则语句。
1、写出简单表达式
能写出单条表达式是最终写出规则语句的基础,也是“从入门到精通”的一个跨越,所以,这部分是我们本篇文章中着墨最多的一部分。这一段落相对会比较枯燥,涉及部分专有名词,希望您能保持耐心将这一章节阅读完,后面再结合着举例实操,才能真正掌握科来DPI_Filter。先看下图:
如图所示,简单表达式由两部分组成:数据源和成员函数。
其中成员函数并非必须出现,有时候数据源可直接构成简单表达式(后面会具体举例)。
(1)数据源
数据源分成3类:全局数据源、协议字段数据源、分析数据源
▶ String为字符串,说明为该数据源里的数据类型为“abcd”这种字符串;例:使用的数据源为“packet”,它的类型为string,我们在为它赋值时就应该写为字符串类型,如下图:▶ Int为整数,说明为该数据源里的数据类型为“123”这种整数;例:使用的数据源为“port” ,它的类型为int,我们在为它赋值时就应该写为int型(整数),如下图:▶ Enum为枚举,说明为该明为该数据源类型为“一个具体的值”,如protocol,具体值为tcp或http这种特定的值;
例:使用的数据源为“protocol”,它的类型为Enum,则为它赋值时应该指明具体的协议(protocol=具体的协议),如下图:▶ DTNanoSec为时间特殊格式,如:DT‘2018/11/29 20:31:29.050642000’代表2018年11月29日20时31分29秒050642000纳秒;
例:使用的数据源为“timestamp”,它的类型为DTNanoSec,赋值是特殊的时间格式,如下图:到这里肯定有人会说,这么多的字段,根本记不住啊!没关系,科来DPI_Filter有自动联想功能,比如protocol,只需要键入“p”,科来DPI_Filter会自动联想如下:再通过键盘方向键进行上下选择,选中后点击鼠标左键或按键盘“回车键”即可。- 协议字段数据源:指一个网络协议包含的具体字段,如下表所示:
在使用时,必须先指定一个具体的协议,才能指定协议字段数据源(表格中的类型上面已说面,不再重复讲解),如下:
例:过滤HTTP协议中的method字段,如下图:如果记不住协议字段名也没关系,指定协议数据源后,键入“.”号,科来DPI_Filter自动联想功能会自动提供字段供用户选择,如下图:在通过键盘上下键进行上下选择,选中后点击鼠标左键或点键盘“回车键”即可。在使用分析数据源时,必须先输入固定数据源名称“tcpanalysis”,再指定分析数据源字段,如下:例:过滤出所有tcp中通报零窗口的数据包,如下图:小结:数据源一共有上面介绍的三类。我们写过滤语句的第一步,就是先确定自己需要的“数据源”(即确定过滤条件是数据包的字段?还是协议?还是时间等等)。find()函数:常用来搜索数据包或payload中包含的指定内容,支持正则表达式(Perl/POSIX风格的正则表达式,非所有高级功能全部支持。本文不对正则作深入介绍,具体支持哪些高级正则功能,可查看CSNAS用户手册); | | |
| | 在指定数据源(payload)中查找“指定的特征字符串”。 |
| payload.find(/<tag>[hc]at</tag>/i) | |
in()函数:一般用在ip相关的数据源后面使用,举例如下: | | |
| srcip.in(192.168.1.0-192.168.1.30) | |
| | |
- 定位型成员函数:findpos(),数据源[a,b]等
这类函数主要是查找字符串在数据包中的位置,或指定在数据包的某一段位置去使用查找函数,举例如下: | | |
| | 返回特征串‘ABC’在数据包payload开头位置开始计算的偏移值。 |
| payload[30, 100].find(‘xxx’) | 定位在每个数据包的第30到100个字节中,查找特征字符串“xxx” |
注:还有一些定位函数未列出,更详细内容请阅读CSNAS用户手册;了解完上面的内容,再结合科来DPI_Filter基础应用方法,大家就已经能写出自己想要的简单表达式!不用怀疑,我们现在就一起来尝试写出一个简单表达式。例:我们想过滤出所有包含“cola”特征字符串的数据包,我们的书写逻辑如下:首先,确定数据源,按题设,数据源应该为数据包(packet);其次,在数据源packet后使用成员函数find()来查找“cola”特征字符串。因此,简单表达式应写为:packet.find(‘cola’),如下图:小结:能找出合适的数据源,再配上适合的成员函数,一个简单表达式就诞生了。至此,科来DPI_Filter语法最困难的部分,大家就已经学会了!能写出简单表达式后,写出子语句就自然水到渠成:只需要掌握 “关系运算符”如何使用即可。比如,想要通过“数据包的长度”这一条件来进行过滤。“数据包长度”的简单表达式为:“packetlength”或“packet.length()”(《在科来DPI_Filter在数据包视图中的基础使用》一文中曾介绍,如果不知道一个字段怎么写,可以在“帮助表达式”会话框中键入“packet”,再找到packetlength这个条件字段)。写出简单表达式后,CSNAS还需要知道:到底要过滤比这个长度长的数据包?还是要过滤比这个长度小的数据包?因此,需要加入“关系运算符”,从而将简单表达式转变成子语句。例:“简单表达式packet.length()”添加“>=”关系运算符,赋值后成为子语句:packet.length()>=1460。如下图:例:在kerberos协议中,如果我们想找到cnamestring这个字段,但是并不知道cnamestring这个字段的具体值,则可使用子语句:!kerberos.cnamestring.isnull()再选择关系运算isnull()表示判断前面的简单表达式是否结果为空;最后,在前面加上一个“!”代表整个简单表达式结果应该为非空。实现过滤出所有kerberos协议包中带有cnamestring信息的数据包,如下图:说明:这里只是举例用kerberos.cnamestring字段讲isnull()的用法,CSNAS15版本前不支持cnamestring字段解码,现已支持直接用“kerberos.cnamestring”作过滤条件,过滤出有cnamestring字段的所有数据包。如果是简单表达式后添加“=”、“>=”等关系运算符,运算符后面会要求赋值。赋值的类型根据数据源的不同会有所区别,如果不太清楚赋值类型,可以在表达式使用帮助会话框中进行查看,如下图:上图中,指明了简单表达式Packetlength=1500(int代表只能赋整数值),dstip=192.168.1.1(IPv4代表只能赋IPv4格式的值)。至此,相信大家已经学会如何从把“简单表达式”转变成“子语句”。能写出子语句,再到构成规则语句就非常简单了。只需要把各个子语句通过“与”、“或”、“非”的关系组合起来即可。另外,还可以通过“()”运算符为子语句调整优先级(括号的优先级比逻辑运算符更高)。例:希望过滤出目的IP为192.168.31.232和目的IP为182.242.63.203,协议为HTTP,且包含特征字符串“AM$73”的数据包。子语句1:dstip=192.168.31.232;
子语句2:dstip=182.242.63.203;
子语句3:protocol=http;
子语句4:payload.find(‘AM$73’);组成规则语句:(dstip=192.168.31.232 or dstip=182.242.63.203) and protecol=http and payload.find(‘AM$73’);科来DPI_Filter过滤功能非常强大,其语句灵活,应用快速,运用好科来DPI_Filter使网络分析师的分析工作事半功倍!我们在本篇文章中介绍了科来DPI_Filter的语法,希望网络分析工程师们能运用科来DPI_Filter写出满足自己分析场景的过滤规则语句。下一篇文章,我们将为大家带来科来DPI_Filter在数据包视图中的场景化应用举例,敬请期待!↑↑↑长按图片识别二维码关註↑↑↑
还没有评论,来说两句吧...