CN104618170B - 网络数据包的过滤方法和装置 - Google Patents
网络数据包的过滤方法和装置 Download PDFInfo
- Publication number
- CN104618170B CN104618170B CN201310538417.9A CN201310538417A CN104618170B CN 104618170 B CN104618170 B CN 104618170B CN 201310538417 A CN201310538417 A CN 201310538417A CN 104618170 B CN104618170 B CN 104618170B
- Authority
- CN
- China
- Prior art keywords
- data packet
- filtering
- sentence
- value
- packet
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Landscapes
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明公开了一种网络数据包的过滤方法和装置。该网络数据包的过滤方法包括:获取数据包,其中,数据包包括定长部分和变长部分;获取预先设定的过滤语句;以及通过过滤语句对数据包执行过滤计算,其中,过滤语句中存在可偏移读点,通过执行可偏移读点跳过数据包的定长部分和变长部分以对数据包执行过滤计算。通过本发明,能够解决现有技术中过滤数据包容易出错的问题。
Description
技术领域
本发明涉及数据处理领域,具体而言,涉及一种网络数据包的过滤方法和装置。
背景技术
在Linux后台用户数据包协议(User Datagram Protocol,简称UDP)服务的开发、调试、维护过程中,常常需要采用抓包来定位问题。目前被广泛使用的是tcpdump命令行工具,一句简单的“tcpdump-Xlns0”就可以抓包,但是该方案在抓包时会抓获网卡的全部数据包,这在大部分场合下不是所期望的。在大部分场合下,需要抓获指定条件的数据包,即抓包过滤。如需要抓取UDP数据包中应用层数据第1字节为0xa的包,则可以使用“tcpdump-Xlns0udp[8:1]=0xa”来完成,其中的“udp[8:1]=0xa”就是柏克莱封包过滤器(BerkeleyPacket Filter,简称BPF)过滤表达式,使用该表达式可以过滤掉不关注(不符合条件)的数据包,从而能够快速定位问题。其中,采用“udp[x:y]”的语法来访问数据包的内容是从UDP头部开始,将第x字节作为起点、长度为y字节视为一个整数(即网络序)并读取它的值,其中y只能为1、2、4,分别对应8位整数、16位整数、32位整数。
对于抓包而言,执行抓包的大部分数据包并非是定长结构的,例如,对于微博平台使用的CS协议,其格式如下:
定长部分A+变长部分B+定长部分C+变长部分D+定长部分E+包体。
定长部分A为28字节。
变长部分B最小长度为4字节,其中的第3、4字节为整个变长部分B的长度,其中,第3、4字节为网络序的16位无符号整数。
定长部分C为10字节。
变长部分D最小长度为2字节,其中第1、2字节为整个变长部分D的长度减2,即为其后面的变长长度,该值可能为0。其中,第1、2字节为网络序的16位无符号整数。
定长部分E为12字节。
对于响应包,包体的第一个字节为返回码,返回0表示响应正常,返回非0表示响应异常。
若要抓获响应异常的数据包则需要如下的BPF表达式:
udp[8+28+udp[8+28+2:2]+10+2+udp[8+28+udp[8+28+2:2]+10:2]+12:1]!=0
其中,“8+28”是计算UDP头部和定长部分A的长度,紧跟的“udp[8+28+2:2]”是计算变长部分B的长度,紧跟的“10”是定长部分C的长度,紧跟的“2+udp[8+28+udp[8+28+2:2]+10:2]”是计算变长部分D的长度,再紧跟的“12”是定长部分E的长度,跳过前面全部,最后访问包体的第1字节并判断不为0。
由于BPF表达式是无状态的表达式,因此对于变长部分D的计算需要依赖于变长部分B的长度和定长部分A、C的长度。从上述表达式可以看出变长部分D的计算式中包含了计算变长部分B的子计算式以及定长部分A、C的长度。对BPF表达式而言,若数据包中有n个变长部分。令A1~An分别表示每个变长部分间的定长值(可能小于等于0),如A2表示第1个变长部分结束到第2个变长部分开始的长度。令B1~Bn分别表示每个变长部分中表示其长度的字段的字节数(一般为1,2,4),令X1~Xn分别表示每个变长部分的长度,则有:
X1=[A1:B1]
X2=[A1+X1+A2:B2]=[A1+[A1:B1]+A2:B2]
X3=[A1+A2+X1+X2+A3:B3]=[A1+A2+[A1:B1]+[A1+[A1:B1]+A2:B2]+A3:B3]
Xn=[A1+…+A(n-1)+X1+…+X(n-1)+An:Bn]
若要跳过n个变长,则需要A1+…+An+X1+…+Xn,其中X未展开。从中可以看出,后面的变长总是依赖于全部前面的变长计算式,这样写出的过滤多个变长部分数据包的BPF表达式不仅晦涩难懂,并且容易出错。
针对现有技术过滤数据包时容易出错的问题,目前尚未提出有效的解决方案。
发明内容
本发明实施例的主要目的在于提供一种网络数据包的过滤方法和装置,以解决现有技术中过滤数据包时容易出错的问题。
为了实现上述目的,根据本发明实施例的一个方面,提供了一种网络数据包的过滤方法。该方法包括:获取数据包,其中,数据包包括定长部分和变长部分;获取预先设定的过滤语句;以及通过过滤语句对数据包执行过滤计算,其中,过滤语句中存在可偏移读点,通过执行可偏移读点跳过数据包的定长部分和变长部分以对数据包执行过滤计算。
为了实现上述目的,根据本发明实施例的另一方面,提供了一种网络数据包的过滤装置。该装置包括:获取数据包,其中,数据包包括定长部分和变长部分;获取预先设定的过滤语句;以及通过过滤语句对数据包执行过滤计算,其中,过滤语句中存在可偏移读点,通过执行可偏移读点跳过数据包的定长部分和变长部分以对数据包执行过滤计算。
通过本发明实施例,解决了现有技术中的过滤数据包时容易出错的问题,进而达到了方便的对网络数据包进行过滤的效果。
附图说明
构成本申请的一部分的附图用来提供对本发明的进一步理解,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是根据本发明第一实施例的网络数据包的过滤方法的流程图;
图2是根据本发明第二实施例的网络数据包的过滤方法的流程图;
图3是根据本发明第三实施例的网络数据包的过滤方法的流程图;
图4是根据本发明第一实施例的网络数据包的过滤装置的示意图;
图5是根据本发明第二实施例的网络数据包的过滤装置的示意图;以及
图6是根据本发明第三实施例的网络数据包的过滤装置的示意图。
具体实施方式
需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本发明。
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例例如能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
本发明实施例提供了一种网络数据包的过滤方法。
图1是根据本发明第一实施例的网络数据包的过滤方法的流程图。如图所示,该网络数据包的过滤方法包括如下步骤:
步骤S101,获取数据包,其中,数据包包括定长部分和变长部分。在网络通信中,通常利用数据包传输文件或者数据。数据包主要有目的IP地址、源IP地址、净载数据等部分构成,包括报头和包体。报头是固定长度,包体的长度不定,各个字段的长度固定。在通信的接收端和发送端中,请求数据包和应答数据包的报头的结构是一致的,不同的是包体的定义,包体携带了需要通信的数据。由于发送端和接收端的发送数据和返回数据的内容是不同的,因此包体携带的数据也是不同的。
对于通用的协议,一般而言分为二进制协议和文本协议,其中二进制协议包括用户数据包协议(User Datagram Protocol,简称UDP)下的二进制协议,利用UDP二进制协议传输的数据包通常由定长部分和变长部分组成,例如动态主机设置协议(Dynamic HostConfiguration Protocol,简称为DHCP)。
UDP协议主要用来支持需要在计算机之间传输数据的网络应用,包括网络视频会议系统在内的众多的客户/服务器模式的网络应用都需要使用UDP。与TCP协议一样,UDP协议直接位于IP协议的顶层,属于传输层协议。
UDP协议的主要作用是将网络数据流量压缩成数据包的形式。一个典型的数据包就是一个二进制数据的传输单位。每一个数据包的前8个字节用来包含报头信息,剩余字节则用来包含具体的传输数据。
在UDP协议中,UDP报头由4个域组成,4个域分别为源端口号、目标端口号、数据包长度和校验值,其中,每个域各占用2个字节。数据发送一方将UDP数据包通过源端口发送出去,数据接收一方则通过目标端口接收数据。数据发送一方可以是客户端或服务端,数据接收方也可以是客户端或服务端。因为UDP报头使用两个自己存放端口号,所以端口号的有效范围是从0到65535,通常情况下,大于49151的端口都代表动态端口。
数据包的长度是指包括报头和数据部分在内的总的字节数。因为报头的长度是固定的,所以该域主要用来计算可变长度的数据部分,也成为数据负载。数据包的最大长度根据操作环境的不同而各异。理论上,包含报头在内的数据包的最大长度为65535字节。
UDP协议使用校验值保证数据安全。校验值在数据发送方通过特殊的算法计算得出,在传递到接收方之后,需要重新计算。如果数据包在传输过程中被第三方篡改或者由于线路噪音等原因受到损坏,发送和接收方的校验计算值会不符,当次数据传输出错。
为了便于获取数据包,通过监听网卡获取数据包。由于网卡是接收信息的重要通道,因此通过监听网卡获取数据包更加方便。
步骤S102,获取预先设定的过滤语句。由于本发明实施例的网络数据包的过滤方法能够通过计算机程序来实现,因此,在获取到数据包之后,对数据包进行过滤。
由步骤S101获取的数据包包含了当前需要的数据和不需要的冗余数据,为了过滤掉冗余数据,获取到当前需要的数据,获取预先设定的过滤语句。通过预先设定的过滤语句能够过滤得到当前需要的数据。
步骤S103,通过过滤语句对数据包执行过滤计算,其中,过滤语句中存在可偏移读点,通过执行可偏移读点跳过数据包的定长部分和变长部分以对数据包执行过滤计算。
获取的数据包通常并非是定长结构,例如对于微博平台使用的CS协议,其格式如下:
定长部分A+变长部分B+定长部分C+变长部分D+定长部分E+包体
在对数据包进行数据计算时,数据包包体前面还存在着变长部分和定长部分,为了准确对数据包进行过滤计算,可以利用获取到的过滤语句对数据包执行过滤计算。过滤语句存在可偏移读点,通过执行可偏移读点,在语句执行时,直接跳过数据包的定长部分和变长部分,从数据包包体开始执行过滤计算。在上述例子中,通过过滤语句,跳过定长部分A、变长部分B、定长部分C、变长部分D以及定长部分E,直接对数据包包体的数据进行过滤计算,从而得到过滤后的数据包。
利用过滤语句,跳过数据包的定长部分和变长部分,从数据包的包体开始读取数据以执行过滤计算,简化了过滤逻辑,提高了过滤数据包的准确性。
图2是根据本发明第二实施例的网络数据包的过滤方法的流程图。如图所示,该方法包括如下步骤:
步骤S201,获取数据包,其中,数据包包括定长部分和变长部分。对于通用的协议,一般而言分为二进制协议和文本协议,其中二进制协议包括用户数据包协议(UserDatagram Protocol,简称UDP)下的二进制协议,利用UDP二进制协议传输的数据包通常由定长部分和变长部分组成,例如动态主机设置协议(Dynamic Host ConfigurationProtocol,简称为DHCP)。
本发明实施例中获取的数据包为获取UDP二进制协议传输的数据包,包括微博中的CS协议中传输的数据包,但并不限于微博中的CS协议。
步骤S202,获取预先设定的过滤语句。由于本发明实施例的网络数据包的过滤方法能够通过计算机程序来实现,因此,在获取到数据包之后,对数据包进行过滤。
获取的数据包包含了当前需要的数据和不需要的冗余数据,为了过滤掉冗余数据,获取到当前需要的数据,获取预先设定的过滤语句。通过预先设定的过滤语句能够过滤得到当前需要的数据。
步骤S203,读取过滤语句的偏移标识。过滤语句的偏移标识能够标识该过滤语句开始偏移,并确定偏移开始的位置。例如,在读取过滤语句之后,读取过滤语句的偏移标识。在开始过滤的时候,读取到偏移标识,确定可偏移的当前读点为IP头部。
步骤S204,读取过滤语句中当前读点的偏移字节。在过滤语句的偏移标识之后紧跟着过滤语句中当前读点的偏移字节,用来表示偏移的字节长度。例如,在偏移标识后面紧跟着当前读点的偏移字节为8,则从当前读点算起跳过8个字节。
步骤S205,读取过滤语句中用于标识变长部分的读点起点和读点长度的变长标识。由于数据包包含定长部分和变长部分。定长部分可以在读取偏移标识和偏移字节之后进行字节的偏移和跳转,而变长部分则需要获取变长部分开始的位置以及计算变长部分的长度,因此需要读取过滤语句中用于标识变长部分的读点起点,以及确定变长部分长度的变长标识。
获取过滤语句中的偏移标识和偏移字节,能够跳过数据包的定长部分。读取过滤语句中的标识变长部分的读点起点和读点长度的变长标识,跳过数据包的变长部分,从而直接跳过数据包包体之前的字节,过滤数据包内的数据,从而快速准确的过滤数据包。
每个变长部分的计算都是完全独立的,只要获取到变长部分的读点起点和读点长度的变长标识就能计算出变长部分,因而容易提取某个变长部分用于其它需要变长部分的程序中。
图3是根据本发明第三实施例的网络数据包的过滤方法的流程图。图3所示实施例可以作为图2所示实施例的优选实施方式,如图所示,该方法包括如下步骤:
步骤S301,通过执行偏移标识和偏移字节跳过数据包的定长部分。
步骤S302,通过执行偏移标识和变长标识跳过数据包的变长部分。
步骤S303,通过数据包的定长部分和数据包的变长部分获取数据包的值。
步骤S304,通过数据包的值对数据包执行过滤计算。
对于上述步骤S301至步骤S304通过以下例子予以说明:
微博平台使用的CS协议,其格式如下:
定长部分A+变长部分B+定长部分C+变长部分D+定长部分E+包体
定长部分A为28字节。
变长部分B最小长度为4字节,其中的第3、4字节(网络序的16位无符号整数)为整个变长部分B的长度(值大于等于4)。
定长部分C为10字节。
变长部分D最小长度为2字节,其中第1、2字节(网络序的16位无符号整数)为整个变长部分D的长度减2(即为其后面的变长长度,该值可能为0)。
定长部分E为12字节。
对于响应包,包体的第一个字节为返回码,返回0表示响应正常,返回非0表示响应异常。
抓取响应异常的数据包需要如下语句:
@20;@8;@28;@[2:2];@10;@2+[0:2];@12;[0:1]!=0
本发明实施例提供的网络数据包的过滤方法,每次过滤计算时都存在一个可偏移的读点,初始化时其值为IP头部,分析上面抓取数据包的语句可知:
通过执行偏移标识和偏移字节跳过数据包的定长部分,@20是跳过IP头部,在抓取数据包时初始化读点为IP头部,@8是跳过UDP头部,@28是跳过定长部分A,@10是跳过定长部分C,@12是跳过定长部分E。
通过执行偏移标识和变长标识跳过数据包的变长部分,@[2:2]是跳过变长部分B,@2+[0:2]是跳过变长部分D。
通过数据包的定长部分和数据包的变长部分获取数据包的值,其中,定长部分的数据包的值可以是定长部分的长度描述字段,变长部分的数据包的值可以为变长部分的长度描述字段,也可以是根据变长部分的计算语句计算出来的数值。
通过数据包的值对数据包执行过滤计算,通过偏移语句将读点跳转到[0:1]!=0,判断当前语句是否符合预定条件。
由于存在可偏移的读点和偏移标识,使得变长部分的计算从当前读点开始,与之前的计算过程无关,是完全独立的计算过程。对于包含n个变长部分的数据包的过滤过程,可以得出:
跳过第1个变长,则@A0+[A0:B0] (读点在第1个变长开始处)
跳过第2个变长,则@A1+[A1:B1] (读点在第2个变长开始处)
跳过第n个变长,则@An+[An:Bn] (读点在第n个变长开始处)
若要跳过n个变长,则仅需要@A0+[A0:B0];...;@An+[An:Bn];即可。整个过程中,对于某个变成部分,只需要计算当前的长度即可,因此逻辑简单,不容易出错,提高了过滤数据的准确性。
优选地,通过数据包的值对数据包执行过滤计算包括:将数据包的值与预设值进行比较,如果比较出数据包的值与预设值相等,则确定数据包为符合条件的数据包,如果比较出数据包的值与预设值不相等,则确定数据包为不符合条件的数据包。
数据包的值可以通过过滤语句中的[0:1]!=0获得,该语句的读点为起点,1字节为长度,过滤语句中的[0:1]!=0能获得到数据包的值是否为0。将数据包的值与预设值进行比较,可以是数据包的值与0进行比较,如果数据包的值与0相同,则确定数据包为符合条件的数据包,如果比较出数据包的值与0不相同,则确定数据包为不符合条件的数据包。
进一步地,过滤语句的偏移标识为@,过滤语句中当前读点的偏移字节为预先设定的固定数值,变长标识通过[x:y]表示,其中,以当前读点为准的第x字节作为起点,y为字节长度。
过滤语句的偏移标识@能够确定定长部分或者变长部分开始偏移的位置,[x:y]表示偏移的起始读点为x,偏移的字节长度为y,即变长部分的长度为y字节。其中,起始读点x可以上一个语句执行结束的位置。其中y只能为1、2、4,分别对应8位整数、16位整数、32位整数。
具体地,下面利用上述例子对本发明实施例的网络数据包的过滤方法进行说明。
1、获取数据包。获取数据包包括获取数据包的定长部分和数据包的变长部分。本实施例中获取的数据包的格式为定长部分A+变长部分B+定长部分C+变长部分D+定长部分E+包体。
2、判断数据包是否符合预设条件。
1),将读点置为0,此时其位置为IP头部。
2),执行@20;语句,读点+20,此时读点为初始化的读点0,执行该语句跳过了IP头部20字节。
3),执行@8;语句,读点+8,此时读点为跳过IP头部后的20字节,执行该语句跳过了UDP头部8字节。
4),执行@28;语句,读点+28,此时读点为跳过UDP头部8字节后的字节位置,执行该语句跳过了自有协议的定长部分A。
5),执行@[2:2];语句,以读点+2字节为起点,2字节为长度,获取数据包的值,其中,数据包的值为该变长部分的长度描述字段,并跳过了自有协议的变长部分B。
6),执行@10;语句,读点+10,当前读点为变长部分B结束字节,该语句跳过了自有协议的定长部分C。
7),执行@2+[0:2];语句,以读点为起点,2字节为长度,获取数据包的值,该数据包的值是该变长部分的长度-2,该语句跳过了自有协议的变长部分D。
8),执行@12;语句,该语句跳过了自有协议的定长部分E,此时读点的位置已经指向了判断返回码的位置。
9),执行[0:1]!=0语句,以读点为起点,1字节为长度,获取数据包的值,此时数据包的值就是目标返回码,将该值与0做判断,若不相等则视为符合条件。
3、若符合条件则输出判断结果或者转发等。
本发明实施例提供了一种网络数据包的过滤装置。
本发明实施例的网络数据包的过滤方法可以通过本发明实施例所提供的网络数据包的过滤装置来执行,本发明实施例的网络数据包的过滤装置也可以用于执行本发明实施例所提供的网络数据包的过滤方法。
图4是根据本发明第一实施例的网络数据包的过滤装置的示意图。如图所示,该网络数据包的过滤装置包括第一获取单元10、第二获取单元20和计算单元30。
第一获取单元10用于获取数据包,其中,数据包包括定长部分和变长部分。在网络通信中,通常利用数据包传输文件或者数据。数据包主要有目的IP地址、源IP地址、净载数据等部分构成,包括报头和包体。报头是固定长度,包体的长度不定,各个字段的长度固定。在通信的接收端和发送端中,请求数据包和应答数据包的报头的结构是一致的,不同的是包体的定义,包体携带了需要通信的数据。由于发送端和接收端的发送数据和返回数据的内容是不同的,因此包体携带的数据也是不同的。
对于通用的协议,一般而言分为二进制协议和文本协议,其中二进制协议包括用户数据包协议(User Datagram Protocol,简称UDP)下的二进制协议,利用UDP二进制协议传输的数据包通常由定长部分和变长部分组成,例如动态主机设置协议(Dynamic HostConfiguration Protocol,简称为DHCP)。
UDP协议主要用来支持需要在计算机之间传输数据的网络应用,包括网络视频会议系统在内的众多的客户/服务器模式的网络应用都需要使用UDP。与TCP协议一样,UDP协议直接位于IP协议的顶层,属于传输层协议。
UDP协议的主要作用是将网络数据流量压缩成数据包的形式。一个典型的数据包就是一个二进制数据的传输单位。每一个数据包的前8个字节用来包含报头信息,剩余字节则用来包含具体的传输数据。
在UDP协议中,UDP报头由4个域组成,4个域分别为源端口号、目标端口号、数据包长度和校验值,其中,每个域各占用2个字节。数据发送一方将UDP数据包通过源端口发送出去,数据接收一方则通过目标端口接收数据。数据发送一方可以是客户端或服务端,数据接收方也可以是客户端或服务端。因为UDP报头使用两个自己存放端口号,所以端口号的有效范围是从0到65535,通常情况下,大于49151的端口都代表动态端口。
数据包的长度是指包括报头和数据部分在内的总的字节数。因为报头的长度是固定的,所以该域主要用来计算可变长度的数据部分,也成为数据负载。数据包的最大长度根据操作环境的不同而各异。理论上,包含报头在内的数据包的最大长度为65535字节。
UDP协议使用校验值保证数据安全。校验值在数据发送方通过特殊的算法计算得出,在传递到接收方之后,需要重新计算。如果数据包在传输过程中被第三方篡改或者由于线路噪音等原因受到损坏,发送和接收方的校验计算值会不符,当次数据传输出错。
为了便于获取数据包,通过监听网卡获取数据包。由于网卡是接收信息的重要通道,因此通过监听网卡获取数据包更加方便。
第二获取单元20用于获取预先设定的过滤语句。由于本发明实施例的网络数据包的过滤方法能够通过计算机程序来实现,因此,在获取到数据包之后,对数据包进行过滤。由第一获取单元10获取的数据包包含了当前需要的数据和不需要的冗余数据,为了过滤掉冗余数据,获取到当前需要的数据,获取预先设定的过滤语句。通过预先设定的过滤语句能够过滤得到当前需要的数据。
计算单元30用于通过过滤语句对数据包执行过滤计算,其中,过滤语句中存在可偏移读点,通过执行可偏移读点跳过数据包的定长部分和变长部分以对数据包执行过滤计算。
获取的数据包通常并非是定长结构,例如对于微博平台使用的CS协议,其格式如下:
定长部分A+变长部分B+定长部分C+变长部分D+定长部分E+包体
在对数据包进行数据计算时,数据包包体前面还存在着变长部分和定长部分,为了准确对数据包进行过滤计算,可以利用获取到的过滤语句对数据包执行过滤计算。过滤语句存在可偏移读点,通过执行可偏移读点,在语句执行时,直接跳过数据包的定长部分和变长部分,从数据包包体开始执行过滤计算。在上述例子中,通过过滤语句,跳过定长部分A、变长部分B、定长部分C、变长部分D以及定长部分E,直接对数据包包体的数据进行过滤计算,从而得到过滤后的数据包。
通过网络数据包的过滤装置,利用过滤语句,跳过数据包的定长部分和变长部分,从数据包的包体开始读取数据以执行过滤计算,简化了过滤逻辑,提高了过滤数据包的准确性。
图5是根据本发明第二实施例的网络数据包的过滤装置的示意图。该图所示实施例可以作为图4所示实施例的优选实施方式,该网络数据包的过滤装置包括第一获取单元10、第二获取单元20和计算单元30,还包括标识单元40、字节单元50和读取单元60。
第一获取单元10用于获取数据包,其中,数据包包括定长部分和变长部分。对于通用的协议,一般而言分为二进制协议和文本协议,其中二进制协议包括用户数据包协议(User Datagram Protocol,简称UDP)下的二进制协议,利用UDP二进制协议传输的数据包通常由定长部分和变长部分组成,例如动态主机设置协议(Dynamic Host ConfigurationProtocol,简称为DHCP)。第一获取单元10获取UDP二进制协议传输的数据包。
第二获取单元20用于获取预先设定的过滤语句。由于本发明实施例的网络数据包的过滤方法能够通过计算机程序来实现,因此,在获取到数据包之后,对数据包进行过滤。由第一获取单元10获取的数据包包含了当前需要的数据和不需要的冗余数据,为了过滤掉冗余数据,获取到当前需要的数据,获取预先设定的过滤语句。通过预先设定的过滤语句能够过滤得到当前需要的数据。
计算单元30用于通过过滤语句对数据包执行过滤计算,其中,过滤语句中存在可偏移读点,通过执行可偏移读点跳过数据包的定长部分和变长部分以对数据包执行过滤计算。
获取的数据包通常并非是定长结构,例如对于微博平台使用的CS协议,其格式如下:
定长部分A+变长部分B+定长部分C+变长部分D+定长部分E+包体
在对数据包进行数据计算时,数据包包体前面还存在着变长部分和定长部分,为了准确对数据包进行过滤计算,可以利用获取到的过滤语句对数据包执行过滤计算。过滤语句存在可偏移读点,通过执行可偏移读点,在语句执行时,直接跳过数据包的定长部分和变长部分,从数据包包体开始执行过滤计算。在上述例子中,通过过滤语句,跳过定长部分A、变长部分B、定长部分C、变长部分D以及定长部分E,直接对数据包包体的数据进行过滤计算,从而得到过滤后的数据包。
标识单元40用于在获取预先设定的过滤语句之后,读取过滤语句的偏移标识。过滤语句的偏移标识能够标识该过滤语句开始偏移,并确定偏移开始的位置。例如,在读取过滤语句之后,读取过滤语句的偏移标识。在开始过滤的时候,读取到偏移标识,确定可偏移的当前读点为IP头部。
字节单元50用于读取过滤语句中当前读点的偏移字节。在过滤语句的偏移标识之后紧跟着过滤语句中当前读点的偏移字节,用来表示偏移的字节长度。例如,在偏移标识后面紧跟着当前读点的偏移字节为8,则从当前读点算起跳过8个字节。
读取单元60用于读取过滤语句中用于标识变长部分的读点起点和读点长度的变长标识。由于数据包包含定长部分和变长部分。定长部分可以在读取偏移标识和偏移字节之后进行字节的偏移和跳转,而变长部分则需要获取变长部分开始的位置以及计算变长部分的长度,因此需要读取过滤语句中用于标识变长部分的读点起点,以及确定变长部分长度的变长标识。
获取过滤语句中的偏移标识和偏移字节,能够跳过数据包的定长部分。读取过滤语句中的标识变长部分的读点起点和读点长度的变长标识,跳过数据包的变长部分,从而直接跳过数据包包体之前的字节,过滤数据包内的数据,从而快速准确的过滤数据包。
每个变长部分的计算都是完全独立的,只要获取到变长部分的读点起点和读点长度的变长标识就能计算出变长部分,因而容易提取某个变长部分用于其它需要变长部分的程序中。
图6是根据本发明第三实施例的网络数据包的过滤装置的示意图。如图所示,该网络数据包的过滤装置包括第一获取单元10、第二获取单元20和计算单元30,其中,计算单元包括定长模块301、变长模块302、获取模块303和计算模块304。
定长模块301用于通过执行偏移标识和偏移字节跳过数据包的定长部分。
变长模块302用于通过执行偏移标识和变长标识跳过数据包的变长部分。
获取模块303用于通过数据包的定长部分和数据包的变长部分获取数据包的值。
计算模块304用于通过数据包的值对数据包执行过滤计算。
通过以下例子对定长模块301、变长模块302、获取模块303和计算模块304的功能予以说明:
微博平台使用的CS协议,其格式如下:
定长部分A+变长部分B+定长部分C+变长部分D+定长部分E+包体
定长部分A为28字节。
变长部分B最小长度为4字节,其中的第3、4字节(网络序的16位无符号整数)为整个变长部分B的长度(值大于等于4)。
定长部分C为10字节。
变长部分D最小长度为2字节,其中第1、2字节(网络序的16位无符号整数)为整个变长部分D的长度减2(即为其后面的变长长度,该值可能为0)。
定长部分E为12字节。
对于响应包,包体的第一个字节为返回码,返回0表示响应正常,返回非0表示响应异常。
抓取响应异常的数据包需要如下语句:
@20;@8;@28;@[2:2];@10;@2+[0:2];@12;[0:1]!=0
本发明实施例提供的网络数据包的过滤方法,每次过滤计算时都存在一个可偏移的读点,初始化时其值为IP头部,分析上面抓取数据包的语句可知:
定长模块301通过执行偏移标识和偏移字节跳过数据包的定长部分,@20是跳过IP头部,在抓取数据包时初始化读点为IP头部,@8是跳过UDP头部,@28是跳过定长部分A,@10是跳过定长部分C,@12是跳过定长部分E。
变长模块302通过执行偏移标识和变长标识跳过数据包的变长部分,@[2:2]是跳过变长部分B,@2+[0:2]是跳过变长部分D。
获取模块303通过数据包的定长部分和数据包的变长部分获取数据包的值。其中,定长部分的数据包的值可以是定长部分的长度描述字段,变长部分的数据包的值可以为变长部分的长度描述字段,也可以是根据变长部分的计算语句计算出来的数值。
计算模块304用于通过数据包的值对数据包执行过滤计算。通过偏移语句将读点跳转到[0:1]!=0,判断当前语句是否符合预定条件,执行过滤计算。
由于存在可偏移的读点和偏移标识,使得变长部分的计算从当前读点开始,与之前的计算过程无关,是完全独立的计算过程。对于包含n个变长部分的数据包的过滤过程,可以得出:
跳过第1个变长,则@A0+[A0:B0] (读点在第1个变长开始处)
跳过第2个变长,则@A1+[A1:B1] (读点在第2个变长开始处)
跳过第n个变长,则@An+[An:Bn] (读点在第n个变长开始处)
若要跳过n个变长,则仅需要@A0+[A0:B0];...;@An+[An:Bn];即可。整个过程中,对于某个变成部分,只需要计算当前的长度即可,因此逻辑简单,不容易出错,提高了过滤数据的准确性。
优选地,计算单元30通过以下模块对数据包执行过滤计算包括:比较模块用于将数据包的值与预设值进行比较,第一确定模块用于在比较出数据包的值与预设值相等时,确定数据包为符合条件的数据包,第二确定模块用于在比较出数据包的值与预设值不相等时,确定数据包为不符合条件的数据包。
数据包的值可以通过过滤语句中的[0:1]!=0获得,该语句的读点为起点,1字节为长度,过滤语句中的[0:1]!=0能获得到数据包的值是否为0。将数据包的值与预设值进行比较,可以是数据包的值与0进行比较,如果数据包的值与0相同,则确定数据包为符合条件的数据包,如果比较出数据包的值与0不相同,则确定数据包为不符合条件的数据包。
进一步地,定长模块确定过滤语句的偏移标识为@,变长模块确定过滤语句中当前读点的偏移字节为预先设定的固定数值,变长标识通过[x:y]表示,其中,以当前读点为准的第x字节作为起点,y为字节长度。
过滤语句的偏移标识@能够确定定长部分或者变长部分开始偏移的位置,[x:y]表示偏移的起始读点为x,偏移的字节长度为y,即变长部分的长度为y字节。其中,起始读点x可以上一个语句执行结束的位置。其中y只能为1、2、4,分别对应8位整数、16位整数、32位整数。
具体地,下面利用上述例子对本发明实施例的网络数据包的过滤装置进行说明。
1、第一获取单元获取数据包。获取数据包包括获取数据包的定长部分和数据包的变长部分。本实施例中获取的数据包的格式为定长部分A+变长部分B+定长部分C+变长部分D+定长部分E+包体。
2、计算单元通过以下方式对数据包执行过滤计算。
1),将读点置为0,此时其位置为IP头部。
2),执行@20;语句,读点+20,此时读点为初始化的读点0,执行该语句跳过了IP头部20字节。
3),执行@8;语句,读点+8,此时读点为跳过IP头部后的20字节,执行该语句跳过了UDP头部8字节。
4),执行@28;语句,读点+28,此时读点为跳过UDP头部8字节后的字节位置,执行该语句跳过了自有协议的定长部分A。
5),执行@[2:2];语句,以读点+2字节为起点,2字节为长度,获取数据包的值,其中,数据包的值为该变长部分的长度描述字段,并跳过了自有协议的变长部分B。
6),执行@10;语句,读点+10,当前读点为变长部分B结束字节,该语句跳过了自有协议的定长部分C。
7),执行@2+[0:2];语句,以读点为起点,2字节为长度,获取数据包的值,该数据包的值是该变长部分的长度-2,该语句跳过了自有协议的变长部分D。
8),执行@12;语句,该语句跳过了自有协议的定长部分E,此时读点的位置已经指向了判断返回码的位置。
9),执行[0:1]!=0语句,以读点为起点,1字节为长度,获取数据包的值,此时数据包的值就是目标返回码,将该值与0做判断,若不相等则视为符合条件。
本发明实施例还提供了一种计算机存储介质。该计算机存储介质可存储有程序,该程序用于执行上述的网络数据包的过滤方法中的部分或全部步骤。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置,可通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述仅为本发明的优选实施例,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (6)
1.一种网络数据包的过滤方法,其特征在于,包括:
获取数据包,其中,所述数据包包括定长部分和变长部分;
获取预先设定的过滤语句;以及
通过所述过滤语句对所述数据包执行过滤计算,其中,所述过滤语句中存在可偏移读点,通过执行所述可偏移读点跳过所述数据包的定长部分和变长部分以对所述数据包执行过滤计算;
其中,在获取预先设定的过滤语句之后,所述网络数据包的过滤方法还包括:读取所述过滤语句的偏移标识;读取所述过滤语句中当前读点的偏移字节;以及读取所述过滤语句中用于标识变长部分的读点起点和读点长度的变长标识;
其中,通过所述过滤语句对所述数据包执行过滤计算包括:通过执行所述偏移标识和所述偏移字节跳过所述数据包的定长部分;通过执行所述偏移标识和所述变长标识跳过所述数据包的变长部分;通过所述数据包的定长部分和所述数据包的变长部分获取所述数据包的值;以及通过所述数据包的值对所述数据包执行过滤计算;
其中,所述数据包的值为数据包中包体的第一个字节所携带的值。
2.根据权利要求1所述的网络数据包的过滤方法,其特征在于,通过所述数据包的值对所述数据包执行过滤计算包括:
将所述数据包的值与预设值进行比较;
如果比较出所述数据包的值与所述预设值相等,则确定所述数据包为符合条件的数据包;以及
如果比较出所述数据包的值与所述预设值不相等,则确定所述数据包为不符合条件的数据包。
3.根据权利要求1所述的网络数据包的过滤方法,其特征在于,所述过滤语句的偏移标识为@,所述过滤语句中当前读点的偏移字节为预先设定的固定数值,所述变长标识通过[x:y]表示,其中,以当前读点为准的第x字节作为起点,y为字节长度。
4.一种网络数据包的过滤装置,其特征在于,包括:
第一获取单元,用于获取数据包,其中,所述数据包包括定长部分和变长部分;
第二获取单元,用于获取预先设定的过滤语句;以及
计算单元,用于通过所述过滤语句对所述数据包执行过滤计算,其中,所述过滤语句中存在可偏移读点,通过执行所述可偏移读点跳过所述数据包的定长部分和变长部分以对所述数据包执行过滤计算;
其中,所述网络数据包的过滤装置还包括:标识单元,用于在获取预先设定的过滤语句之后,读取所述过滤语句的偏移标识;字节单元,用于读取所述过滤语句中当前读点的偏移字节;以及读取单元,用于读取所述过滤语句中用于标识变长部分的读点起点和读点长度的变长标识;
其中,所述计算单元包括:定长模块,用于通过执行所述偏移标识和所述偏移字节跳过所述数据包的定长部分;变长模块,用于通过执行所述偏移标识和所述变长标识跳过所述数据包的变长部分;获取模块,用于通过所述数据包的定长部分和所述数据包的变长部分获取所述数据包的值;以及计算模块,用于通过所述数据包的值对所述数据包执行过滤计算;
其中,所述数据包的值为数据包中包体的第一个字节所携带的值。
5.根据权利要求4所述的网络数据包的过滤装置,其特征在于,所述计算单元包括:
比较模块,用于将所述数据包的值与预设值进行比较;
第一确定模块,用于在比较出所述数据包的值与所述预设值相等时,确定所述数据包为符合条件的数据包;以及
第二确定模块,用于在比较出所述数据包的值与所述预设值不相等时,确定所述数据包为不符合条件的数据包。
6.根据权利要求4所述的网络数据包的过滤装置,其特征在于,所述定长模块确定所述过滤语句的偏移标识为@,所述变长模块确定所述过滤语句中当前读点的偏移字节为预先设定的固定数值,所述变长标识通过[x:y]表示,其中,以当前读点为准的第x字节作为起点,y为字节长度。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310538417.9A CN104618170B (zh) | 2013-11-04 | 2013-11-04 | 网络数据包的过滤方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310538417.9A CN104618170B (zh) | 2013-11-04 | 2013-11-04 | 网络数据包的过滤方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104618170A CN104618170A (zh) | 2015-05-13 |
CN104618170B true CN104618170B (zh) | 2019-02-26 |
Family
ID=53152461
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310538417.9A Active CN104618170B (zh) | 2013-11-04 | 2013-11-04 | 网络数据包的过滤方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104618170B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109462496B (zh) * | 2018-10-15 | 2023-04-18 | 视联动力信息技术股份有限公司 | 一种视联网终端的数据处理方法和装置 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101286896A (zh) * | 2008-06-05 | 2008-10-15 | 上海交通大学 | 基于流的IPSec VPN协议深度检测方法 |
CN102316121A (zh) * | 2011-10-19 | 2012-01-11 | 武汉烽火网络有限责任公司 | 支持动态扩展帧头的过滤匹配预处理方法及装置 |
-
2013
- 2013-11-04 CN CN201310538417.9A patent/CN104618170B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101286896A (zh) * | 2008-06-05 | 2008-10-15 | 上海交通大学 | 基于流的IPSec VPN协议深度检测方法 |
CN102316121A (zh) * | 2011-10-19 | 2012-01-11 | 武汉烽火网络有限责任公司 | 支持动态扩展帧头的过滤匹配预处理方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN104618170A (zh) | 2015-05-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103905447B (zh) | 业务链路选择控制方法以及设备 | |
CN103401726B (zh) | 网络路径探测方法及装置、系统 | |
US10009296B2 (en) | Coalescing messages using a network interface controller | |
CN106878194B (zh) | 一种报文处理方法和装置 | |
CN102638407A (zh) | 报文转发方法、装置及网络设备 | |
CN108737584A (zh) | 容器服务的访问方法、网络地址的解析方法、装置和系统 | |
CN107786669B (zh) | 一种负载均衡处理的方法、服务器、装置及存储介质 | |
CN102891803B (zh) | 拥塞处理方法及网络设备 | |
CN104518968B (zh) | 一种报文处理的方法和透明代理服务器 | |
EP3591899B1 (en) | Path detection | |
CN106921578A (zh) | 一种转发表项的生成方法和装置 | |
CN104486361A (zh) | 建立网游连接的方法、游戏终端及系统 | |
CN104506549A (zh) | 建立网游连接的方法、设备及系统 | |
CN114430394A (zh) | 报文处理方法、装置、电子设备及可读存储介质 | |
CN105516302A (zh) | 一种数据处理方法及网络设备 | |
CN105099952B (zh) | 一种资源分配方法及装置 | |
CN106534342B (zh) | 连接控制方法、主机及系统 | |
CN107249038A (zh) | 业务数据转发方法及系统 | |
CN103095608A (zh) | 一种dns数据包的代理转发方法 | |
CN109417507A (zh) | 部分延迟的报文访问 | |
CN105472054B (zh) | 一种报文发送方法及接入设备 | |
CN104618170B (zh) | 网络数据包的过滤方法和装置 | |
CN106850442B (zh) | 报文处理方法和转发设备 | |
CN105812272B (zh) | 业务链的处理方法、装置与系统 | |
CN108241685A (zh) | 数据查询的方法和查询客户端 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |