基于osi传输层时间戳的宽带私接检测方法

文档序号:7772479阅读:434来源:国知局
专利名称:基于osi传输层时间戳的宽带私接检测方法
技术领域
本发明涉及宽带用户检测领域,具体涉及一种用于针对非法共享上网的宽带私接检测方法。
背景技术
目前宽带接入业务基本都是基于包月或包年的形式开展的,因此往往存在着以个人的名义申请宽带而让黑网吧、企业使用,或者几户共用宽带而分摊费用,给运营商造成了巨大的经济损失,目前针对这种非法共享上网使用最多最有效的检测方法有IP_ID检测法和TCP指纹检测法。IP_ID检测法的原理如下同一 Windows主机发出的IP报文中携带的ID字段是连续变化且呈递增趋势,其起始值因不同的Windows主机不同而不同,根据这一规律,如果在一段时间内检测到某个源IP对应多个ID字段范围,则说明该IP对应的用户为共享接入用户,根据ID字段区间个数能够大致确定共享接入主机数目。但是,IP_ID检测法存在一些不足之处1)报文乱序时可能导致误判;2)大多数的LINUX版本或UNIX系统,每个TCP中的IP_ID连续增加,但不同的TCP 连接,IP.ID没有任何关系;3)对于Proxy方式、分时上网无效;4) IP_ID检测方法对于使用特殊的NAT软件无济于事,这些NAT软件可以改变IP 中的ID,在外面看上去就像是一台主机发出的。TCP指纹检测法的原理如下通过TCP序列号、确认号、滑动窗口这几个字段作为 TCP指纹来检测,所以若一段时间后发现某个IP下有几段序列号或确认号在连续变化,或者有好几种窗口大小,则可认为该IP下有私接用户。但该方法存在一些不足之处1)由于窗口大小是客户服务器协商决定的,所以对于同一个没有私接的IP地址, 也可能同时存在好几种窗口大小,这将导致误判;2)检测速度慢,需要根据收集到许多连续的报文段样本才有可能确定某个IP地址下是否存在几段序列号、确认号、窗口大小;3)TCP三次握手时的初始化序列号(ISN)随时间而变化的,而且不同的操作系统也会有不同的实现方式,所以每个连接的初始序列号是不同的。这样当某个私接的IP地址与外界进行非连续的通信时,之前记录的序列号、确认号、窗口大小等指纹信息就要抛弃来重新进行记录。综上所述,IP_ID检测法和TCP指纹检测法两种方法在实现时除了各自存在的不足外,都存在检测的准确性低、系统资源占用高、检测过程繁琐、适用范围窄的问题。

发明内容
本发明要解决的技术问题是提供一种检测准确性高、系统资源占用低、检测过程简便、适用范围广泛的基于OSI传输层时间戳的宽带私接检测方法。为解决上述技术问题,本发明采用的技术方案为一种基于OSI传输层时间戳的宽带私接检测方法,其实施步骤如下1)在客户端向电信接入路由设备建立TCP连接时开启客户端TCP报文的时间戳选项;2)设定用于判定客户端是否存在宽带私接的第一常量和第二常量;3)标记每一个接收的TCP报文的系统时间,并获取每一个接收的TCP报文的时间戳;4)实时获取同一 IP地址客户端发送的相邻两个TCP报文之间的系统时间差和时间戳差,并获取系统时间差和时间戳差之间的差值,如果所述差值超过第一常量或者在预设时间内所述差值不为0的数量超过第二常量则判定该IP地址对应的客户端存在宽带私接现象。作为上述技术方案的进一步改进所述步骤1)的详细步骤为电信接入路由设备实时捕获服务器端发送给客户端的TCP报文,如果TCP报文中SYN为1并且ACK为1,则将所述TCP报文的时间戳填充一串长度为32比特的数字后再发送给对应的客户端。所述步骤4)的详细步骤为A)设置检测时间为1. 2秒,检测周期为300ms,初始化计数器cnt、预设时间计数器 N0和N都为0 ;B)获取接收当前TCP报文的系统时间和接收上一个TCP报文的系统时间,将所述两个系统时间求差得到系统时间差并以IOOms为单位取整;C)获取当前TCP报文的时间戳和上一个TCP报文的时间戳,获取时间戳差的绝对值;D)获取所述时间戳差的绝对值与所述系统时间差之间的差值,并将所述差值与第一常量进行比较,如果所述差值超过第一常量则判定该IP地址对应的客户端存在宽带私接现象,否则跳转执行步骤E);E)分别获取接收当前TCP报文的系统时间和第1次接收到的TCP报文的系统时间,将所述两个系统时间求差得到系统时间差并以IOOms为单位取整得到N ;F)判断表达式队+3 <= N是否成立,如果不成立则执行步骤G),否则把cnt清零, 且如果检测时间到达1. 2秒,则跳到步骤I),否则把N赋值给Ntl,并跳转执行步骤B);G)判断D)中获取的时间戳差的绝对值与所述系统时间差之间的差值是否为0,如果不为0则使计数器cnt加1 ;H)将计数器cnt与第二常量进行比较,如果计数器值大于第二常量,则判定该IP 地址对应的客户端存在宽带私接现象,否则继续跳转执行步骤B);I)该IP地址暂时没有检测出私接,进行下次继续检测或者退出检测。所述第一常量为2,所述第二常量为6。本发明具有下述优点。1、本发明通过在电信运营商的接入路由设备上人为干预建立TCP连接的三次握手协议,并利用TCP报文段中的缺省字段时间戳来达到快速有效的检测网络私接,服务端利用时间戳计数的虚拟时钟与真实时间计数的现实标准时钟之间的频率上的差异来统计相邻报文段时间戳的差值的变化情况,分析系统时间差和时间戳差之间的差值变化情况, 如果差值超过预设常量则判定该IP地址对应的客户端存在宽带私接现象,能够检测出同一个IP地址下是否有多个用户利用路由器或代理服务器在同时共享上网,从而帮助电信运营商打击共享上网的不法行为,规范互联网市场的作用,具有检测准确性高、系统资源占用低、检测过程简便、适用范围广泛的优点。2、本发明通过服务端实时获取任意IP地址发送的不同TCP报文之间的系统时间差和时间戳差、判断系统时间差和时间戳差之间的差值是否超过预设常量来检测出私接的用户,该方法适用于目前通过路由器或代理服务器上网的情况,而且不要求客户端服务器端通信连续,对于突发式或者间断式通信都能达到检测的目的。3、本发明进一步将回应客户端的TCP报文的时间戳填充一串32比特的数字后发送给对应的客户端,利用Windows自身的特性打开TCP报文的时间戳选项,能够实现开启 windows客户端TCP报文的时间戳选项,能够同时适用于使用Iinux和windows的系统,具有适用范围广泛的优点。


