掌桥专利:专业的专利平台
掌桥专利
首页

一种网络代理方法、计算设备及可读存储介质

文献发布时间:2023-06-19 12:11:54


一种网络代理方法、计算设备及可读存储介质

技术领域

本发明涉及计算机领域,尤其涉及一种网络代理方法、计算设备及可读存储介质。

背景技术

随着网络的发展,代理服务器的使用越来越普遍。目前,网络代理机制主要分为两种,应用代理和系统代理。

应用代理多采用注入的方式。例如proxychains-ng,其通过注入的方式重写connect方法,这样当获取调用connect方法的文件描述符时,便可以产生一个新的套接字socket与代理服务器建立连接。然而,采用注入的方式实现应用代理会造成打开应用依赖库的不稳定,并且以这种方式设置的代理无法实时生效,需要重启应用。

系统代理则是采用检查系统设置环境变量的方式,例如shadowssr。具体地,系统设置环境变量,然后由应用通过自行使用该环境变量来使设置的系统代理生效。即,只有当系统设置了环境变量,且应用主动使用了该环境变量,设置的系统代理才能生效。显然,系统代理无法自动生效,使用起来较为复杂,并且其无法指定特定的使用进程。

为此,亟需一种新的网络代理方法以解决上述问题。

发明内容

为此,本发明提供了一种网络代理方法、计算设备及可读存储介质,以力图解决或者至少缓解上面存在的问题。

根据本发明的一个方面,提供一种网络代理方法,在计算设备中执行,计算设备包括转发模块和代理模块,该方法包括:当任一进程发送数据包时,转发模块判断计算设备中是否存在需要使用应用代理的应用和/或系统代理的应用;若存在需要使用应用代理的应用和/或系统代理的应用,则转发模块拦截数据包,并从数据包中获取进程的进程号;转发模块根据进程的进程号,获取进程需要使用的代理类型;转发模块根据进程需要使用的代理类型,将数据包转发到指定端口;代理模块监听指定端口,并在监听到数据包时,将数据包发送给代理服务器。

可选地,在根据本发明的网络代理方法中,计算设备还包括内核模块,内核模块中注册有包含应用代理标志位和系统代理标志位的代理钩子函数,转发模块判断计算设备中是否存在需要使用应用代理的应用和/或系统代理的应用的步骤,包括:转发模块根据代理钩子函数,判断计算设备中是否存在需要使用应用代理的应用和/或系统代理的应用。

可选地,在根据本发明的网络代理方法中,转发模块根据代理钩子函数,判断计算设备中是否存在需要使用应用代理的应用和/或系统代理的应用的步骤,包括:转发模块判断应用代理标志位和/或系统代理标志位是否为预设值;若应用代理标志位为预设值,则判定计算设备中存在需要使用应用代理的应用;若系统代理标志位为预设值,则判定计算设备中存在需要使用系统代理的应用;若应用代理和系统代理的标志位都为预设值,则判定计算设备中存在需要使用应用代理的应用和系统代理的应用。

可选地,在根据本发明的网络代理方法中,内核模块中存储有用于记录需要使用应用代理的进程号的第一链表和用于记录不需要使用系统代理的进程号的第二链表,转发模块根据进程的进程号,获取进程需要使用的代理类型的步骤,包括:通过将进程的进程号与第一链表和第二链表中的进程号进行比对,来获取进程需要使用的代理类型。

可选地,在根据本发明的网络代理方法中,通过将进程的进程号与第一链表和第二链表中的进程号进行比对,来获取进程需要使用的代理类型的步骤,包括:若计算设备中仅存在需要使用应用代理的应用,则通过将进程的进程号与第一链表进行比对,来获取进程需要使用的代理类型;若计算设备中仅存在需要使用系统代理的应用,则通过将进程的进程号与第二链表进行比对,来获取进程需要使用的代理类型;若计算设备中存在需要使用应用代理的应用和系统代理的应用,则将进程的进程号分别与第一链表和第二链表中的进程号进行比对,来获取进程需要使用的代理类型。

