具体实施方式
本申请的主要思想在于,通过确定服务器与以一IP地址为用户IP地址与服务器建立TCP连接的终端之间的第一网络延时,并且确定服务器与所述IP地址的上一跳路由器之间的第二网络延时,从而判断第一网络延时与第二网络延时之比是否大于阈值,如果第一网络延时与第二网络延时之比大于阈值,则将所述IP地址识别为代理IP地址。
为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请具体实施例及相应的附图对本申请技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
根据本申请的实施例,提供了一种识别代理IP地址的方法。
参考图1,图1是本申请实施例的一种识别代理IP地址的方法的流程图,如图1所示,在步骤S101处,确定服务器与以一IP地址为用户IP地址与服务器建立TCP连接的终端之间的第一网络延时。
具体而言,为了识别一个IP地址是否为代理IP地址,首先需要获取服务器与以该IP地址作为自己的用户IP地址而试图与服务器建立TCP连接的那个真实终端之间的第一网络延时。
下面我们参考图2来详细地描述可以如何获取该第一网络延时的一种方法实施例的流程图。
为了更清楚地理解该第一网络延时的含义,我们首先介绍一下终端与服务器为了建立TCP连接而进行三次握手的过程。所谓三次握手(Three-way Handshake),是指建立一个TCP连接时,需要客户端和服务器总共发送3个报文。三次握手的目的是连接服务器指定端口,建立TCP连接。第一次握手:终端发送一个带SYN(同步序列编号SynchronizeSequence Numbers)标志的TCP报文到服务器,这是三次握手过程中的报文1,在本申请中称为SYN报文。第二次握手:服务器端回应终端,发送一个SYN-ACK报文给终端,这是三次握手中的第2个报文,这个报文同时带ACK标志和SYN标志。因此它表示对刚才客户端SYN报文的回应;同时又标志SYN给客户端,询问客户端是否准备好进行数据通信。第三次握手:终端必须再次回应服务器一个ACK报文(即是三次握手的确认报文),这是报文段3,表示终端准备好进行数据通信。通过三次握手,TCP连接建立。本申请利用了终端与服务器之间建立TCP连接的这个三次握手过程,从而可以获得服务器发送SYN-ACK报文与接收到终端回复的ACK报文之间的第一网络延时。下面,描述如何获取第一网络延时的具体步骤。
服务器接收来自以该IP地址为用户IP地址的所述终端的SYN报文,该终端请求建立TCP连接。服务器接收到该SYN报文之后,向所述终端发送SYN-ACK报文。因此,如图2所示,在步骤201处,服务器记录向所述终端发送SYN-ACK报文的时刻,例如可以将该时刻定义为第一时刻。
然后服务器接收到来自该终端的ACK报文,因此,在步骤202处,服务器记录接收到来自所述终端的ACK报文的时刻,例如可以将该时刻定义为第二时刻。
最后,在步骤203处,将向所述终端发送SYN-ACK报文的时刻与接收到来自所述终端的ACK报文的时刻之间的时间差确定为第一网络延时。也即是说,将第二时刻与第一时刻的时间差确定为第一网络延时。
通过上述方法步骤,就可以获知服务器与该终端之间的第一网络延时。
返回图1,在确定了第一网络延时之后,接下来在步骤102处,确定服务器与所述IP地址的上一跳路由器之间的第二网络延时。
该第二网络延时的获取是基于如下原理。
服务端可以记录用户IP地址为ip1,服务端可以构建多个(例如255个)生存时间(ttl)分别为1至255、且目标IP为ip1的一系列探测报文。根据TCP/IP协议,这一系列探测报文每经过一条路由器,则ttl将会减1,当报文ttl被减为0且还没到达目标地址时,此时路由器报错,发送一个ICMP(互联网控制消息协议)差错报文给发送方,从而可以知道最后一个ICMP差错报文即为该IP地址的上一跳路由器发送的。因此,利用该这一系列探测报文,可以分析出用户上一级路由的地址和网络延时。
下面我们参考图3来详细地描述可以如何获取该第二网络延时的一种方法实施例的流程图。
如上所述,服务器构建并发送具有递增生存时间、目标地址为所述用户IP地址的一系列探测报文。如上所述,例如可以构建并发送255个递增生存时间为1-255、目标IP为上述用户IP地址的一系列探测报文。从而如图3所示,在步骤301处,可以记录一系列探测报文中的每个探测报文的发送时刻。
接下来,基于该一系列探测报文获取所述IP地址的上一跳路由器向服务器发送的ICMP差错报文。如上所述,例如,当这一系列探测报文中生存时间为1的探测报文到达为第一个路由器时,由于还没有到达所述IP地址,所以产生并发送第一个ICMP差错报文,并被服务器接收,记录第一个差错报文接收时刻;如此类推,例如当这一系列探测报文中生存时间为n的报文到达为第n个路由器时,由于还没有到达所述IP地址,所以产生并发送第n个ICMP差错报文,并被服务器接收,记录第n个差错报文接收时刻;当这一系列探测报文中生存时间为n+1的报文到达为所述IP地址,所以不产生ICMP差错报文。从而服务器知晓该第n个路由器为该IP地址的上一跳路由器,从而将该第n个差错报文接收时刻记录为接收到所述IP地址的上一跳路由器向服务器发送的ICMP差错报文的时刻。也即是说,在步骤302处,记录接收到所述IP地址的上一跳路由器向服务器发送的ICMP差错报文的时刻,例如,将该时刻定义为第四时刻。
然后在步骤303处,将一系列探测报文中与所述ICMP差错报文相对应的那个探测报文的发送时刻记录为第三时刻。具体而言,可以查找到与该ICMP差错报文相应的探测报文,从而知晓该相应的那个探测报文的发送时刻,并将该探测报文的发送时刻定义为第三时刻。
然后,在步骤304处,将接收到来自所述IP地址的上一跳路由器的ICMP差错报文的时刻与所述一系列探测报文中的、与该ICMP差错报文相对应的那个探测报文的发送时刻之间的时间差确定服务器与所述IP地址的上一跳路由器之间的第二网络延时。
也即是说,将第四时刻与第三时刻的时间差确定为第二网络延时。
下面,返回图1,在确定了第一网络延时和第二网络延时之后,在步骤103处,判断第一网络延时与第二网络延时之比是否大于阈值。
正常情况下,如果终端没有采用代理IP地址而在网络上利用终端的用户IP地址直接连接服务器的情况下,终端和服务端之间的第一网络延时T1和的该用户IP地址(终端IP地址)的上一跳路由器R1与服务器之间的第二网络延时T2数值近似。从而T1与T2之比近似为1。
但是如果用户使用任何一种代理服务器,则服务器一端所探测到的所谓“用户IP地址”的都是代理服务器的代理IP地址。从而确定的第二网络延时是服务器与该所谓的“用户IP地址”(实际上为代理服务器的代理IP地址)的上一跳路由器之间的网络延时T2’。T2’和T1之间的差异较大,从而T1与T2’之比通常大于一个阈值,例如,将该阈值设置为2。应该理解,可以根据实际需要设置适当的阈值。
在步骤104处,如果第一网络延时与第二网络延时之比大于阈值,则将所述IP地址识别为代理IP地址。
也即是说,如果第一网络延时与第二网络延时之比大于阈值,则由于二者差异较大,所以可以判断该IP地址应该不是终端的IP地址,终端使用了代理服务器的代理IP地址接入该服务器,因此将所述IP地址识别为代理IP地址。可选地,在本申请中,代理服务器可以是VPN代理服务器,所述代理IP地址可以是VPN代理IP地址。
在步骤105处,如果第一网络延时与第二网络延时之比小于等于阈值,则将所述IP地址识别为非代理IP地址。
也即是说,如果第一网络延时与第二网络延时之比小于等于阈值,则由于二者差异不大,所以可以判断该IP地址应该是终端的IP地址,终端没有使用代理IP地址接入该服务器,因此将所述IP地址识别为非代理IP地址。
为了更清楚地描述本申请实施例的技术方案,下面将参考图4a和图4b进行更详细的说明。
例如,如图4a所示,例如位于某地A的终端用户(第一终端)发出SYN报文,该SYN报文例如经由该终端用户的例如小区接入路由器R1,然后经过例如某地A的骨干网出口——路由器R2,经过例如某地B的骨干网出口——路由器R3,最后到达服务器,被服务器接收到该SYN报文。也即是说,服务器接收到来自以第一IP地址为用户IP地址试图与服务器建立TCP连接的第一终端的SYN报文。服务器向该第一终端发送SYN-ACK报文,并记录下向第一终端发送SYN-ACK报文的第一时刻Time1。接下来,服务器接收到来自该第一终端的ACK报文,服务器记录下接收到来自该第一终端的ACK报文的第二时刻Time2。从而确定第一网络延时为T1=Time2-Time1。从图4a可以看出,网络延时T1包含了服务器与路由器R3之间的延时、路由器R3与R2之间的延时、路由器R2与R1之间的延时、路由器R1与第一终端之间的延时。
另外,服务器例如可以构建并发送255个生存时间ttl为1-255、目标IP地址为该第一IP地址的一系列探测报文,从而服务器可以记录下这一系列探测报文中每个探测报文的发送时刻;并且如上所述,服务器还可以记录接收到该第一IP地址(第一终端的IP地址)的上一跳路由器发送的ICMP差错报文的第四时刻Time4。并且,基于该ICMP差错报文,还可以找到其相应的探测报文,从而知晓该相应的那个探测报文的发送时刻,也即是说,例如将一系列探测报文中与所述ICMP差错报文相对应的那个探测报文的发送时刻定义为第三时刻Time3。从而确定第二网络延时为T2=Time4-Time3。从图4a可以看出,网络延时T2包含了服务器与路由器R3之间的延时、路由器R3与R2之间的延时、路由器R2与R1之间的延时。也即是说T1与T2之间的差别仅仅是路由器与第一终端之间的延时,差别较小。
从图中可以看出,由于第一IP地址为第一终端的真实地址,所以确定得到的T1与T2的数值相近,从而T1与T2之比没有大于阈值,从而可以确定该第一IP地址不是代理IP地址。通过本申请的技术方案,可以看出,识别结果与实际结果相符。
同样,如图4b所示,如果第一终端以代理接入一服务器,则位于某地A的终端用户(第一终端)发出SYN报文,该SYN报文经由该终端用户的例如小区接入路由器R1,然后经过例如某地A的骨干网出口——路由器R2,经过例如某地B的骨干网出口——路由器R3,经过代理,经由该代理的例如小区接入路由器R4,再经过例如某地C的骨干网出口——路由器R5,经过例如某地D的骨干网出口——路由器R6,最终到达服务器,被服务器接收到该SYN报文。也即是说,服务器接收到以第二IP地址(代理IP地址)为用户IP地址试图与服务器建立TCP连接的第一终端的SYN报文,服务器向该第一终端发送SYN-ACK报文,并记录下向第一终端发送SYN-ACK报文的第一时刻Time1’。接下来,服务器接收到来自该第一终端的ACK报文,服务器记录下接收到来自该第一终端的ACK报文的第二时刻Time2’。从而确定第一网络延时为T1’=Time2’-Time1’。从图4b可以看出,由于使用了代理,网络延时T1’包含了服务器与路由器R6之间的延时、路由器R6与R5之间的延时、路由器R5与R4之间的延时、路由器R4与代理之间的延时、代理与路由器R3之间的延时、路由器R3与R2之间的延时、路由器R2与R1之间的延时、路由器R1与第一终端之间的延时。
另外,服务器例如可以构建并发送255个生存时间ttl为1-255、目标IP地址为该第二IP地址的一系列探测报文,从而服务器可以记录下发送这一系列探测报文中每个探测报文的发送时刻;并且如上所述,服务器还可以记录接收到该第二IP地址(代理服务器而非第二终端的IP地址)的上一跳路由器发送的ICMP差错报文的第四时刻Time4’。并且,基于该ICMP差错报文,还可以找到其相应的探测报文,从而知晓该相应的那个探测报文的发送时刻,也即是说,例如将一系列探测报文中与所述ICMP差错报文相对应的那个探测报文的发送时刻定义为第三时刻Time3’。从而确定第二网络延时为T2’=Time4’-Time3’。从图4b可以看出,由于使用了代理,所以第二IP地址(代理IP地址)的上一跳路由器不再是路由器R1而是变成了路由器R4,因此网络延时T2’包含了服务器与路由器R6之间的延时、路由器R6与R5之间的延时、路由器R5与R4之间的延时。也即是说T1’与T2’之间的差别是路由器R4与代理之间的延时、代理与路由器R3之间的延时、路由器R3与R2之间的延时、路由器R2与R1之间的延时、路由器R1与第一终端之间的延时,差别很大。
从图4b中可以看出,由于第二IP地址不是第一终端的真实地址,第一网络延时T1’远大于T2’。从而T1’与T2’之比大于阈值,从而可以确定该第二IP地址是代理IP地址而非第一终端的IP地址。通过本申请的技术方案,可以看出,识别结果与实际结果相符。
上面通过图1至图4b描述了根据本申请实施例的识别代理IP地址的方法。
本申请还提供了一种识别代理IP地址的装置。
图5示意性地示出了根据本申请一个实施例的识别代理IP地址的装置的结构框图。根据本申请的一个实施例,该装置500可以包括:第一确定模块501、第二确定模块502、判断模块503以及识别模块504。
根据本申请的实施例,第一确定模块501可以用于确定服务器与以一IP地址为用户IP地址与服务器建立TCP连接的终端之间的第一网络延时。
第二确定模块502可以用于确定服务器与所述IP地址的上一跳路由器之间的第二网络延时。
判断模块503可以用于判断第一网络延时与第二网络延时之比是否大于阈值。
识别模块504可以用于如果第一网络延时与第二网络延时之比大于阈值,则将所述IP地址识别为代理IP地址。
此外,识别模块504可以用于如果第一网络延时与第二网络延时之比小于或等于阈值,则将所述IP地址识别为非代理IP地址。
根据本申请的实施例,第一确定模块501可以进一步被配置成:将向所述终端发送SYN-ACK报文的时刻与接收到来自所述终端的ACK报文的时刻之间的时间差确定为第一网络延时。
具体而言,所述第一确定模块501可以进一步包括:第一记录子模块,其可以用于记录向所述终端发送SYN-ACK报文的第一时刻;第二记录子模块,其可以用于记录接收到来自所述终端的ACK报文的第二时刻;以及第一确定子模块,其可以用于将第二时刻与第一时刻的时间差确定为第一网络延时。
根据本申请的实施例,第二确定模块502可以进一步被配置成:将接收到来自所述IP地址的上一跳路由器的ICMP差错报文的时刻与一系列探测报文中与所述ICMP差错报文相对应的那个探测报文的发送时刻之间的时间差确定服务器与所述IP地址的上一跳路由器之间的第二网络延时,其中,所述一系列探测报文具有递增生存时间,并且其目标地址为所述用户IP地址。
具体而言,所述第二确定模块可以进一步包括:第三记录子模块,其可以用于记录所述一系列报文中的每个探测报文的发送时刻;第四记录子模块,其可以用于记录接收到来自所述IP地址的上一跳路由器的ICMP差错报文的第四时刻;第一定义子模块,用于将一系列探测报文中与所述ICMP差错报文相对应的那个探测报文的发送时刻定义为第三时刻;第二确定子模块,其可以用于将第四时刻与第三时刻的时间差确定为第二网络延时。
由于本实施例的装置所实现的功能基本相应于前述图1至图4b所示的方法实施例,故本实施例的描述中未详尽之处,可以参见前述实施例中的相关说明,在此不做赘述。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
以上所述仅为本申请的实施例而已,并不用于限制本申请,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。