图1为本发明实施例的主要流程示意图。图2为TCP报文的时间戳结构示意图。图3为本发明实施例步骤1)的详细流程示意图。图4为本发明实施例步骤4)的详细流程示意图。
具体实施例方式如图1所示,本发明实施例基于OSI传输层时间戳的宽带私接检测方法的实施步骤如下1)在客户端向电信接入路由设备建立TCP连接时开启客户端TCP报文的时间戳选项;2)设定用于判定客户端是否存在宽带私接的第一常量和第二常量;3)标记每一个接收的TCP报文的系统时间,并获取每一个接收的TCP报文的时间戳;4)实时获取同一 IP地址客户端发送的相邻两个TCP报文之间的系统时间差和时间戳差,并获取系统时间差和时间戳差之间的差值,如果差值超过第一常量或者在预设时间内差值不为0的数量超过第二常量则判定该IP地址对应的客户端存在宽带私接现象。如图2所示,TCP报文的时间戳共10字节,其中第1字节类型的值为8表示该选项是时间戳选项;第2字节长度值为10表示该选项占用了 10个字节;第3 6字节的表示发送出去的报文段由发送端写入的时间戳值;第7 10字节表示发送出去的报文段中携带的之前从远端接收到的报文段中的由远端写入的返回时间戳值。时间戳是32bit的一个数,他表示的是自午夜时间00:00:00算起的以ms作为单位的时间单位数。虽然时间戳是 RFC建议的选项,但是不是每个操作系统都会在TCP选项里加入时间戳的。一般在Linux的各个版本里都会默认在TCP数据报里写入时间戳,而是用最多的Windows XP系统里默认是关闭的。开启时间戳的过程如图2所示,当客户端发出建立TCP连接的SYN时,目的端返回一个SYN/ACK报文给请求端。若在ISP端对这个返回的TCP报文里的TCP选项进行修改, 把自己的时间戳写入到该报文的选项里,然后再继续把该确认报文发到客户端。XP有个特点就是若接收到的报文里的时间戳选项打开了,则在与目的端通信时,后面发出的所有TCP 报文里的时间戳都是打开的,这样就实现了让XP把本机的时间戳加载到TCP选项里。时间戳在电脑重启后将复位,它的值将变的非常接近零00:00:00 :XXX, Windows下使用的虚拟时钟频率为10Hz。随着开机时间的变长,该时间戳的值会按照本地主机时间每100ms增加 1的速度累加。因此若忽略数据包的乱序接收,并考虑到所有共享用户的开机时间的差异及不同主机的真实时间的差异共同作用,只要这两个因素导致的时间相差大于0. ls,则这种方法理论上都可以检测到多用户共享;否则,若小于等于0. ls,则这时可等待下次有某个用户重启电脑后来达到检测宽带私接的目的。在RFC1323里指出,可以在传输层的TCP报头中的选项字段里加入TCP时间戳选项(Timestamps),它是32bit的值,这样在本地主机发出去的TCP报文里都会把时间戳写入到该时间戳选项里。RFC1323中没有规定写入的时间戳到底是怎样一个值,而只是说明产生时间戳的那个虚拟时钟要根据系统真实时钟来得到,与系统真实时间有近似的比例关系,而在Window里,时间戳的值与某台电脑的连续开机时间长短有关系,按照开机时间线性增加。另外不同用户的电脑硬件中,物理时钟偏移不一样,虽然存在NTP和SNTP协议用来同步用户电脑时钟与标准时钟,但是他们只能同步到年月日,时分秒,最多把时间精确到 ms级。这样在Window里,由于不同主机的本地真实时间不同,这样就可以利用时间戳来检测宽带私接。虽然时间戳是RFC建议的选项,但是不是每个操作系统都会在TCP选项里加入时间戳的。一般在Linux的各个版本里都会默认在TCP数据报里写入时间戳,而是用最多的WindowsXP系统里默认是关闭的。我们可以手动的让本地主机打开时间戳选项,通过修改 XP 的注册表 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\ Parameters节点中Tcpl3230pts项目的值为2就打开了时间戳选项。普通用户使用的 Windows系统中,时间戳选项是默认关闭的。本实施例中,当服务端收到建立TCP连接的请求报文时,如果发现客户端的时间戳选项开启,在客户端向服务端建立TCP连接时,服务端通过发送报文开启客户端TCP报文的时间戳选项。如图3所示,本实施例中步骤1)的详细步骤为电信接入路由设备实时捕获服务器端发送给客户端的TCP报文,如果TCP报文中SYN为1并且ACK为1,则将TCP报文的时间戳填充一串长度为32比特的数字后再发送给对应的客户端;否则,就不断的记录某个IP 地址下出来的报文段中时间戳的变化情况,直到检测出私接为止。Windows有个特点就是若接收到的同步确认报文里的时间戳选项打开了,则在与对端通信时,后面发出的所有TCP 报文里的时间戳都是打开的。这样就实现了让XP把本机的时间戳加载到TCP选项里,从而实现了开启客户端TCP报文的时间戳选项。如图4所示,本实施例中步骤4)的步骤为A)设置检测时间为1. 2秒,检测周期为300ms,初始化计数器cnt、预设时间计数器 N0和N都为0 ;B)获取接收当前TCP报文的系统时间和接收上一个TCP报文的系统时间,将两个系统时间求差得到系统时间差并以100ms为单位取整;
C)获取当前TCP报文的时间戳和上一个TCP报文的时间戳,获取时间戳差的绝对值;D)获取时间戳差的绝对值与系统时间差之间的差值,并将差值与第一常量进行比较,如果差值超过第一常量则判定该IP地址对应的客户端存在宽带私接现象,否则跳转执行步骤E);E)分别获取接收当前TCP报文的系统时间和第1次接收到的TCP报文的系统时间,将两个系统时间求差得到系统时间差并以IOOms为单位取整得到N ;F)判断表达式队+3 <= N是否成立,如果不成立则执行步骤G),否则把cnt清零, 且如果检测时间到达1. 2秒,则跳到步骤I),否则把N赋值给Ntl,并跳转执行步骤B);G)判断D)中获取的时间戳差的绝对值与系统时间差之间的差值是否为0,如果不为0则使计数器cnt加1 ;H)将计数器cnt与第二常量进行比较,如果计数器值大于第二常量,则判定该IP 地址对应的客户端存在宽带私接现象,否则继续跳转执行步骤B);I)该IP地址暂时没有检测出私接,进行下次继续检测或者退出检测。假设在ISP的检测设备里在一段时间内观察某个IP下的TCP收发情况,时间戳是开启的。用ti表示ISP在一段时间内检测到的第i个TCP数据报时对应的国际标准时间, 这个时间可以通过频繁使用NTP协议来精确,、表示第一次捕获到某个IP地址下的数据包中的时间戳所对应的国际标准时间。Ti表示的是在一段时间内第i个TCP数据报里携带的时间戳值。这样,我们规定下面的式子,Xi = Vt1^yi = Ti-Ti-P {(Xi,Yi), i e N},其中Xi 表示的是检测到第i个TCP数据报时的标准时间与检测到第1个TCP数据报时的标准时间的差值;yi就表示检测到第i个TCP数据报里携带的时间戳值与检测到第i-1个TCP数据报携带的时间戳值的Offset值。这样通过一段时间的观察,并把坐标(Xi,yi)的值显示出来,Xi为横坐标,单位为秒,Yi为纵坐标,单位为毫秒。就能看到随着时间的变化,Yi值在坐标图上的分布情况如果只有一个用户,因为时间戳的单位为ms,所以路由设备在IOOms内检测到好多个数据包后时间戳才会加1。因此在标准时间&的IOOms长度内Ji值都为0, 只有在相邻的每个IOOms时刻上,y,值才为+1,而且只能为+1 ;否则如果有多个用户在同时共享上网,在标准时间IOOms内会出现一个或多个跳跃点,跳跃点的值可能为士 1,士2,
士3,......,单位可能为毫秒,分钟,小时,而且如果连续出现好几个幅度很大的跳跃点,则
立刻就能判断出有共享。本实施例中,第一常量为2,第二常量为6。当前TCP报文与往前一段时间内TCP 报文之间系统时间差为300ms,选择继续观察3 X 100ms (也可以选择5 X 100ms, 6 X IOOms等等,相应的把判断条件里的3替换成5,6即可)时间来判断是由于不同主机的时间戳相差 1或2,还是由于同一个主机发出的相邻两个数据包间隔里刚好出现1个跳跃点。通过Nq+3 <=N来实将当前TCP报文和相隔300ms前的TCP报文进行比较。服务端(电信路由设备)在时刻^第一次捕捉到某个可疑IP地址下的报文段带有时间戳选项,捕获时刻对应的国际标准时间记为tH,时间戳值记为Ti+同时给Ntl赋初值0。步骤4)的具体步骤为I)继续监控下一个时间戳的到达时刻并记为ti;时间戳值记为Ti,这样就把得到的\ =以IOOms为单位取整,记为X,相邻时间戳差值为yi = Ti-Ti^1UII)如果yi-X > 2成立,就能立刻判断出有私接。如果yi_X > 2不成立,则要继续观察一段时间来判断是由于不同主机的时间戳相差1或2,还是由于同一个主机发出的相邻两个数据包间隔里刚好出现1个跳跃点,因此需要转到步骤III)。III)把以IOOms为单位取整,记为N。其中这里以连续300ms时间内观察到的时间戳值的变化情况作为判断私接的依据。因为如果没有私接,在300ms时间长度里会出现3个跳跃点。考虑到可能出现携带时间戳值为T和T+1的两个相邻的数据包经过的路由不同,若T+1先到达,T后到达,则会导致在300ms里出现6个跳跃点,但是如果相邻数据包的时间戳值相同,对于谁先到达都无所谓。通常情况下数据包都会按序到达,所以这里建议选择第二常量为6。所以如果队+3 < = N,则把N赋值给Ntl并把计数器cnt清0,然后把 、赋值给tg,把Ti赋值给IV1 ;否则,再次判断yi_X是否等于0,因为不同主机的时间戳相差1或2,如果不考虑路由不同,只考虑数据包按序到达。假设某个IP地址下有2个以上的主机在同时在往外发送数据包,则在IOOms时间里yi将不可避免的出现许许多多的跳跃点,且跳跃点的值为1或2。如果不为0,就把计数器cnt加1,这时如果cnt > 6,判定该IP 地址对应的客户端存在宽带私接现象,其他情况下把、赋值给tH,把Ti赋值给Τ"。这时转到步骤IV)。IV)如果检测时间达到设定值(这里选取为ls,也可以选择Im等等)还未检测出私接,则停止检测;否则转到步骤I)。以上所述仅为本发明的优选实施方式,本发明的保护范围并不仅限于上述实施方式,凡是属于本发明原理的技术方案均属于本发明的保护范围。对于本领域的技术人员而言,在不脱离本发明的原理的前提下进行的若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
权利要求
1.一种基于OSI传输层时间戳的宽带私接检测方法,其特征在于其实施步骤如下1)在客户端向电信接入路由设备建立TCP连接时开启客户端TCP报文的时间戳选项;2)设定用于判定客户端是否存在宽带私接的第一常量和第二常量;3)标记每一个接收的TCP报文的系统时间,并获取每一个接收的TCP报文的时间戳;4)实时获取同一IP地址客户端发送的相邻两个TCP报文之间的系统时间差和时间戳差,并获取系统时间差和时间戳差之间的差值,如果所述差值超过第一常量或者在预设时间内所述差值不为0的数量超过第二常量则判定该IP地址对应的客户端存在宽带私接现象。
2.根据权利要求1所述的基于OSI传输层时间戳的宽带私接检测方法,其特征在于,所述步骤1)的详细步骤为电信接入路由设备实时捕获服务器端发送给客户端的TCP报文, 如果TCP报文中SYN为1并且ACK为1,则将所述TCP报文的时间戳填充一串长度为32比特的数字后再发送给对应的客户端。
3.根据权利要求1或2所述的基于OSI传输层时间戳的宽带私接检测方法,其特征在于,所述步骤4)的详细步骤为A)设置检测时间为1.2秒,检测周期为300ms,初始化计数器cnt、预设时间计数器Ntl 和N都为0 ;B)获取接收当前TCP报文的系统时间和接收上一个TCP报文的系统时间,将所述两个系统时间求差得到系统时间差并以IOOms为单位取整;C)获取当前TCP报文的时间戳和上一个TCP报文的时间戳,获取时间戳差的绝对值;D)获取所述时间戳差的绝对值与所述系统时间差之间的差值,并将所述差值与第一常量进行比较,如果所述差值超过第一常量则判定该IP地址对应的客户端存在宽带私接现象,否则跳转执行步骤E);E)分别获取接收当前TCP报文的系统时间和第1次接收到的TCP报文的系统时间,将所述两个系统时间求差得到系统时间差并以IOOms为单位取整得到N ;F)判断表达式队+3< = N是否成立,如果不成立则执行步骤G),否则把cnt清零,且如果检测时间到达1. 2秒,则跳到步骤I),否则把N赋值给Ntl,并跳转执行步骤B);G)判断D)中获取的时间戳差的绝对值与所述系统时间差之间的差值是否为0,如果不为0则使计数器cnt加1 ;H)将计数器cnt与第二常量进行比较,如果计数器值大于第二常量,则判定该IP地址对应的客户端存在宽带私接现象,否则继续跳转执行步骤B);I)该IP地址暂时没有检测出私接,进行下次继续检测或者退出检测。
4.根据权利要求3所述的基于OSI传输层时间戳的宽带私接检测方法,其特征在于 所述第一常量为2,所述第二常量为6。
全文摘要
本发明公开了一种基于OSI传输层时间戳的宽带私接检测方法,其实施步骤如下1)在客户端向服务器端请求建立TCP连接时,服务器端返回了同步确认报文,电信接入路由设备截获该同步确认报文,添加时间戳后再次发送给客户端;2)电信接入路由设备设定第一常量和第二常量;3)电信接入路由设备标记每一个接收的TCP报文的系统时间,并获取每一个接收的TCP报文的时间戳;4)实时获取同一IP地址客户端发送的相邻两个TCP报文之间的系统时间差和时间戳差,并获取系统时间差和时间戳差之间的差值,如果所述差值超过第一常量或者在预设时间内所述差值不为0的数量超过第二常量则判定该IP地址对应的客户端存在宽带私接现象。本发明具有检测准确性高、系统资源占用低、检测过程简便、适用范围广泛的优点。
文档编号H04L12/26GK102377620SQ20111041010
公开日2012年3月14日 申请日期2011年12月9日 优先权日2011年12月9日
发明者于强, 倪笑园, 徐元欣, 李永佳, 杨硕, 梁书成, 潘立波, 章翠枝, 陈淑敏 申请人:浙江大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1