可选地,在根据本发明的网络代理方法中,将进程的进程号分别与第一链表和第二链表中的进程号进行比对,来获取进程需要使用的代理类型的步骤,包括:若计算设备中存在需要使用应用代理的应用和系统代理的应用,则将进程的进程号与第一链表中的进程号进行比对;若进程的进程号与第一链表中的某一进程号相同,则确定进程需要使用应用代理;若进程的进程号与第一链表中的任一进程号都不相同,则将进程的进程号与第二链表中的进程号进行比对;若进程的进程号与第二链表中的任一进程号都不相同,则确定进程需要使用系统代理。

可选地,在根据本发明的网络代理方法中,转发模块根据进程需要使用的代理类型,将数据包转发到指定端口的步骤,包括:若进程需要使用应用代理,则转发模块将数据包转发到应用代理对应的第一端口;若进程需要使用系统代理,则转发模块将数据包转发到系统代理对应的第二端口。

可选地,在根据本发明的网络代理方法中,代理模块在监听到数据包时,将数据包发送给代理服务器的步骤,包括:若代理模块在第一端口监听到数据包,将数据包发送给应用代理服务器;若代理模块在第二端口监听到数据包,将数据包发送给系统代理服务器。

可选地,在根据本发明的网络代理方法中,将数据包发送给应用代理服务器的步骤,包括:通过第一套接字接收数据包,并通过第二套接字将数据包发送给应用代理服务器。

可选地,在根据本发明的网络代理方法中,将数据包发送给系统代理服务器的步骤,包括:通过第三套接字接收数据包,并通过第四套接字将数据包发送给系统代理服务器。

可选地,在根据本发明的网络代理方法中,计算设备还包括监听模块,且计算设备的用户空间中存储有记录着需要使用应用代理的进程名的第一列表和记录着不需要使用系统代理的进程名的第二列表,该方法还包括:监听模块监听进程的创建信息,并在监听到进程的创建信息时,获取创建的进程的进程号;根据第一列表、第二列表、创建的进程的进程号和进程名,判断进程号是否需要使用应用代理和/或系统代理;若进程号需要使用应用代理,则将进程号添加至所述第一链表中;若进程号不需要使用系统代理,则将进程号添加至所述第二链表中。

可选地,在根据本发明的网络代理方法中,还包括:内核模块监听进程的销毁信息;若监听到进程的销毁信息,则判断销毁的进程号是否在第一链表和/或第二链表中;若销毁的进程号在第一链表和/或第二链表中,则将销毁的进程号从第一链表和/或第二链表中移除。

根据本发明的又一个方面,提供一种计算设备,包括:至少一个处理器;以及存储器,存储有程序指令,其中,程序指令被配置为适于由至少一个处理器执行,程序指令包括用于执行根据本发明的网络代理方法的指令。

根据本发明的又一个方面,提供一种存储有程序指令的可读存储介质,当程序指令被计算设备读取并执行时,使得计算设备执行根据本发明的网络代理方法。

根据本发明的网络代理方法,当任一进程发送数据包时,转发模块判断计算设备中是否存在需要使用应用代理的应用和/或系统代理的应用,若存在需要使用应用代理的应用和/或系统代理的应用,则转发模块拦截该数据包,并从此数据包中获取发送该数据包的进程号。然后,转发模块根据获取到的进程号,获取发送数据包的进程需要使用的代理类型,并根据该进程需要使用的代理类型,将数据包转发到指定端口。同时,代理模块监听指定端口,并在监听到数据包时,将数据包发送给代理服务器。可见,本发明的网络代理方法能够基于转发模块和代理模块在操作系统层面统一实现应用代理和系统代理,并且不需要依赖于环境变量等配置,同时还能实时生效,方便快捷。

附图说明

为了实现上述以及相关目的,本文结合下面的描述和附图来描述某些说明性方面,这些方面指示了可以实践本文所公开的原理的各种方式,并且所有方面及其等效方面旨在落入所要求保护的主题的范围内。通过结合附图阅读下面的详细描述,本公开的上述以及其它目的、特征和优势将变得更加明显。遍及本公开,相同的附图标记通常指代相同的部件或元素。

图1示出了根据本发明一个实施例的计算设备100的结构框图;

图2示出了根据本发明一个实施例的网络代理方法200的流程图。

具体实施方式

下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。

