CN115297165B - 代理装置及数据处理方法 - Google Patents
代理装置及数据处理方法 Download PDFInfo
- Publication number
- CN115297165B CN115297165B CN202211199151.5A CN202211199151A CN115297165B CN 115297165 B CN115297165 B CN 115297165B CN 202211199151 A CN202211199151 A CN 202211199151A CN 115297165 B CN115297165 B CN 115297165B
- Authority
- CN
- China
- Prior art keywords
- sub
- tcp connection
- tcp
- state
- proxy device
- 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
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/14—Session management
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/14—Session management
- H04L67/141—Setup of application sessions
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/16—Implementation or adaptation of Internet protocol [IP], of transmission control protocol [TCP] or of user datagram protocol [UDP]
- H04L69/163—In-band adaptation of TCP data exchange; In-band control procedures
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer Security & Cryptography (AREA)
- Computer And Data Communications (AREA)
Abstract
本申请提供一种代理装置,代理装置包括第一状态、第二状态以及第三状态;当代理装置处于第一状态时,客户端与服务器建立TCP连接进行通讯;当代理装置处于第二状态时,将客户端与服务器之间的TCP连接分离为两个子TCP连接;当代理装置处于第三状态时,代理装置接收客户端和服务器中任一方发送的SYN号和/或ACK号,对SYN号和/或ACK号进行修改并发送至另一方,将第一子TCP连接和第二子TCP连接恢复成客户端和服务器之间的TCP连接。本申请提供的代理装置,可以在第一状态和第二状态之间任意切换,也可以从第二状态转换回第一状态,或转换到第三状态。
Description
技术领域
本发明涉及计算机技术领域,特别涉及一种代理装置及数据处理方法。
背景技术
透明代理是实现截获终端发送原始数据并转发至各个服务器的关键桥梁,TCP粘合技术是实现透明代理的关键技术,使用TCP底层链路管理与数据交换技术,使客户端和服务器在感知不到其存在的情况下建立通信链路。
在传统的代理装置中,其代理方法主要有以下几种形式:
1.客户端指定代理服务器,以客户端有感知的方式进行代理;
2. 通过反向代理,将客户端请求重定向到实际服务器;
3.通过目标地址转换,将客户端请求导向代理主机,然后代理主机连接服务器,完成代理;
4. 在第3种方法的基础上,进一步将代理主机发往服务器的数据流中代理主机的地址和端口修改为客户端的地址和端口,实现对客户端及服务器端透明的代理。
对于以上代理方法,在进行代理时,通常需要根据目标IP,端口等信息,预先配置哪些TCP连接需要代理,并且需要在TCP通讯刚开始建立时,就采用代理的模式对通讯进行处理,这导致了代理的使用并不灵活,难以适应更多的应用场景。
发明内容
针对以上缺陷,本发明提出了一种代理装置,用于解决现有技术的中存在的代理的使用并不灵活的问题。
本申请提供一种代理装置,所述代理装置部署在客户端与服务器的通讯链路之间,所述代理装置包括第一状态、第二状态以及第三状态;
当所述代理装置处于第一状态时,所述客户端与所述服务器建立TCP连接,所述代理装置转发所述客户端和所述服务器之间的通讯数据流;
当所述代理装置处于第二状态时,所述代理装置将所述客户端与所述服务器之间的TCP连接分离为两个子TCP连接,其中,所述客户端与所述代理装置通过第一子TCP连接进行TCP通讯,所述代理装置与所述服务器通过第二子TCP连接进行TCP通讯,所述代理装置在两个子TCP连接之间进行数据转发;
所述代理装置由第二状态转换成第一状态时,将第一子TCP连接与第二子TCP连接进行合并,恢复成所述客户端与所述服务器之间的TCP连接;
当所述代理装置由第二状态转换为第一状态失败时,所述代理装置进入所述第三状态,当所述代理装置处于所述第三状态时,所述代理装置接收所述客户端和所述服务器中任一方发送的SYN号和/或ACK号,对所述SYN号和/或ACK号进行修改并发送至另一方,以维护所述客户端和所述服务器之间的TCP连接。
进一步的,当所述代理装置检测到所述通讯数据流符合预设启用代理条件时,所述代理装置由第一状态转换为第二状态。
进一步的,当所述代理装置处于由第一状态转变为第二状态时,所述代理装置截取并记录所述客户端向所述服务器发送的TCP数据流,所述TCP数据流包括以下信息:二层数据帧头部包含的信息、三层数据流头部包含的信息、所述客户端及所述服务器的通讯端口号,以及其余位于TCP头内的与TCP传输相关的信息;
所述第一子TCP连接和所述第二子TCP连接的帧头部包含的信息、三层数据流头部包含的信息,以及通讯端口号信息,分别与所述客户端向所述服务器发送的TCP数据流中的二层数据帧头部包含的信息、三层数据流头部包含的信息、通讯端口号保持一致。
进一步的,当所述代理装置处于第二状态时,所述代理装置从与所述客户端和服务器中任一方的TCP通讯中获取所述TCP通讯所包含的数据,所述代理装置按预设条件判断是否需要对数据进行检查和/或修改,并将经过检查和/或修改后的数据封装并发送至另一方。
进一步的,将所述客户端至所述代理装置以及代理装置至所述服务器作为第一方向,将所述服务器至所述代理装置以及所述代理装置至所述客户端作为第二方向;
当所述代理装置处于由第二状态时,在所述第一方向和/或所述第二方向上,所述代理装置调整所述第一子TCP连接中的SYN号和/或第二子TCP连接中的SYN号,以使在所述第一方向和所述第二方向上,所述第一子TCP连接中的SYN号和第二子TCP连接中的SYN号保持一致。
进一步的,当所述代理装置由第二状态转变为第一状态时,在所述第一方向或所述第二方向上,若所述代理装置无法将所述第一子TCP连接中的SYN号和第二子TCP连接中的SYN号调整一致,则所述代理装置由第二状态转变为第一状态失败,此时所述代理装置进入所述第三状态;
当所述代理装置处于第三状态时,根据在第一方向上第一子TCP连接和第二子TCP连接中的SYN号的差值,以及在第二方向上第一子TCP连接和第二子TCP连接中的SYN号的差值,对TCP数据流的SYN号,ACK号以及TCP校验和进行修改和转发,以使在第一方向和第二方向上,所述代理装置发送的SYN号,ACK号以及TCP校验和均满足所述客户端与所述服务器维持TCP连接的要求。
进一步的,所述代理装置在不改变数据意义的情况下,修改发送数据的字节数来调整所述第一TCP连接中的SYN号和/或第二TCP连接中的SYN号。
本申请还提供一种数据处理方法,所述方法包括以下步骤:
客户端与服务器建立TCP连接;
当启用代理时,将所述客户端与所述服务器之间的TCP连接分离为两个子TCP连接,其中,所述客户端与代理装置通过第一子TCP连接进行TCP通讯,所述代理装置与所述服务器通过第二子TCP连接进行TCP通讯,所述代理装置在两个子TCP连接之间进行数据转发;
当关闭代理时,将第一子TCP连接与第二子TCP连接进行合并,以恢复所述客户端与所述服务器之间的TCP连接,若恢复失败,则接收所述客户端和所述服务器中任一方发送的SYN号和/或ACK号,对所述SYN号和/或ACK号进行修改并发送至另一方,以维护所述客户端和所述服务器之间的TCP连接。
进一步的,所述方法还包括:
保持代理启用状态时,调整所述第一子TCP连接中的SYN号和/或第二子TCP连接中的SYN号,以使在所述第一方向和/或所述第二方向上,所述第一子TCP连接中的SYN号和第二子TCP连接中的SYN号保持一致;
其中,将所述客户端至所述代理装置以及代理装置至所述服务器作为第一方向,将所述服务器至所述代理装置以及所述代理装置至所述客户端作为第二方向。
进一步的,当关闭代理时,在所述第一方向或所述第二方向上,若无法将所述第一子TCP连接中的SYN号和第二子TCP连接中的SYN号调整一致,则根据在第一方向上第一子TCP连接和第二子TCP连接中的SYN号的差值,以及在第二方向上第一子TCP连接和第二子TCP连接中的SYN号的差值,对TCP数据流的SYN号,ACK号以及TCP校验和进行修改和转发,以使在第一方向和第二方向上,所述代理装置发送的SYN号,ACK号以及TCP校验和均满足所述客户端与所述服务器维持TCP连接的要求。
本申请提供一种代理装置,可以在第一状态和第二状态之间任意切换,并且,在代理装置由第二状态转换为第一状态失败时提供第三状态,从而可以在客户端与服务器已经建立TCP连接的情况下加入代理,也可以在启用代理后关闭代理功能而不影响客户端与服务器之间的数据传输。使得对代理的使用更加灵活,以适应更多的应用场景。
附图说明
图1为本申请一个实施例提供的代理装置部署的示意图;
图2为本申请一个实施例提供的代理装置处于第一状态时代理装置分别与客户端、服务器之间的连接关系示意图;
图3为本申请一个实施例提供的代理装置处于第二状态时代理装置分别与客户端、服务器之间的连接关系示意图;
图4为本申请一个实施例提供的代理装置在第二状态时的工作示意图;
图5为本申请一个实施例提供的代理装置在第三状态时的工作示意图;
图6为本申请一个实施例提供的数据处理方法流程图。
具体实施方式
以下将结合附图所示的具体实施方式对本发明进行详细描述,但这些实施方式并不限制本发明,本领域的普通技术人员根据这些实施方式所做出的结构、方法、或功能上的变换均包含在本发明的保护范围内。
如图1所示,其示出了本申请一个实施例提供的代理装置部署的示意图。作为一种可选的实现方式,在本申请实施例中,代理装置部署在客户端和服务器的通讯链路之间。本申请实施例提供的代理装置包括第一状态和第二状态。
其中,当所述代理装置处于第一状态时,客户端与服务器建立TCP连接,所述代理装置转发所述客户端和所述服务器之间的通讯数据流;
当所述代理装置处于第二状态时,所述代理装置将所述客户端与所述服务器之间的TCP连接分离为两个子TCP连接,其中,所述客户端与所述代理装置通过第一子TCP连接进行TCP通讯,所述代理装置与所述服务器通过第二子TCP连接进行TCP通讯,所述代理装置在两个子TCP连接之间进行数据转发;
所述代理装置可以由第二状态转换成第一状态。当代理装置由第二状态转换为第一状态时,将第一子TCP连接与第二子TCP连接进行合并,恢复成所述客户端与所述服务器之间的TCP连接。
当所述代理装置由第二状态转换为第一状态失败时,所述代理装置进入所述第三状态,当所述代理装置处于所述第三状态时,所述代理装置接收所述客户端和所述服务器中任一方发送的SYN号和/或ACK号,对所述SYN号和/或ACK号进行修改并发送至另一方,以维护所述客户端和所述服务器之间的TCP连接。
与传统的代理装置相比,本申请实施例提供的代理装置具有第一状态、第二状态以及第三状态。作为一种可选的实现方式,第一状态可以理解为客户端与服务器之间未启用代理的状态,第二状态可以理解为在客户端和服务器之间启用代理的状态。对于第三状态,为本申请第二状态向第一状态转换失败时所进入的状态。
作为一种可选的实现方式,本申请实施例提供的代理装置可以在第一状态和第二状态之间切换。需要说明的是,在传统的代理装置中,其代理方法主要有以下几种形式:
1.客户端指定代理服务器,以客户端有感知的方式进行代理;
2. 通过反向代理,将客户端请求重定向到实际服务器;
3.通过目标地址转换,将客户端请求导向代理主机,然后代理主机连接服务器,完成代理;
4. 在第3种方法的基础上,进一步将代理主机发往服务器的数据流中代理主机的地址和端口修改为客户端的地址和端口,实现对客户端及服务器端透明的代理。
值得注意的是,在上述几种传统的代理方法中,通常需要根据目标IP,端口等信息,预先配置哪些TCP连接需要代理,并且,需要在TCP通讯刚开始建立时,就采用代理的模式对通讯进行处理。这意味着对于传统的代理装置,一旦客户端与服务器已经建立TCP连接,则此时就无法再加入代理,又或者一旦客户端与服务器之间已经启用了代理,则此时若将代理关闭则会导致客户端与服务器之间断开TCP连接。即,对于传统的代理装置,其无法随意的进行状态切换,这在某些应用场景下会存在不便。
而对于本申请实施例提供的代理装置,其第一状态和第二状态之间可以进行随意切换,即,在客户端与服务器已经建立TCP连接,可以将代理装置由第一状态切换为第二状态,以在客户端与服务器的通讯链路之间加入代理。又或者,可以将代理装置由第二状态切换为第一装置以关闭代理,而不会影响客户端与服务器之间的连接。代理装置的第一状态与第二状态任意切换,以适应不同场景的需求。
如图2所示,其示出了本申请实施例提供的代理装置处于第一状态时代理装置分别与客户端、服务器之间的连接关系示意图。作为一种可选的实现方式,当所述代理装置处于第一状态时,所述客户端与所述服务器端建立TCP连接,当所述代理装置检测到所述通讯数据流符合预设启用代理条件时,所述代理装置由第一状态转换为第二状态。具体的,通讯数据流可以是TCP数据流,代理装置可以对TCP数据流的数据流特征以及TCP通讯数据流的具体内内容进行解析,以决定是否需要启用代理,以及在何时开始启用代理。
作为一种可选的实现方式,预设启用代理条件可以根据实际需求进行设计。例如,预设启用代理条件可以被设计为:对于符合HTTP协议的,启用中间人代理。则代理装置可以对所有的TCP数据流进行分析,当发现TCP客户端在建立连接后发送了一个以GET/POST 开头具有典型的HTTP协议特征的数据时,开始启动代理(即,将代理装置由第一状态转换为第二状态)。如果未发现HTTP协议特征,则不启用代理,直接转发后续的所有数据。
作为一种可选的实现方式,当所述代理装置处于由第一状态转变为第二状态时,所述代理装置截取并记录所述客户端向所述服务器发送的TCP数据流,所述TCP数据流包括以下信息中的一种或多种:二层数据帧头部包含的信息、三层数据流头部包含的信息、所述客户端及所述服务器的通讯端口号,以及其余位于TCP头内的与TCP传输相关的信息;
所述第一子TCP连接和所述第二子TCP连接的帧头部包含的信息、三层数据流头部包含的信息,以及通讯端口号信息,分别与所述客户端向所述服务器发送的TCP数据流中的二层数据帧头部包含的信息、三层数据流头部包含的信息、通讯端口号保持一致。
为了便于说明,在本申请实施例中,将所述客户端至所述代理装置以及代理装置至所述服务器作为第一方向,将所述服务器至所述代理装置以及所述代理装置至所述客户端作为第二方向。
根据以上说明,在本申请实施例中,在代理装置处于第二状态下,此时代理装置不再直接转发数据流,可以由代理装置中的代理程序接管原先客户端与服务器之间的TCP流相关的后续通讯。
如图3所示,其示出了本申请实施例提供的代理装置处于第二状态时代理装置分别与客户端、服务器之间的连接关系示意图。在代理装置处于第二状态下,可以视为将代理装置伪装成服务器,以使原有的客户端与服务器之间的TCP连接分离为两个子TCP连接。如,继续使用原有TCP连接中的客户端至代理部分与客户端完成后续通讯,继续使用原有TCP连接中的代理至服务器部分与服务器完成后续通讯,至此,原有的TCP连接被分离为两个子TCP连接,代理装置在两个子TCP连接之间进行数据转发。在代理装置由第一状态转换到第二状态时,在第一方向和第二方向上的SYN值相同,即J=M,K=N。
作为一种可选的实现方式,当所述代理装置处于第二状态时,所述代理装置从与所述客户端和服务器中任一方的TCP通讯中获取所述TCP通讯所包含的数据,所述代理装置按预设条件判断是否需要对数据进行检查和/或修改,并将经过检查和/或修改后的数据封装并发送至另一方。
在本申请实施例中,代理装置可以根据实际需求对数据进行修改,例如,在进行数据传输时修改传输密钥。然而,对数据进行修改可能会引起SYN号的改变,这就导致了当代理装置由第二状态转换为第一状态时,若在第一方向或第二方向上,客户端与代理装置之间的SYN号与代理装置与服务器之间的SYN号不同,则会导致客户端与服务器之间无法继续维护连接,这意味着代理装置由第二状态转换为第一状态失败。
例如,在第一方向上,客户端发送至代理装置的SYN号与代理装置发送至服务器的SYN号不同,则会导致客户端与服务器之间无法继续维护连接。类似的,在第二方向上也是如此。
如图4所示,其示出了本申请实施例提供的代理装置在第二状态时的工作示意图。在所述第一方向和/或所述第二方向上,所述代理装置可以通过在不改变数据意义的情况下修改数据长度,以调整所述第一子TCP连接中的SYN号和/或第二子TCP连接中的SYN号,以使在所述第一方向和/或所述第二方向上,所述第一子TCP连接中的SYN号和第二子TCP连接中的SYN号保持一致。
具体的,例如在第一方向上,要保证客户端至所述代理装置以及代理装置至所述服务器的SYN号保持一致,则可以通过在应用数据中增加或是减少无意义的数据来调整SYN号。
根据以上说明,本申请提供的代理装置在处于第二状态时,关注两个子TCP连接中的SYN号,代理装置在对数据进行修改时,会尽可能不改变数据通过代理之后的总长度,从而尽量将第一方向或第二方向上,使第一子TCP连接中的SYN号和第二子TCP连接中的SYN号保持一致,以便于后续停止代理时,代理装置由第二状态转换为第一状态。
如图4所示,作为一种可选的实现方式,当所述代理装置处于由第二状态时,第一子TCP连接中的SYN号和/或第二子TCP连接中的SYN号为相同值,在关闭代理,代理装置由第二状态转换为第一状态时,客户端与服务器之间仍然可以保持连接。
如图4中,经过代理装置调整后,代理装置所发送的SYN在第一方向和第二方向上,分别与另一个子TCP连接保持一致,即,经过代理装置调整后,M等于J,N等于K。
作为一种可选的实现方式,所述代理装置通过在不改变数据意义的情况下修改发送数据的字节数来调整所述第一子TCP连接中的SYN号和/或第二子TCP连接中的SYN号。例如,代理装置可以去除客户端发往服务器的json对象中无意义的回车字符从而减小发送的字节数(相对减小SYN号),或是增加无意义的空格字符增加发送的字节数(相对增加SYN号),以使第一子TCP连接中的SYN号和第二子TCP连接中的SYN号保持一致。
作为一种可选的实现方式,在本申请实施例提供的代理装置处于第二状态时,代理装置将尽可能调整所述第一子TCP连接中的SYN号和/或第二子TCP连接中的SYN号,以使在所述第一方向和所述第二方向上,所述第一子TCP连接中的SYN号和第二子TCP连接中的SYN号保持一致。即,在代理装置处于第二状态时,在第一方向和第二方向上,经过代理装置调整后的两个子TCP连接中的SYN号可以允许有一定程度的偏差,当代理装置需要从第二状态转换为第一状态时,代理装置会再调整所述第一子TCP连接中的SYN号和/或第二子TCP连接中的SYN号,以使在所述第一方向和所述第二方向上,所述第一子TCP连接中的SYN号和第二子TCP连接中的SYN号保持一致,通过这一方式同样能够实现在代理过程中关闭代理而继续保持通讯的功能。
作为一种可选的实现方式,本申请实施例提供的代理装置还包括第三状态。
当所述代理装置由第二状态转变为第一状态时,在所述第一方向或所述第二方向上,若所述代理装置无法将所述第一子TCP连接中的SYN号和第二子TCP连接中的SYN号调整一致,则所述代理装置由第二状态转变为第一状态失败,此时所述代理装置进入所述第三状态;
如图5所示,当所述代理装置处于第三状态时,根据在第一方向上第一子TCP连接和第二子TCP连接中的SYN号的差值,以及在第二方向上第一子TCP连接和第二子TCP连接中的SYN号的差值,对TCP数据流的SYN号,ACK号以及TCP校验和进行修改和转发,以使在第一方向和第二方向上,所述代理装置发送的SYN号,ACK号以及TCP校验和均满足所述客户端与所述服务器维持TCP连接的要求。
具体的,当代理装置无法将第一子TCP连接中的SYN号和第二子TCP连接中的SYN号调整一致时,在第一方向上,可以记录客户端至代理装置与代理装置至服务器的SYN号之差,根据记录的SYN号之差修改客户端至服务器的SYN号,以及修改服务器至客户端的ACK号,并修改TCP校验和。图5中Δ表示客户端至代理装置与代理装置至服务器的SYN号之差。
例如,Δ=-1000,客户端发送至服务器的SYN号为 3024。则,客户端 SYN 3024 -->代理(把所有该方向的SYN+1000) - SYN 4024 -->服务器,客户端 ACK 3025 <-- 代理(把所有该方向的ACK-1000) - ACK 4025 <-- 服务器。采用这种方式可将该TCP连接恢复成非代理状态。同理,可以在第二方向上对SYN号、ACK号进行修改。
按照TCP校验和的计算方法,根据代理装置修改后SYN号和ACK号,计算出修改SYN号和ACK号后的TCP校验和,并根据计算出的TCP校验和对原TCP校验和进行修改。
如图6所示,其示出了本申请实施例提供的数据处理方法流程图。本申请还提供一种数据处理方法,所述方法包括以下步骤:
客户端与服务器建立TCP连接;
当启用代理时,将所述客户端与所述服务器之间的TCP连接分离为两个子TCP连接,其中,所述客户端与代理装置通过第一子TCP连接进行TCP通讯,所述代理装置与所述服务器通过第二子TCP连接进行TCP通讯,所述代理装置在两个子TCP连接之间进行数据转发;
当关闭代理时,将第一子TCP连接与第二子TCP连接进行合并,以恢复所述客户端与所述服务器之间的TCP连接,若恢复失败,则接收所述客户端和所述服务器中任一方发送的SYN号和/或ACK号,对所述SYN号和/或ACK号进行修改并发送至另一方,以维护所述客户端与所述服务器之间的TCP连接。
作为一种可选的实现方式,
保持代理启用状态时,调整所述第一子TCP连接中的SYN号和/或第二子TCP连接中的SYN号,以使在所述第一方向和/或所述第二方向上,所述第一子TCP连接中的SYN号和第二子TCP连接中的SYN号保持一致;
其中,将所述客户端至所述代理装置以及代理装置至所述服务器作为第一方向,将所述服务器至所述代理装置以及所述代理装置至所述客户端作为第二方向。
作为一种可选的实现方式,当关闭代理时,在所述第一方向或所述第二方向上,若无法将所述第一子TCP连接中的SYN号和第二子TCP连接中的SYN号调整一致,则根据在第一方向上第一子TCP连接和第二子TCP连接中的SYN号的差值,以及在第二方向上第一子TCP连接和第二子TCP连接中的SYN号的差值,对TCP数据流的SYN号,ACK号以及TCP校验和进行修改和转发,以使在第一方向和第二方向上,所述代理装置发送的SYN号,ACK号以及TCP校验和均满足所述客户端与所述服务器维持TCP连接的要求。
为了进一步说明本申请实施例提供的代理装置的优点,以下结合具体应用场景进行说明。
例如,在如下应用场景中:需代理客户端A连接到服务器B的基于TCP协议的SSH连接。
在上述应用场景中,对于传统的TCP透明代理应用,通常需要指定需要代理的TCP端口号,根据端口号决定是否需要代理。具体的,可以是当代理设备观察到客户端A向服务器发起TCP端口22的SYN连接请求时,将该连接请求由代理设备接管,然后由代理设备发起一个新的TCP连接请求通向服务器B。在该模式中,代理设备通常需要预先配置需代理的端口号信息(本例中为TCP端口22)。如果服务器B上还有一个SSH服务使用了其他端口(例如2022端口),由于该端口并未在代理设备上预先配置,代理程序将不会启动。
而对于本申请实施例提供的代理装置,由于本申请提供的代理装置可以在第一状态和第二状态之间任意切换,这意味这本申请提供的代理装置可以在TCP通讯的过程中启用TCP代理的方法。在如上所述的应用场景中,无论是客户端A连接到服务器B上的哪一个SSH端口,代理设备在通讯初期并不对该连接进行修改,只转发并检查数据流。当代理设备观测到从服务器B返回的,由SSH2.0字符串开头的数据流时,代理设备可识别出该TCP流为一个SSH协议的通讯数据流,然后代理设备可以在这个已经建立的TCP连接之上,启用代理功能。
以上为本申请实施例提供的代理装置可以适用的由第一状态转换为第二状态的应用场景,下面,提供另一具体应用场景以对代理装置由第二状态转换为第一状态的情况进行说明。
例如,在如下应用场景中:
当通过FTP协议的数据通道传输文件时,代理装置需要对文件的前100M进行防病毒检查,那么在以代理的方式处理完前100M数据之后,由于数据传输的字节数并未发生修改,通讯双方的SYN号依然保持一致,可关闭代理功能,将该TCP数据流恢复到包转发的状态。
例如,在另一应用场景中,在对WebSocket协议进行代理时,假定在最初的请求中,对websocket请求的cookie进行了修改,导致了客户端发往服务器的字节数发生了增加或是减少,SYN号发生了变化。在这之后,代理可以去除客户端发往服务器的json对象中无意义的回车字符从而减小发送的字节数(相对减小SYN号),或是增加无意义的空格字符增加发送的字节数(相对增加SYN号),当客户端发往服务器的SYN号在经过代理前后保持一致时,可直接将该代理连接恢复成无代理状态。
如无法将TCP的SYN号调整一致,可记录客户端至代理,及代理至服务器的SYN号之差(反之亦然)。在后续的数据流通过代理时,根据记录的SYN号之差修改所有客户端至服务器的TCP数据段中的SYN号,以及服务器至客户端TCP数据段中的ACK号(并修改checksun值,校验和)。采用这种方式也可将该TCP连接恢复成非代理状态。
根据以上说明,本申请提供一种代理装置,可以在第一状态和第二状态之间任意切换,并且,在代理装置由第二状态转换为第一状态失败时提供第三状态,从而可以在客户端与服务器已经建立TCP连接的情况下加入代理,也可以在启用代理后关闭代理功能而不影响客户端与服务器之间的数据传输。使得对代理的使用更加灵活,以适应更多的应用场景。
以上所揭露的仅为本发明的较佳实施例而已,然其并非用以限定本发明之权利范围,本领域普通技术人员可以理解:在不脱离本发明及所附的权利要求的精神和范围内,改变、修饰、替代、组合、简化,均应为等效的置换方式,仍属于发明所涵盖的范围。
Claims (10)
1.一种代理装置,其特征在于,
所述代理装置部署在客户端与服务器的通讯链路之间,所述代理装置包括第一状态、第二状态以及第三状态;
当所述代理装置处于第一状态时,所述客户端与所述服务器建立TCP连接,所述代理装置转发所述客户端和所述服务器之间的通讯数据流;
当所述代理装置处于第二状态时,所述代理装置将所述客户端与所述服务器之间的TCP连接分离为两个子TCP连接,其中,所述客户端与所述代理装置通过第一子TCP连接进行TCP通讯,所述代理装置与所述服务器通过第二子TCP连接进行TCP通讯,所述代理装置在两个子TCP连接之间进行数据转发;
所述代理装置由第二状态转换成第一状态时,将第一子TCP连接与第二子TCP连接进行合并,恢复成所述客户端与所述服务器之间的TCP连接;
当所述代理装置由第二状态转换为第一状态失败时,所述代理装置进入所述第三状态,当所述代理装置处于所述第三状态时,所述代理装置接收所述客户端和所述服务器中任一方发送的SYN号和/或ACK号,对所述SYN号和/或ACK号进行修改并发送至另一方,以维护所述客户端和所述服务器之间的TCP连接。
2.根据权利要求1所述的装置,其特征在于,当所述代理装置检测到所述通讯数据流符合预设启用代理条件时,所述代理装置由第一状态转换为第二状态。
3.根据权利要求2所述的装置,其特征在于,当所述代理装置处于由第一状态转变为第二状态时,所述代理装置截取并记录所述客户端向所述服务器发送的TCP数据流,所述TCP数据流包括以下信息:二层数据帧头部包含的信息、三层数据流头部包含的信息、所述客户端及所述服务器的通讯端口号,以及其余位于TCP头内的与TCP传输相关的信息;
所述第一子TCP连接和所述第二子TCP连接的帧头部包含的信息、三层数据流头部包含的信息,以及通讯端口号信息,分别与所述客户端向所述服务器发送的TCP数据流中的二层数据帧头部包含的信息、三层数据流头部包含的信息、通讯端口号保持一致。
4.根据权利要求3所述的装置,其特征在于,当所述代理装置处于第二状态时,所述代理装置从与所述客户端和服务器中任一方的TCP通讯中获取所述TCP通讯所包含的数据,所述代理装置按预设条件判断是否需要对数据进行检查和/或修改,并将经过检查和/或修改后的数据封装并发送至另一方。
5.根据权利要求1所述的装置,其特征在于,将所述客户端至所述代理装置以及代理装置至所述服务器作为第一方向,将所述服务器至所述代理装置以及所述代理装置至所述客户端作为第二方向;
当所述代理装置处于由第二状态时,在所述第一方向和/或所述第二方向上,所述代理装置调整所述第一子TCP连接中的SYN号和/或第二子TCP连接中的SYN号,以使在所述第一方向和所述第二方向上,所述第一子TCP连接中的SYN号和第二子TCP连接中的SYN号保持一致。
6.根据权利要求5所述的装置,其特征在于,
当所述代理装置由第二状态转变为第一状态时,在所述第一方向或所述第二方向上,若所述代理装置无法将所述第一子TCP连接中的SYN号和第二子TCP连接中的SYN号调整一致,则所述代理装置由第二状态转变为第一状态失败,此时所述代理装置进入所述第三状态;
当所述代理装置处于第三状态时,根据在第一方向上第一子TCP连接和第二子TCP连接中的SYN号的差值,以及在第二方向上第一子TCP连接和第二子TCP连接中的SYN号的差值,对TCP数据流的SYN号,ACK号以及TCP 校验和进行修改和转发,以使在第一方向和第二方向上,所述代理装置发送的SYN号,ACK号以及TCP校验和均满足所述客户端与所述服务器维持TCP连接的要求。
7.根据权利要求6所述的装置,其特征在于,所述代理装置在不改变数据意义的情况下,修改发送数据的字节数来调整所述第一子TCP连接中的SYN号和/或第二子TCP连接中的SYN号。
8.一种数据处理方法,其特征在于,所述方法包括以下步骤:
客户端与服务器建立TCP连接;
当启用代理时,将所述客户端与所述服务器之间的TCP连接分离为两个子TCP连接,其中,所述客户端与代理装置通过第一子TCP连接进行TCP通讯,所述代理装置与所述服务器通过第二子TCP连接进行TCP通讯,所述代理装置在两个子TCP连接之间进行数据转发;
当关闭代理时,将第一子TCP连接与第二子TCP连接进行合并,以恢复所述客户端与所述服务器之间的TCP连接,若恢复失败,则接收所述客户端和所述服务器中任一方发送的SYN号和/或ACK号,对所述SYN号和/或ACK号进行修改并发送至另一方,以维护所述客户端与所述服务器之间的TCP连接。
9.根据权利要求8所述的方法,其特征在于,所述方法还包括:
保持代理启用状态时,调整所述第一子TCP连接中的SYN号和/或第二子TCP连接中的SYN号,以使在第一方向和/或第二方向上,所述第一子TCP连接中的SYN号和第二子TCP连接中的SYN号保持一致;
其中,将所述客户端至所述代理装置以及代理装置至所述服务器作为第一方向,将所述服务器至所述代理装置以及所述代理装置至所述客户端作为第二方向。
10.根据权利要求9所述的方法,其特征在于,
当关闭代理时,在所述第一方向或所述第二方向上,若无法将所述第一子TCP连接中的SYN号和第二子TCP连接中的SYN号调整一致,则根据在第一方向上第一子TCP连接和第二子TCP连接中的SYN号的差值,以及在第二方向上第一子TCP连接和第二子TCP连接中的SYN号的差值,对TCP数据流的SYN号,ACK号以及TCP 校验和进行修改和转发,以使在第一方向和第二方向上,所述代理装置发送的SYN号,ACK号以及TCP校验和均满足所述客户端与所述服务器维持TCP连接的要求。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211199151.5A CN115297165B (zh) | 2022-09-29 | 2022-09-29 | 代理装置及数据处理方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211199151.5A CN115297165B (zh) | 2022-09-29 | 2022-09-29 | 代理装置及数据处理方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115297165A CN115297165A (zh) | 2022-11-04 |
CN115297165B true CN115297165B (zh) | 2023-01-06 |
Family
ID=83834377
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211199151.5A Active CN115297165B (zh) | 2022-09-29 | 2022-09-29 | 代理装置及数据处理方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115297165B (zh) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101924771A (zh) * | 2010-08-26 | 2010-12-22 | 北京天融信科技有限公司 | 一种用于加速应用代理的核心级tcp连接粘合方法 |
CN101997673A (zh) * | 2009-08-17 | 2011-03-30 | 成都市华为赛门铁克科技有限公司 | 网络代理实现方法及装置 |
CN103491065A (zh) * | 2012-06-14 | 2014-01-01 | 中兴通讯股份有限公司 | 一种透明代理及其实现方法 |
CN109088892A (zh) * | 2018-10-19 | 2018-12-25 | 网宿科技股份有限公司 | 数据传输方法、***以及代理服务器 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8806011B1 (en) * | 2014-01-06 | 2014-08-12 | Cloudflare, Inc. | Transparent bridging of transmission control protocol (TCP) connections |
CN109587275A (zh) * | 2019-01-08 | 2019-04-05 | 网宿科技股份有限公司 | 一种通信连接的建立方法及代理服务器 |
CN111431871B (zh) * | 2020-03-10 | 2022-11-25 | 杭州迪普科技股份有限公司 | Tcp半透明代理的处理方法和装置 |
CN114363351B (zh) * | 2021-12-27 | 2023-05-05 | 武汉思普崚技术有限公司 | 一种代理连接抑制方法、网络架构及代理服务器 |
-
2022
- 2022-09-29 CN CN202211199151.5A patent/CN115297165B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101997673A (zh) * | 2009-08-17 | 2011-03-30 | 成都市华为赛门铁克科技有限公司 | 网络代理实现方法及装置 |
CN101924771A (zh) * | 2010-08-26 | 2010-12-22 | 北京天融信科技有限公司 | 一种用于加速应用代理的核心级tcp连接粘合方法 |
CN103491065A (zh) * | 2012-06-14 | 2014-01-01 | 中兴通讯股份有限公司 | 一种透明代理及其实现方法 |
CN109088892A (zh) * | 2018-10-19 | 2018-12-25 | 网宿科技股份有限公司 | 数据传输方法、***以及代理服务器 |
Non-Patent Citations (1)
Title |
---|
基于Qt的一个服务器多个客户端的TCP通信;黄翩等;《电子科技》;20150331(第03期);82-84 * |
Also Published As
Publication number | Publication date |
---|---|
CN115297165A (zh) | 2022-11-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9100279B2 (en) | Method, apparatus, and system for forwarding data in communications system | |
CN106685992B (zh) | 基于单向传输技术跨网安全交换及交互式应用***及方法 | |
EP2557754B1 (en) | Method for inserting and unloading tcp proxy and service gateway device | |
JP7142722B2 (ja) | 伝送制御方法および装置 | |
WO2016009250A1 (en) | Methods and systems for transmitting data packets | |
US9088494B2 (en) | Packet fragmentation prevention | |
EP1395014B1 (en) | A method of transmitting data streams with data segments of variable length | |
CN102088460B (zh) | 受限网络中流媒体数据的传输方法、设备和*** | |
EP3089435B1 (en) | Service processing method and network device | |
US20050120140A1 (en) | Method of and system for multi-patch communication | |
IL226516A (en) | Wireless communication system system | |
US9787770B2 (en) | Communication system utilizing HTTP | |
CN102780712B (zh) | 会话的切换方法及装置 | |
CN114631297A (zh) | 用于多路径通信的方法和网络设备 | |
CN115297165B (zh) | 代理装置及数据处理方法 | |
WO2016119464A1 (zh) | 一种卫星网络环境下实现tcp传输的方法及相应的网关 | |
CN105519049B (zh) | 一种报文传输方法、装置及*** | |
CN113794752B (zh) | 一种基于quic优化mqtt的方法 | |
EP3270561A1 (en) | Method and system for providing lawful interception in a peer to peer communication | |
US8655986B2 (en) | Data path processing | |
CN105991348A (zh) | Tcp连接关闭方法及装置 | |
CN115334139B (zh) | 通信连接控制方法及装置 | |
US20230011715A1 (en) | Methods and systems for transmitting session-based packets | |
WO2017138851A1 (en) | Methods and devices for providing a secure end-to-end communication | |
CN117793114A (zh) | 一种负载均衡方法、装置、计算机可读存储介质及设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |