查看: 825|回复: 0

精准过滤:构造不同场景的规则语句

[复制链接]
发表于 2024-10-22 17:05:00 | 显示全部楼层 |阅读模式
本文是《深度操作CSNAS》系列的第3篇,前2篇内容为:

01《海量数据中高效找到所需之熟用DPI过滤器

02《应对各类业务分析场景之DPI数据包视图快速过滤

让大家对科来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规则语句  


先用一段话总结写规则语句的方法:


1、首先写出简单表达式(单一过滤条件);

2、再把简单表达式转变为子语句(通过关系运算符赋值);

3、最后通过逻辑运算符把子语句连起来组成一条规则语句。


下面就具体讲解,如何通过上面这3个步骤编辑出规则语句。


1、写出简单表达式

能写出单条表达式是最终写出规则语句的基础,也是“从入门到精通”的一个跨越,所以,这部分是我们本篇文章中着墨最多的一部分。这一段落相对会比较枯燥,涉及部分专有名词,希望您能保持耐心将这一章节阅读完,后面再结合着举例实操,才能真正掌握科来DPI_Filter。先看下图:



如图所示,简单表达式由两部分组成:数据源成员函数


其中成员函数并非必须出现,有时候数据源可直接构成简单表达式(后面会具体举例)。


(1)数据源

数据源分成3类:全局数据源、协议字段数据源、分析数据源

  • 全局数据源:是指网络分析环境中数据包常见的元数据,如下表所示:


元数据字段
含义
类型
packet
数据包数据(包头+payload)
String
payload
包头以外的用户数据
String
packetlength
数据包长度
Int
capturelength
数据包捕获长度
Int
payloadlength
传输层数据的长度
Int
ip
IPv4 地址
IPv4
srcip
源IP地址
IPv4
dstip
目的IP地址
IPv4
port
端口
Int
srcport
源端口
Int
dstport
目标端口
Int
protocol
协议
Enum
timestamp
数据包捕获时间戳
DTNanoSec
location
IP地址地理位置
Enum
srclocation
源IP地址地理位置
Enum
dstlocation
目的IP地址地理位置
Enum

对上表中的“类型”说明如下:

▶ 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会自动联想如下:


再通过键盘方向键进行上下选择,选中后点击鼠标左键或按键盘“回车键”即可。
  • 协议字段数据源:指一个网络协议包含的具体字段,如下表所示:

IP协议字段
含义
类型
version
版本
Int
ihl
头部长度
Int
dscp
区分服务码点
Int
ecn
显示拥塞通告
Int
totallength
总长度
Int
timetolive
存活时间
Int
protocol
协议
Int
checksum
校验和
Int
srcip
源地址
String
dstIp
目的地址
String

在使用时,必须先指定一个具体的协议,才能指定协议字段数据源(表格中的类型上面已说面,不再重复讲解),如下:

例:过滤IPv4协议中的dcsp字段,如下图:


例:过滤HTTP协议中的method字段,如下图:


如果记不住协议字段名也没关系,指定协议数据源后,键入“.”号,科来DPI_Filter自动联想功能会自动提供字段供用户选择,如下图:


在通过键盘上下键进行上下选择,选中后点击鼠标左键或点键盘“回车键”即可。
  • 分析数据源:

TcpAnalysis字段
说明
类型
keepalive
Keep-Alive数据包
Int
keepaliveack
Keep-Alive Ack数据包
Int
lostaacket
之前可能有数据包丢失
Int
outoforder
乱序数据包
Int
retransmission
重传数据包
Int
spuriousretransmission
虚假重传数据包
Int
fastretransmission
快速重传数据包
Int
repeatack
重复Ack数据包
Int
zerowindowprobe
零窗口数据包
Int
zerowindowprobeack
零窗口应答数据包
Int

在使用分析数据源时,必须先输入固定数据源名称“tcpanalysis”,再指定分析数据源字段,如下:

例:过滤出所有tcp中的乱序数据包,如下图:


例:过滤出所有tcp中通报零窗口的数据包,如下图:


小结:数据源一共有上面介绍的三类。我们写过滤语句的第一步,就是先确定自己需要的“数据源”(即确定过滤条件是数据包的字段?还是协议?还是时间等等)。

(2)成员函数
成员函数主要包括:查找型成员函数定位型成员函数

  • 查找型成员函数:find(),in()等

find()函数:常用来搜索数据包或payload中包含的指定内容,支持正则表达式(Perl/POSIX风格的正则表达式,非所有高级功能全部支持。本文不对正则作深入介绍,具体支持哪些高级正则功能,可查看CSNAS用户手册);

函数名
举例
补充说明
find()
payload.find('HTTP 1.')
在指定数据源(payload)中查找“指定的特征字符串”。
find()
payload.find(/<tag>[hc]at<\/tag>/i)
正则表达式版本的匹配。

in()函数:一般用在ip相关的数据源后面使用,举例如下:
函数名
举例
补充说明
in
srcip.in(192.168.1.0-192.168.1.30)
判断srcip是否属于某个连续的 IP 范围
in
dstip.in(192.168.1.1/24)
判断dstip是否属于某个  IP 子网

  • 定位型成员函数:findpos(),数据源[a,b]等

这类函数主要是查找字符串在数据包中的位置,或指定在数据包的某一段位置去使用查找函数,举例如下:

函数名
举例
补充说明
findpos()
payload.findpos(‘ABC')
返回特征串‘ABC’在数据包payload开头位置开始计算的偏移值。
数据源[a,b].查找函数
payload[30, 100].find(‘xxx’)
定位在每个数据包的第30到100个字节中,查找特征字符串“xxx”
注:还有一些定位函数未列出,更详细内容请阅读CSNAS用户手册;

了解完上面的内容,再结合科来DPI_Filter基础应用方法,大家就已经能写出自己想要的简单表达式!不用怀疑,我们现在就一起来尝试写出一个简单表达式。

例:我们想过滤出所有包含“cola”特征字符串的数据包,我们的书写逻辑如下:
首先,确定数据源,按题设,数据源应该为数据包(packet);
其次,在数据源packet后使用成员函数find()来查找“cola”特征字符串。
因此,简单表达式应写为:packet.find(‘cola’),如下图:


小结:能找出合适的数据源,再配上适合的成员函数,一个简单表达式就诞生了。
至此,科来DPI_Filter语法最困难的部分,大家就已经学会了!

2、写出子语句
能写出简单表达式后,写出子语句就自然水到渠成:只需要掌握 “关系运算符”如何使用即可。


比如,想要通过“数据包的长度”这一条件来进行过滤。“数据包长度”的简单表达式为:“packetlength”或“packet.length()”(《在科来DPI_Filter在数据包视图中的基础使用》一文中曾介绍,如果不知道一个字段怎么写,可以在“帮助表达式”会话框中键入“packet”,再找到packetlength这个条件字段)。

写出简单表达式后,CSNAS还需要知道:到底要过滤比这个长度长的数据包?还是要过滤比这个长度小的数据包?因此,需要加入“关系运算符”,从而将简单表达式转变成子语句。

例:“简单表达式packet.length()”添加“>=”关系运算符,赋值后成为子语句:packet.length()>=1460。如下图:

关系运算符说明如下:
关系运算符
释义
=
等于
< 
小于
> 
大于
!=
不等于
>=
大于等于
<=
小于等于
isnull
为空
……
其他关系运算

这里举例解释一下isnull的用法,如下:

例:在kerberos协议中,如果我们想找到cnamestring这个字段,但是并不知道cnamestring这个字段的具体值,则可使用子语句:
!kerberos.cnamestring.isnull()

上面的子语句逻辑说明如下:
首先,选数据源kerberos协议
其次,选协议字段数据源cnamestring
再选择关系运算isnull()表示判断前面的简单表达式是否结果为
最后,在前面加上一个“”代表整个简单表达式结果应该为非空

实现过滤出所有kerberos协议包中带有cnamestring信息的数据包,如下图:


说明:这里只是举例用kerberos.cnamestring字段讲isnull()的用法,CSNAS15版本前不支持cnamestring字段解码,现已支持直接用“kerberos.cnamestring”作过滤条件,过滤出有cnamestring字段的所有数据包。
如果是简单表达式后添加“=”、“>=”等关系运算符,运算符后面会要求赋值。赋值的类型根据数据源的不同会有所区别,如果不太清楚赋值类型,可以在表达式使用帮助会话框中进行查看,如下图:


上图中,指明了简单表达式Packetlength=1500(int代表只能赋整数值),dstip=192.168.1.1(IPv4代表只能赋IPv4格式的值)。
至此,相信大家已经学会如何从把“简单表达式”转变成“子语句”。

3、通过子语句构成规则语句
能写出子语句,再到构成规则语句就非常简单了。只需要把各个子语句通过“与”、“或”、“非”的关系组合起来即可。

逻辑运算符
含义
!  (not)
&& (and)
|| (or)

其中逻辑运算符可以用括号中的英文单词代替。
运算的优先级和运算方向如下:

优先级
逻辑运算符
运算方向
!
从右向左
&&
从左向右
||
从左向右

另外,还可以通过“()”运算符为子语句调整优先级(括号的优先级比逻辑运算符更高)。

例:希望过滤出目的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在数据包视图中的场景化应用举例,敬请期待!

免费易用的流量分析工具下载
扫码关注公众号
更多网络分析技术、技巧、干货分享


- End -


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?CSNA会员注册

×
回复

使用道具 举报

您需要登录后才可以回帖 登录 | CSNA会员注册

本版积分规则

快速回复 返回顶部 返回列表