传统的应用代理采用的是注入的方式,会造成打开应用依赖库的不稳定,并且无法实时生效。而传统的系统代理则无法自动生效,需要应用自行使用系统代理设置的环境变量才能生效,使用起来较为复杂,并且无法对某一个应用进行特定的设置。另外,由于应用代理和系统代理的实现机制完全不同(可参见前文描述),因此目前都是基于不同的第三方软件来实现这两种代理。

针对于此,本发明提出了一种在操作系统层面统一实现应用代理和系统代理的网络代理方法。通过操作系统中的Netfilter模块(即转发模块)来获取发送数据包的进程使用的代理类型,并基于该进程使用的代理类型将数据包转发到指定的本地端口。同时,通过操作系统中的Proxy模块(即代理模块)监听指定的本地端口,并在指定的本地端口监听到数据包时,将此数据包发送给远程代理服务器以进行通信。

可见,本发明是基于操作系统自身的Netfilter模块和Proxy模块实现的网络代理,即能够在操作系统层面实现代理,这样不再需要使用第三方代理软件或者软件本身自带的代理功能来实现网络代理。并且,本发明的网络代理方法既能实现应用代理还能实现系统代理,即可以实现应用代理和系统代理的统一,从而不再需要利用不同的软件来实现这两种代理。另外,本发明的网络代理方法不依赖于环境变量等配置,能够实时生效,方便快捷。

图1示出了根据本发明一个实施例的计算设备100的结构框图。需要说明的是,图1所示的计算设备100仅为一个示例,在实践中,用于实施本发明的网络代理方法的计算设备可以是任意型号的设备,其硬件配置情况可以与图1所示的计算设备100相同,也可以与图1所示的计算设备100不同。实践中用于实施本发明的网络代理方法的计算设备可以对图1所示的计算设备100的硬件组件进行增加或删减,本发明对计算设备的具体硬件配置情况不做限制。

如图1所示,在基本配置102中,计算设备100典型地包括系统存储器106和一个或者多个处理器104。存储器总线108可以用于在处理器104和系统存储器106之间的通信。

取决于期望的配置,处理器104可以是任何类型的处理,包括但不限于:微处理器(µP)、微控制器(µC)、数字信息处理器(DSP)或者它们的任何组合。处理器104可以包括诸如一级高速缓存110和二级高速缓存112之类的一个或者多个级别的高速缓存、处理器核心114和寄存器116。示例的处理器核心114可以包括运算逻辑单元(ALU)、浮点数单元(FPU)、数字信号处理核心(DSP核心)或者它们的任何组合。示例的存储器控制器118可以与处理器104一起使用,或者在一些实现中,存储器控制器118可以是处理器104的一个内部部分。

取决于期望的配置,系统存储器106可以是任意类型的存储器,包括但不限于:易失性存储器(诸如RAM)、非易失性存储器(诸如ROM、闪存等)或者它们的任何组合。计算设备中的物理内存通常指的是易失性存储器RAM,磁盘中的数据需要加载至物理内存中才能够被处理器104读取。系统存储器106可以包括操作系统120、一个或者多个应用122以及程序数据124。在一些实施方式中,应用122可以布置为在操作系统上由一个或多个处理器104利用程序数据124执行指令。操作系统120例如可以是Linux、Windows等,其包括用于处理基本系统服务以及执行依赖于硬件的任务的程序指令。应用122包括用于实现各种用户期望的功能的程序指令,应用122例如可以是浏览器、即时通讯软件、软件开发工具(例如集成开发环境IDE、编译器等)等,但不限于此。当应用122被安装到计算设备100中时,可以向操作系统120添加驱动模块。

在计算设备100启动运行时,处理器104会从系统存储器106中读取操作系统120的程序指令并执行。应用122运行在操作系统120之上,利用操作系统120以及底层硬件提供的接口来实现各种用户期望的功能。当用户启动应用122时,应用122会加载至系统存储器106中,处理器104从系统存储器106中读取并执行应用122的程序指令。

计算设备100还包括储存设备132,储存设备132包括可移除储存器136和不可移除储存器138,可移除储存器136和不可移除储存器138均与储存接口总线134连接。

计算设备100还可以包括有助于从各种接口设备(例如,输出设备142、外设接口144和通信设备146)到基本配置102经由总线/接口控制器130的通信的接口总线140。示例的输出设备142包括图形处理单元148和音频处理单元150。它们可以被配置为有助于经由一个或者多个A/V端口152与诸如显示器或者扬声器之类的各种外部设备进行通信。示例外设接口144可以包括串行接口控制器154和并行接口控制器156,它们可以被配置为有助于经由一个或者多个I/O端口158和诸如输入设备(例如,键盘、鼠标、笔、语音输入设备、触摸输入设备)或者其他外设(例如打印机、扫描仪等)之类的外部设备进行通信。示例的通信设备146可以包括网络控制器160,其可以被布置为便于经由一个或者多个通信端口164与一个或者多个其他计算设备162通过网络通信链路的通信。

网络通信链路可以是通信介质的一个示例。通信介质通常可以体现为在诸如载波或者其他传输机制之类的调制数据信号中的计算机可读指令、数据结构、程序模块,并且可以包括任何信息递送介质。“调制数据信号”可以这样的信号,它的数据集中的一个或者多个或者它的改变可以在信号中编码信息的方式进行。作为非限制性的示例,通信介质可以包括诸如有线网络或者专线网络之类的有线介质,以及诸如声音、射频(RF)、微波、红外(IR)或者其它无线介质在内的各种无线介质。这里使用的术语计算机可读介质可以包括存储介质和通信介质二者。

在根据本发明的计算设备100中,应用122包括用于执行本发明的网络代理方法200的指令,该指令可以指示处理器104执行本发明的网络代理方法。本领域技术人员可以理解,除了用于执行网络代理方法200的指令之外,应用122还可以包括用于实现其他功能的其他应用126。

图2示出了根据本发明一个实施例的网络代理方法200的流程图,方法200适于在计算设备(例如图1所示的计算设备100)中执行。该计算设备包括转发模块、代理模块和内核模块。

根据本发明的一个实施例,可以在内核模块中注册一个包含应用代理标志位和系统代理标志位的代理钩子函数,用于表征计算设备中是否存在使用应用代理和/或系统代理的应用。其中,代理钩子函数中的应用代理标志位用于表征计算设备中是否存在使用应用代理的应用,系统代理标志位用于表征计算设备中是否存在使用系统代理的应用。

具体地,可以将应用代理的标志位设定为,1表征计算设备中存在使用应用代理的应用,0表征计算设备中不存在使用应用代理的应用。同样,将系统代理的标志位设定为,1表征计算设备中存在使用系统代理的应用,0表征计算设备中不存在使用系统代理的应用。

这样当用户设置了应用代理时,利用socket通知内核打开应用代理标志位,即将应用代理的标志为设定为1,表征计算设备中存在使用应用代理的应用。当用户设置了系统代理时,利用socket通知内核打开系统代理标志位,即将系统代理的标志为设定为1,表征计算设备中存在使用系统代理的应用。当然,对于应用代理标志位和系统代理标志位的具体表征方式,本发明不做限制。在具体的实施例中,本领域的技术人员可以根据实际需要进行设定。

另外,根据本发明的一个实施例,还在计算设备的用户空间中存储有记录着需要使用应用代理的进程名的第一列表和记录着不需要使用系统代理的进程名的第二列表。其中,第一列表和第二列表基于用户设置代理的行为实时调整。例如,用户最初将某应用设定为既不使用应用代理也不使用系统代理,则该应用对应的进程名会存储在第二列表中。当用户将该应用修改为使用应用代理且不使用系统代理时,则该应用对应的进程名会存储在第一列表和第二列表中。

如图2所示,本发明的网络代理方法200始于步骤S210。在步骤S210中,当任一进程发送数据包时,转发模块判断计算设备中是否存在需要使用应用代理的应用和/或系统代理的应用。其中,转发模块可以根据代理钩子函数来判断计算设备中是否存在需要使用应用代理的应用和/或系统代理的应用。

具体地,转发模块可以通过判断代理钩子函数中的应用代理标志位和/或系统代理标志位是否为预设值,来判断计算设备中是否存在需要使用应用代理的应用和/或系统代理的应用。

当代理钩子函数中仅是应用代理标志位为预设值时,判定计算设备中仅存在需要使用应用代理的应用。当代理钩子函数中仅是系统代理标志位为预设值时,判定计算设备中仅存在需要使用系统代理的应用。当代理钩子函数中的应用代理和系统代理的标志位都为预设值时,判定计算设备中既存在需要使用应用代理的应用,还存在需要使用系统代理的应用。当代理钩子函数中的应用代理和系统代理的标志位都不为预设值时,则判定计算设备中既不存在需要使用应用代理的应用,也不存在需要使用系统代理的应用。对于预设值的具体取值,本发明不做限制。在具体的实施例中,本领域的技术人员可以根据实际需要进行设定。

在转发模块判定计算设备中存在需要使用应用代理和/或系统代理的应用后,进入步骤S220,转发模块拦截数据包,并从数据包中获取进程的进程号。具体地,当网络流量(即数据包)经由Netfilter(即转发模块)的Post挂载点发出时,转发模块利用在Netfilter中注册的拦截钩子函数来拦截该数据包信息,并从该数据包信息中获取发送该数据包的这个进程的进程号。

在转发模块获取到发送数据包进程的进程号后,进入步骤S230,转发模块根据进程的进程号,获取进程需要使用的代理类型。根据本发明的一个实施例,内核模块中存储有用于记录当前正在运行且需要使用应用代理的进程号的第一链表和用于记录当前正在运行且不需要使用系统代理的进程号的第二链表。这样,转发模块可以通过将进程(即发送数据包的进程)的进程号与第一链表和第二链表中的进程号进行比对,来获取发送数据包的进程需要使用的代理类型。

具体地,当根据代理钩子函数判定计算设备中仅存在需要使用应用代理的应用时,通过将发送数据包进程的进程号与第一链表中的进程号进行比对,来获取发送数据包的进程需要使用的代理类型。当发送数据包进程的进程号与第一链表中的某个进程号相同时,确定发送数据包的进程需要使用应用代理。当发送数据包进程的进程号与第一链表中的任意一个进程号都不相同时,确定发送数据包的进程不需要使用任何代理,即既不需要使用应用代理也不需要使用系统代理。

当根据代理钩子函数判定计算设备中仅存在需要使用系统代理的应用时,通过将发送数据包进程的进程号与第二链表中的进程号进行比对,来获取发送数据包的进程需要使用的代理类型。当发送数据包进程的进程号与第二链表中的某个进程号相同时,确定发送数据包的进程不需要使用任何代理。当发送数据包进程的进程号与第二链表中的任意一个进程号都不相同时,确定发送数据包的进程需要使用系统代理。

当根据代理钩子函数判定计算设备中既存在需要使用应用代理的应用又存在需要使用系统代理的应用时,通过将发送数据包进程的进程号分别与第一链表和第二链表中的进程号进行比对,来获取进程需要使用的代理类型。

具体地,先将发送数据包进程的进程号与第一链表中的进程号进行比对。当发送数据包进程的进程号与第一链表中的某一进程号相同时,确定发送数据包的进程需要使用应用代理。当发送数据包进程的进程号与第一链表中的任一进程号都不相同时,接着将发送数据包进程的进程号与第二链表中的进程号进行比对。当发送数据包进程的进程号与第二链表中的任一进程号都不相同时,确定发送数据包的进程需要使用系统代理。当发送数据包进程的进程号与第二链表中的某一进程号相同时,确定发送数据包的进程不需要使用任何代理。

其中,对于第一链表和第二链表中的进程号,可以基于进程的行为,通过计算设备中的NetLink模块(即监听模块)和内核模块来实时更新。具体地,通过监听模块监听进程的创建信息、内核模块监听进程的销毁信息,来对第一链表和第二链表进行更新。

根据本发明的一个实施例,监听模块监听进程的创建信息,并在监听到进程的创建信息时,获取创建的进程的进程号和进程名。然后,根据第一列表、第二列表、创建的进程的进程号和进程名,判断创建的进程的进程号是否需要使用应用代理和/或系统代理。

具体地,将创建的进程的进程名分别与第一列表和第二列表进行比对。若此进程名与第一列表中的某一进程名相同,则表明创建的进程需要使用应用代理,即创建的进程的进程号需要使用应用代理,则通过socket通知内核,将创建的进程号添加至第一链表中。

若此进程名与第二列表中的某一进程名相同,则表明创建的进程不需要使用系统代理,即创建的进程的进程号不需要使用系统代理,则通过socket通知内核,将创建的进程号添加至第二链表中。

根据本发明的一个实施例,内核模块监听进程的销毁信息,并在监听到进程的销毁信息时,判断销毁的进程号是否存在于第一链表和/或第二链表中。具体地,将销毁的进程号分别与第一链表和第二链表中的进程号进行比对。若销毁的进程号在第一链表中,则将销毁的进程号从第一链表中移除。若销毁的进程号在第二链表中,则将销毁的进程号从第二链表中移除。若销毁的进程号既在第一链表中也在第二链表中,则将销毁的进程号从第一链表和第二链表中移除。

另外,在此说明一点,内核模块中也可以存储的是用于记录当前正在运行且需要使用应用代理的进程号的链表和用于记录当前正在运行且需要使用系统代理的进程号的链表,对此本发明不做具体限定。在具体的实施例中,本领域的技术人员可以根据实际需要进行设定。

在转发模块获取到发送数据包的进程需要使用的代理类型后,进入步骤S240,转发模块将数据包转发到指定端口。这里的指定端口指的是本机(例如图1所示的计算设备100)的指定端口。本机的指定端口包括应用代理对应的第一端口和系统代理对应的第二端口。

当发送数据包的进程需要使用应用代理时,转发模块将数据包转发到第一端口。当发送数据包的进程需要使用系统代理时,转发模块将数据包转发到第二端口。

随后进入步骤S250,代理模块监听指定端口,并在监听到数据包时,将数据包发送给代理服务器。代理模块监听指定端口具体为代理模块监听第一端口和第二端口。

其中,当代理模块在第一端口监听到数据包时,将数据包发送给应用代理服务器。具体地,当代理模块在第一端口监听到数据包时,首先通过用于与本机进行通信的第一socket接收数据包。然后,将数据包写入用于与应用代理服务器进行通信的第二socket。最后,通过第二socket将数据包发送给应用代理服务器。

根据本发明的一个实施例,当代理模块在第一端口首次监听到数据包时,需要先创建一个用于与本机进行通信的第一socket和一个用于与应用代理服务器进行通信的第二socket。其中,当第一socket接收到信息时,写入第二socket,当第二socket接收到信息时,写入第一socket。

当代理模块在第二端口监听到数据包时,将数据包发送给系统代理服务器。具体地,当代理模块在第二端口监听到数据包时,首先通过用于与本机进行通信的第三socket接收数据包。然后,将数据包写入用于与系统代理服务器进行通信的第四socket。最后,通过第四socket将数据包发送给系统代理服务器。

根据本发明的一个实施例,当代理模块在第二端口首次监听到数据包时,需要先创建一个用于与本机进行通信的第三socket和一个用于与系统代理服务器进行通信的第四socket。其中,当第三socket接收到信息时,写入第四socket,当第四socket接收到信息时,写入第三socket。

至此可知,本发明是在内核网络模块的NF_INET_LOCAL_OUTPUT hook处,注册代理处理挂钩函数,筛选需要使用代理的网络流量,转发到本机端口,使之重新入栈NF_INET_LOCAL_IN,这样在本机端口监听即可取得本机流量。但是,由于此时网络目的地已被修改为本机,无法得知远端服务器地址。因此,根据本发明的一个实施例,可以通过内核网络框架提供的conntrack追踪技术来获取原服务器地址,以便应用代理服务器或系统代理服务器在接收到数据包后与原服务器建立连接。

另外,为了防止网络流量回环,当前进程无论设置了何种代理,都不应该被转发。即将当前进程的进程号,通过socket通知内核添加到不需要使用任何代理的进程链表中。以上述内核模块中存储有用于记录当前正在运行且需要使用应用代理的进程号的第一链表和用于记录当前正在运行且不需要使用系统代理的进程号的第二链表为例,当前进程的进程号应该仅在第二链表中。简而言之,将应用代理和系统代理的进程设定为既不需要使用应用代理也不需要使用系统代理。

根据本发明的网络代理方法,当任一进程发送数据包时,转发模块判断计算设备中是否存在需要使用应用代理的应用和/或系统代理的应用。若存在需要使用应用代理的应用和/或系统代理的应用,则转发模块拦截发送的数据包,并从发送的数据包中获取发送数据包进程的进程号。然后,转发模块根据发送数据包进程的进程号,获取发送数据包的进程需要使用的代理类型。最后,转发模块根据发送数据包的进程需要使用的代理类型,将数据包转发到指定端口。与此同时,代理模块监听指定端口,并在监听到数据包时,将数据包发送给代理服务器。

可见,本发明是基于操作系统自身的转发模块和代理模块实现的网络代理。即,本发明从操作系统层面实现了代理,这样不再需要使用第三方代理软件或者软件本身自带的代理功能来实现网络代理。

并且,本发明将应用代理和系统代理整合成了一套方案,两种代理在本方案中能够同时正常工作。即,本发明的网络代理方法既能实现应用代理还能实现系统代理,实现了应用代理和系统代理的统一,从而不再需要利用不同的第三方软件来实现这两种代理。

进一步地,本发明的网络代理方法能够实时生效,不再需要重启应用,而且只要用户设置完代理后,代理便会自动生效,不再需要依赖于环境变量和gsettings信息,方便快捷,可以提升用户体验。

另外,由Netfilter转发到指定的端口,而不在注册钩子函数时直接设置代理,可以避免拖累内核运行或者造成崩溃,只用socket进行通信,能够保证系统的稳定性。如果在底层截取到流量后,直接使用代理,需要涉及到同远端代理服务器通信,由于通信可能是阻塞的,会影响内核的性能。本方法不在底层处理流量信息,而在上层进行代理,可以避免内核阻塞。

这里描述的各种技术可结合硬件或软件,或者它们的组合一起实现。从而,本发明的方法和设备,或者本发明的方法和设备的某些方面或部分可采取嵌入有形媒介,例如可移动硬盘、U盘、软盘、CD-ROM或者其它任意机器可读的存储介质中的程序代码(即指令)的形式,其中当程序被载入诸如计算机之类的机器,并被所述机器执行时,所述机器变成实践本发明的设备。

在程序代码在可编程计算机上执行的情况下,计算设备一般包括处理器、处理器可读的存储介质(包括易失性和非易失性存储器和/或存储元件),至少一个输入装置,和至少一个输出装置。其中,存储器被配置用于存储程序代码;处理器被配置用于根据该存储器中存储的所述程序代码中的指令,执行本发明的文档加载方法。

以示例而非限制的方式,可读介质包括可读存储介质和通信介质。可读存储介质存储诸如计算机可读指令、数据结构、程序模块或其它数据等信息。通信介质一般以诸如载波或其它传输机制等已调制数据信号来体现计算机可读指令、数据结构、程序模块或其它数据,并且包括任何信息传递介质。以上的任一种的组合也包括在可读介质的范围之内。

在此处所提供的说明书中,算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与本发明的示例一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。

在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下被实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。

应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。

本领域那些技术人员应当理解在本文所公开的示例中的设备的模块或单元或组件可以布置在如该实施例中所描述的设备中,或者可替换地可以定位在与该示例中的设备不同的一个或多个设备中。前述示例中的模块可以组合为一个模块或者此外可以分成多个子模块。

本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。

此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。

此外,所述实施例中的一些在此被描述成可以由计算机系统的处理器或者由执行所述功能的其它装置实施的方法或方法元素的组合。因此,具有用于实施所述方法或方法元素的必要指令的处理器形成用于实施该方法或方法元素的装置。此外,装置实施例的在此所述的元素是如下装置的例子:该装置用于实施由为了实施该发明的目的的元素所执行的功能。

如在此所使用的那样,除非另行规定,使用序数词“第一”、“第二”、“第三”等等来描述普通对象仅仅表示涉及类似对象的不同实例,并且并不意图暗示这样被描述的对象必须具有时间上、空间上、排序方面或者以任意其它方式的给定顺序。

尽管根据有限数量的实施例描述了本发明,但是受益于上面的描述,本技术领域内的技术人员明白,在由此描述的本发明的范围内,可以设想其它实施例。此外,应当注意,本说明书中使用的语言主要是为了可读性和教导的目的而选择的,而不是为了解释或者限定本发明的主题而选择的。因此,在不偏离所附权利要求书的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。对于本发明的范围,对本发明所做的公开是说明性的,而非限制性的,本发明的范围由所附权利要求书限定。

相关技术
  • 一种网络代理方法、计算设备及可读存储介质
  • 一种网络代理方法、计算设备及可读存储介质
技术分类

06120113207645