基于DNS服务器的查询方法、装置、设备及介质转让专利

申请号 : CN202211043501.9

文献号 : CN115412611B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 张锐杰史茹

申请人 : 北京新唐思创教育科技有限公司

摘要 :

本公开涉及一种基于DNS服务器的查询方法、装置、设备及介质,该方法包括:向预先配置的目标DNS服务器发送DNS请求,DNS请求包括:待访问的服务器环境的目标域名,以使得目标DNS服务器基于预先配置的DNS映射文件查询与目标域名对应的目标IP地址;其中,DNS映射文件用于记录域名和IP地址的映射关系;接收目标DNS服务器返回的目标IP地址,并访问目标IP地址对应的服务器。本公开这种基于DNS映射文件查询目标IP地址并访问对应服务器的方式,能够快速地在不同服务器环境之间进行切换,从而有效提升应用程序的开发效率。

权利要求 :

1.一种基于DNS服务器的查询方法,其特征在于,包括:向预先配置的目标DNS服务器发送DNS请求,所述DNS请求包括:待访问的服务器环境的目标域名,以使得所述目标DNS服务器基于预先配置的DNS映射文件查询与所述目标域名对应的目标IP地址;其中,所述DNS映射文件用于记录域名和IP地址的映射关系;所述待访问的服务器环境是对项目进行调试过程中切换访问的不同的服务器环境,包括:开发环境、测试环境、预发布环境和生产环境中的一个或多个;

接收所述目标DNS服务器返回的所述目标IP地址,并访问所述目标IP地址对应的服务器;

所述目标DNS服务器包括:本地DNS服务器;所述方法还包括:获取配置本地DNS服务器所需的SSL签名证书,所述SSL签名证书中指定所述本地DNS服务器的主机名为本机地址;

通过调用支持DOH协议的应用程序编程接口API,配置所述本地DNS服务器的服务域名和所述本机地址,以通过所述服务域名解析到所述本机地址;

验证所述SSL签名证书;

在所述SSL签名证书验证通过的情况下,启动所述本地DNS服务器。

2.根据权利要求1所述的方法,其特征在于,所述通过调用支持DOH协议的API,配置所述本地DNS服务器的服务域名和所述本机地址,包括:通过调用第一API,配置所述本地DNS服务器的服务域名和所述服务域名对应的URL;

通过调用第二API,配置所述本地DNS服务器的IP地址为所述本机地址;

其中,所述第一API和所述第二API均为支持DOH协议的API。

3.根据权利要求2所述的方法,其特征在于,所述通过调用第一API,配置所述本地DNS服务器的服务域名和所述服务域名对应的URL,包括:根据预设URL创建第一传入参数;

通过传入所述第一传入参数来调用第一API,配置所述本地DNS服务器的服务域名和所述服务域名对应的URL。

4.根据权利要求2所述的方法,其特征在于,所述通过调用第二API,配置所述本地DNS服务器的IP地址为所述本机地址,包括:将通过所述第一API创建的所述本地DNS服务器的服务域名和所述服务域名对应的URL,作为第二API的第二传入参数;

将本机地址作为第三传入参数;

通过传入所述第二传入参数和所述第三传入参数来调用所述第二API,配置所述本地DNS服务器的IP地址为所述本机地址。

5.根据权利要求1所述的方法,其特征在于,所述目标DNS服务器包括:远端DNS服务器;

所述向预先配置的目标DNS服务器发送DNS请求,包括:获取iOS系统提供的用于获取DNS请求的C函数和所述C函数的第一函数地址;

将所述C函数替换为预设的自定义DNS获取函数;

通过所述自定义DNS获取函数向预先配置的远端DNS服务器发送所述DNS请求。

6.根据权利要求5所述的方法,其特征在于,所述将所述C函数替换为预设的自定义DNS获取函数,包括:获取预设的自定义DNS获取函数的第二函数地址;

获取保留参数,所述保留参数用于表示保留所述C函数的指针的地址;

通过传入所述第一函数地址、所述第二函数地址和所述保留参数,来调用DobbyHook框架中的替换函数,将所述C函数替换为所述自定义DNS获取函数。

7.根据权利要求1所述的方法,其特征在于,所述基于预先配置的DNS映射文件查询与所述目标域名对应的目标IP地址,包括:计算所述目标域名的哈希值;

从预先配置的DNS映射文件中存储的key值中,查询与所述目标域名的哈希值相同的目标key值;其中,所述DNS映射文件以键值对存储具有映射关系的域名和IP地址,所述键值对包括:表示域名的key值和表示IP地址的value值;

获得所述目标key值对应的目标value值,并将所述目标value值表示的IP地址确定为与所述目标域名对应的目标IP地址。

8.一种基于DNS服务器的查询装置,其特征在于,包括:请求发送模块,用于向预先配置的目标DNS服务器发送DNS请求,所述DNS请求包括:待访问的服务器环境的目标域名,以使得所述目标DNS服务器基于预先配置的DNS映射文件查询与所述目标域名对应的目标IP地址;其中,所述DNS映射文件用于记录域名和IP地址的映射关系;所述待访问的服务器环境是对项目进行调试过程中切换访问的不同的服务器环境,包括:开发环境、测试环境、预发布环境和生产环境中的一个或多个;

访问模块,用于接收所述目标DNS服务器返回的所述目标IP地址,并访问所述目标IP地址对应的服务器;

所述目标DNS服务器包括:本地DNS服务器;基于DNS服务器的查询装置还包括本地DNS服务器配置模块,其用于:获取配置本地DNS服务器所需的SSL签名证书,SSL签名证书中指定本地DNS服务器的主机名为本机地址;

通过调用支持DOH协议的应用程序编程接口API,配置本地DNS服务器的服务域名和本机地址,以通过服务域名解析到本机地址;

验证SSL签名证书;

在SSL签名证书验证通过的情况下,启动本地DNS服务器。

9.一种电子设备,其特征在于,所述电子设备包括:

处理器;以及

存储程序的存储器,

其中,所述程序包括指令,所述指令在由所述处理器执行时使所述处理器执行根据权利要求1至7任一所述的方法。

10.一种存储有计算机指令的非瞬时计算机可读存储介质,其特征在于,所述计算机指令用于使所述计算机执行根据权利要求1至7任一所述的方法。

说明书 :

基于DNS服务器的查询方法、装置、设备及介质

技术领域

[0001] 本公开涉及计算机技术领域,尤其涉及基于DNS服务器的查询方法、装置、设备及介质。

背景技术

[0002] 在iOS(由苹果公司开发的移动操作系统)的应用程序开发中,一个项目从开发到上线,常常需要在开发环境、测试环境、预发布环境、生产环境等多个服务器环境中进行调式,以保证项目的上线质量。因此,应用程序开发需要在服务器环境之间多次切换,以访问特定应用环境的服务器。目前,主要依赖具有自定义hosts(没有扩展名的系统文件)功能的路由器,或者配置host的电脑,来达到切换并访问不同应用环境下服务器的目的。然而,上述方式对硬件要求较高,不便于服务器的切换访问。

发明内容

[0003] 为了解决上述技术问题或者至少部分地解决上述技术问题,本公开提供了一种基于DNS服务器的查询方法、装置、设备及介质。
[0004] 根据本公开的一方面,提供了一种基于DNS服务器的查询方法,包括:
[0005] 向预先配置的目标DNS服务器发送DNS请求,所述DNS请求包括:待访问的服务器环境的目标域名,以使得所述目标DNS服务器基于预先配置的DNS映射文件查询与所述目标域名对应的目标IP地址;其中,所述DNS映射文件用于记录域名和IP地址的映射关系;
[0006] 接收所述目标DNS服务器返回的所述目标IP地址,并访问所述目标IP地址对应的服务器。
[0007] 根据本公开的另一方面,提供了一种基于DNS服务器的查询装置,包括:
[0008] 请求发送模块,用于向预先配置的目标DNS服务器发送DNS请求,所述DNS请求包括:待访问的服务器环境的目标域名,以使得所述目标DNS服务器基于预先配置的DNS映射文件查询与所述目标域名对应的目标IP地址;其中,所述DNS映射文件用于记录域名和IP地址的映射关系;
[0009] 访问模块,用于接收所述目标DNS服务器返回的所述目标IP地址,并访问所述目标IP地址对应的服务器。
[0010] 根据本公开的另一方面,提供了一种电子设备,所述电子设备包括:处理器;以及存储程序的存储器,其中,所述程序包括指令,所述指令在由所述处理器执行时使所述处理器执行根据上述基于DNS服务器的查询方法。
[0011] 根据本公开的另一方面,提供了一种存储有计算机指令的非瞬时计算机可读存储介质,所述计算机指令用于使所述计算机执行基于DNS服务器的查询方法。
[0012] 本公开实施例提供的技术方案与现有技术相比具有如下优点:
[0013] 本公开实施例提供的基于DNS服务器的查询方法、装置、设备及介质,该方法包括:移动终端向预先配置的目标DNS服务器发送DNS请求,DNS请求包括:待访问的服务器环境的目标域名,以使得目标DNS服务器基于预先配置的DNS映射文件查询与目标域名对应的目标IP地址;其中,DNS映射文件用于记录域名和IP地址的映射关系;接收目标DNS服务器返回的目标IP地址,并访问目标IP地址对应的服务器。本公开这种基于DNS映射文件查询目标IP地址并访问对应服务器的方式,能够快速地在不同服务器环境之间进行切换,从而有效提升应用程序的开发效率。

附图说明

[0014] 此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。
[0015] 为了更清楚地说明本公开实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
[0016] 图1为本公开实施例提供的基于DNS服务器的查询方法流程图;
[0017] 图2为本公开实施例提供的本地DNS服务器的应用场景示意图;
[0018] 图3为本公开实施例提供的第二API方法声明示意图;
[0019] 图4为本公开实施例提供的DNS请求流程示意图;
[0020] 图5为本公开实施例提供的基于DNS服务器的查询装置的结构示意图;
[0021] 图6为本公开实施例提供的电子设备的结构示意图。

具体实施方式

[0022] 为了能够更清楚地理解本公开的上述目的、特征和优点,下面将参照附图更详细地描述本公开的实施例。虽然附图中显示了本公开的某些实施例,然而应当理解的是,本公开可以通过各种形式来实现,而且不应该被解释为限于这里阐述的实施例,相反提供这些实施例是为了更加透彻和完整地理解本公开。应当理解的是,本公开的附图及实施例仅用于示例性作用,并非用于限制本公开的保护范围。
[0023] 应当理解,本公开的方法实施方式中记载的各个步骤可以按照不同的顺序执行,和/或并行执行。此外,方法实施方式可以包括附加的步骤和/或省略执行示出的步骤。本公开的范围在此方面不受限制。
[0024] 本文使用的术语“包括”及其变形是开放性包括,即“包括但不限于”。术语“基于”是“至少部分地基于”。术语“一个实施例”表示“至少一个实施例”;术语“另一实施例”表示“至少一个另外的实施例”;术语“一些实施例”表示“至少一些实施例”。其他术语的相关定义将在下文描述中给出。需要注意,本公开中提及的“第一”、“第二”等概念仅用于对不同的装置、模块或单元进行区分,并非用于限定这些装置、模块或单元所执行的功能的顺序或者相互依存关系。
[0025] 需要注意,本公开中提及的“一个”、“多个”的修饰是示意性而非限制性的,本领域技术人员应当理解,除非在上下文另有明确指出,否则应该理解为“一个或多个”。
[0026] 本公开实施方式中的多个装置之间所交互的消息或者信息的名称仅用于说明性的目的,而并不是用于对这些消息或信息的范围进行限制。
[0027] 在iOS的应用程序开发中,为了保证项目的上线质量,需要切换访问不同的服务器环境对项目进行调试。目前,主要有依赖路由器或电脑这两种方式进行服务器环境的切换访问。其中,可以使用具有自定义hosts功能的路由器来配置不同环境的hosts,通过切换Wi‑Fi(Wireless Fidelity,无线通信技术)达到切换环境的目的。然而该依赖路由器的切换方式存在诸多缺陷,如:对硬件要求较高,只有部分路由器具备该功能;只有在iOS设备使用Wi‑Fi时可以切换环境,在使用蜂窝网的情况下,则无法实现切换;多个环境需要配置多台路由器,或每次清除以重新配置需要的服务器环境。或者,可以在电脑上配置相应的host,并通过代理服务器软件(如Charles等)来使移动设备连接电脑,通过代理间接实现访问不同host配置的服务器,以达到访问不同环境下服务器的目的。然而该依赖电脑的切换访问方式需要配置相应的电脑,移动设备无法独立完成不同环境的访问。因此,目前的切换访问方式对硬件要求较高,不便于不同环境下服务器的切换访问,进而影响项目开发效率。
[0028] 针对上述问题,本公开实施例提供了基于DNS(Domain Name System,域名解析系统)服务器的查询方法、装置、设备及介质。为便于理解,以下对本公开实施例展开描述。在一种应用场景中,本公开实施例可以通过移动终端和DNS服务器实现。其中,移动终端可以是搭载iOS的手机、平板电脑等终端设备;DNS服务器可以是在移动终端本地配置的本地DNS服务器,也可以是在远端服务器或第三方服务器配置的远端DNS服务器。移动终端可以用于配置上述DNS服务器,以及向DNS服务器发起查询请求;相应的,DNS服务器可以用于向移动终端反馈与查询请求相对应的IP(Internet Protocol,网际互连协议)查询结果,以使移动终端从当前的服务器切换至IP查询结果对应的服务器进行访问。
[0029] 参照图1,本公开实施例提供一种基于DNS服务器的查询方法,该方法可以由移动终端执行。如图1所示,该方法包括:
[0030] 步骤S102,向预先配置的目标DNS服务器发送DNS请求,DNS请求包括:待访问的服务器环境的目标域名,以使得目标DNS服务器基于预先配置的DNS映射文件查询与目标域名对应的目标IP地址;其中,DNS映射文件用于记录域名和IP地址的映射关系。
[0031] 在一实施例中,在应用程序开发中,当移动终端启动HTTP(Hyper Text Transfer Protocol,超文本传输协议)请求时,触发发起DNS请求,DNS请求携带待访问的服务器环境的目标域名;其中,服务器环境诸如,应用程序从开发到上线的过程中的开发环境、测试环境、生产环境等多个服务器应用环境。
[0032] 移动终端发起DNS请求后,由预先配置的目标DNS服务器拦截DNS请求;目标DNS服务器可以对DNS请求进行解析,也即将目标域名与服务器连接起来,通过目标域名查询相应的服务器。通过目标DNS服务器基于预先配置的DNS映射文件查询与目标域名对应的目标IP地址。
[0033] 由于不同版本的操作系统对应的功能有所区别,基于此,配置DNS服务器的方式也会相应地不同;从而,本实施例中的目标DNS服务器可以包括:本地DNS服务器或远端DNS服务器,本地DNS服务器和远端DNS服务器对应于操作系统版本不同的移动终端。
[0034] 在目标DNS服务器上配置有记录域名和IP地址的映射关系的DNS映射文件,DNS映射文件包括多个域名和与域名一一对应的IP地址。目标DNS服务器可以根据预先配置的DNS映射文件,确定与目标域名具有映射关系的目标IP地址;而后,将目标IP地址返回给移动终端。
[0035] 步骤S104,接收目标DNS服务器返回的目标IP地址,并访问目标IP地址对应的服务器。
[0036] 在本实施例中,移动终端接收到针对目标域名返回的目标IP地址,该目标IP地址所指示的服务器为待访问的服务器环境下的服务器。移动终端从当前所访问的第一服务器切换至目标IP地址对应的第二服务器,并对第二服务器进行网络访问。
[0037] 本公开实施例提供的基于DNS服务器的查询方法,通过移动终端向预先配置的目标DNS服务器发送包括目标域名的DNS请求,以使得目标DNS服务器基于预先配置的DNS映射文件查询与目标域名对应的目标IP地址;其中,DNS映射文件用于记录域名和IP地址的映射关系;接收目标DNS服务器返回的目标IP地址,并访问目标IP地址对应的服务器。本实施例无需依赖路由器或电脑等硬件设备,只需要利用目标DNS服务器中配置的DNS映射文件,即可查询DNS请求对应的目标IP地址,以供移动终端访问目标IP地址对应的服务器;上述这种基于DNS映射文件查询目标IP地址并访问对应服务器的方式,能够快速地在不同服务器环境之间进行切换,从而有效提升应用程序的开发效率。
[0038] 考虑到目标DNS服务器可以包括:本地DNS服务器或远端DNS服务器,本地DNS服务器和远端DNS服务器对应于操作系统版本不同的移动终端;基于此,以下实施例针对本地DNS服务器和远端DNS服务器,对基于DNS服务器的查询方法分别展开描述。
[0039] 在本实施例中,以iOS操作系统为例,版本为iOS14及以上的iOS系统提供加密DNS,也即支持DOH(DNS‑over‑HTTPS)的API(Application Programming Interface,应用程序编程接口)。在此情况下,针对搭载iOS14及以上的iOS系统的移动终端,可以进行本地DNS服务器配置,即指定DNS服务器为本地服务器。相应地,针对搭载iOS13及以下的iOS系统的移动终端,可以进行远端DNS服务器配置。
[0040] 在本实施例中,目标DNS服务器包括:本地DNS服务器。参照图2所示的应用场景,为了能够直接利用本地DNS服务器实现基于DNS服务器的查询方法,需要首先配置本地DNS服务器,以及在本地DNS服务器中配置DNS映射文件;而后再利用完成配置后的本地DNS服务器向移动终端返回针对DNS请求的目标IP地址。
[0041] 一种本地DNS的配置方法可以参照如下步骤(1)至(3)所示。
[0042] (1)获取配置本地DNS服务器所需的SSL(Secure Sockets Layer,安全套接层协议)签名证书,SSL签名证书中指定本地DNS服务器的主机名为本机地址。
[0043] 具体的,在移动终端制作并存储配置本地DNS服务器所需的SSL签名证书,SSL签名证书中指定待配置的本地DNS服务器的主机名为本机地址:127.0.0.1,并将该SSL签名证书导出到应用程序中。
[0044] (2)通过调用支持DOH协议的应用程序编程接口API,配置本地DNS服务器的服务域名和本机地址,以通过服务域名解析到本机地址。
[0045] 在一种可能的实施例中,可以首先注册和配置本地DNS服务器的服务域名及服务域名下的URL(Uniform Resource Locator,统一资源定位系统)。而后,通过调用第一API,配置本地DNS服务器的服务域名和服务域名对应的URL;其中,第一API是基于DOH协议创建服务域名和URL的API,示例为:nw_resolver_config_create_http。具体调用第一API时,根据预设URL创建第一传入参数,第一传入参数示例性为url_endpoint。通过传入第一传入参数来调用第一API,配置本地DNS服务器的服务域名和服务域名对应的URL。
[0046] 以及,通过调用第二API,配置本地DNS服务器的IP地址为本机地址;其中,第二API是添加IP地址的具体参数的API,示例为:nw_resolver_config_add_server_address,其方法声明可参照图3所示的代码。具体调用第二API时,将通过第一API创建的本地DNS服务器的服务域名和服务域名对应的URL,作为第二API的第二传入参数,第二传入参数即为图3中的config;将本机地址127.0.0.1作为第三传入参数,第三传入参数即为图3中的server_address;通过传入第二传入参数和第三传入参数来调用第二API,配置本地DNS服务器的IP地址为本机地址127.0.0.1。本实施例通过第二API指定本地DNS服务器的IP地址为本机地址127.0.0.1,由此通过服务域名解析到本机地址,避免DNS请求时动态查找对应的IP地址。
[0047] 本实施例的上述第一API和第二API均为支持DOH协议的API。
[0048] (3)验证SSL签名证书。在SSL签名证书验证通过的情况下,启动本地DNS服务器。
[0049] SSL签名证书验证通过,表示本地DNS配置成功,从而启动本地DNS服务器。若SSL签名证书验证未通过,可能是其中的一些参数配置错误,可以进行修改直至SSL签名证书验证通过。
[0050] 本实施例提供的本地DNS服务器的配置方法,通过配置将本地DNS服务器的IP地址配置为本机地址,使得所有对本地服务器的访问,都可以被本地DNS服务器拦截到。
[0051] 在本地DNS服务器中,可以配置不同服务器环境对应的IP地址,诸如开发环境对应的IP地址、测试环境对应的IP地址、生产环境对应的IP地址;获取各服务器环境的域名,根据服务器环境与IP地址之间的对应关系,建立域名与IP地址之间一一对应的映射关系;按照键值对的数据结构将具有映射关系的域名和IP地址生成为DNS映射文件。从而,在DNS映射文件中存储着域名和IP地址映射关系的键值对的集合,每个键值对中,域名为key值,IP地址为value值。
[0052] 根据以上实施例完成本地DNS服务器和DNS映射文件的配置后,移动终端可启动HTTP请求,同时触发DNS请求,移动终端通过本机地址向本地DNS服务器发送DNS请求。具体的,移动终端触发访问本地服务的DNS请求,DNS请求中的服务域名将通过DNS解析到本机地址,于是,IP地址为本机地址的本地DNS服务器即可拦截DNS请求。
[0053] 本地DNS服务器根据预先配置的DNS映射文件,查询与目标域名对应的目标IP地址,并向移动终端返回目标IP地址。其中,针对本地DNS服务器,一种查询目标IP地址的具体的实现方式可以包括:
[0054] 先计算目标域名的哈希值。而后从预先配置的DNS映射文件中存储的key值中,查询与目标域名的哈希值相同的目标key值;其中,DNS映射文件以键值对存储具有映射关系的域名和IP地址,键值对包括:表示域名的key值和表示IP地址的value值。接着获得目标key值对应的目标value值,并将目标value值表示的IP地址确定为与目标域名对应的目标IP地址。
[0055] 本实施例通过计算目标域名的哈希值,来匹配DNS映射文件中存储的键值对集合中的key值。当要查询的目标域名的哈希值和其中的某个key值的哈希值相等时,即命中查询,获得目标key值对应的目标value值,并且返回该目标value值所对应的目标IP地址。这种通过哈希值匹配的方式,能够快速查询到目标IP地址,提升查询效率。
[0056] 移动终端接收目标DNS服务器返回的目标IP地址,从当前所访问的服务器切换至目标IP地址对应的服务器,并访问目标IP地址对应的服务器,以继续HTTP请求的流程。
[0057] 在上述针对iOS14及以上iOS系统的示例性实施例中,DNS请求的流程被大大简化,如图4所示,移动终端直接可以通过访问配置有DNS映射文件的本地DNS服务器,来获得IP地址解析结果,极大的提升了DNS请求的效率。
[0058] 在本实施例中,目标DNS服务器包括:远端DNS服务器。与图2所示的应用场景相似,为了能够直接利用远端DNS服务器实现基于DNS服务器的查询方法,需要首先配置远端DNS服务器,以及在远端DNS服务器中配置DNS映射文件;而后再利用完成配置后的远端DNS服务器向移动终端返回针对DNS请求的目标IP地址。
[0059] 远端DNS服务器可以直接使用第三方远端DNS服务器,也可以去配置远端DNS服务器,其配置过程可参照现有的远端DNS服务器的配置过程,在此不再展开描述。以及,在远端DNS服务器中配置DNS映射文件的方式可以参照上述实施例,在此不再展开描述。
[0060] 根据以上实施例完成远端DNS服务器和DNS映射文件的配置后,移动终端可以向远端DNS服务器发送DNS请求。本实施例包括如下步骤i至步骤iii:
[0061] 步骤i,获取iOS系统提供的用于获取DNS请求的C函数和C函数的第一函数地址。具体的,移动终端使用Hook函数拦截用于获取DNS请求的C函数和C函数的第一函数地址;C函数例如为:DNSServiceGetAddrInfo。
[0062] 步骤ii,将C函数替换为预设的自定义DNS获取函数。由于iOS系统提供的C函数本身是无法拦截DNS请求来发送给远端DNS服务器,于是本实施例使用DobbyHook框架对C函数进行Hook拦截并替换为预设的自定义DNS获取函数。其中,自定义DNS获取函数为预先生成的函数,例如为custom_DNSServiceGetAddrInfo。自定义DNS获取函数保持和待替换的C函数DNSServiceGetAddrInfo同样的参数列表,这样可以保持原本调用中的DNS解析信息和结构的传递,避免因为Hook拦截替换导致程序异常,尽量减少人为干预对程序的影响。
[0063] 具体替换过程可参照如下内容:首先获取预设的自定义DNS获取函数的第二函数地址。
[0064] 其次获取保留参数,保留参数用于表示保留C函数的指针的地址,也就是将需要拦截并替换的C函数原来的执行流程保留在保留参数中,进而替换后的自定义DNS获取函数,能够按照C函数原来的执行流程处理DNS请求。
[0065] 而后通过传入第一函数地址、第二函数地址和保留参数,来调用DobbyHook框架中的替换函数,将C函数替换为自定义DNS获取函数。具体的,DobbyHook框架中的替换函数的声明示例如下:int DobbyHook(void*function_address,void*replace_call,void**origin_call)。其中,function_address参数表示需要被替换掉的函数地址,即第一函数地址;replace_call参数表示新实现的函数地址,即第二函数地址;origin_call参数表示保留参数。通过调用DobbyHook框架中的替换函数,将C函数替换为自定义DNS获取函数,替换后的自定义DNS获取函数能够拦截DNS请求,并将拦截到的DNS请求发送给远端DNS服务器。
[0066] 步骤iii,通过自定义DNS获取函数向预先配置的远端DNS服务器发送DNS请求。
[0067] 远端DNS服务器获取DNS请求,得到DNS请求携带的目标域名,基于预先配置的DNS映射文件查询与目标域名对应的目标IP地址,将目标IP地址返回给移动终端。
[0068] 移动终端接收远端DNS服务器返回的目标IP地址,并访问目标IP地址对应的服务器。
[0069] 在上述针对iOS13及以下iOS系统的示例性实施例中,DNS请求的流程被大大简化,移动终端直接可以通过访问配置有DNS映射文件的远端DNS服务器,来获得IP地址解析结果,极大的提升了DNS请求的效率。
[0070] 综上,本公开实施例在应用程序开发过程中,需要在开发环境、测试环境、生产环境等多个应用环境之间来回切换时,无需依赖特定功能路由器等硬件,对硬件设备无要求;本技术方案通过对DOH支持的API以及在本地DNS服务器上配置DNS映射文件的方式,或者,通过将C函数替换为自定义DNS获取函数以及在远端DNS服务器上配置DNS映射文件的方式,可以更方便快捷的方式实现多个服务器环境之间的切换并访问目标IP对应的服务器,从而有效提升项目开发的效率。
[0071] 图5为本公开实施例提供的一种基于DNS服务器的查询装置的结构示意图,该装置可由软件和/或硬件实现,一般可集成在电子设备中,具体例如为移动终端,可用于执行上述基于DNS服务器的查询方法。如图5所示,基于DNS服务器的查询装置500包括:
[0072] 请求发送模块502,用于向预先配置的目标DNS服务器发送DNS请求,DNS请求包括:待访问的服务器环境的目标域名,以使得目标DNS服务器基于预先配置的DNS映射文件查询与目标域名对应的目标IP地址;其中,DNS映射文件用于记录域名和IP地址的映射关系;
[0073] 访问模块504,用于接收目标DNS服务器返回的目标IP地址,并访问目标IP地址对应的服务器。
[0074] 在一些实施例中,目标DNS服务器包括:本地DNS服务器;基于DNS服务器的查询装置500还包括本地DNS服务器配置模块,其用于:
[0075] 获取配置本地DNS服务器所需的SSL签名证书,SSL签名证书中指定本地DNS服务器的主机名为本机地址;
[0076] 通过调用支持DOH协议的应用程序编程接口API,配置本地DNS服务器的服务域名和本机地址,以通过服务域名解析到本机地址;
[0077] 验证SSL签名证书;
[0078] 在SSL签名证书验证通过的情况下,启动本地DNS服务器。
[0079] 在一些实施例中,本地DNS服务器配置模块还用于:
[0080] 通过调用第一API,配置本地DNS服务器的服务域名和服务域名对应的URL;
[0081] 通过调用第二API,配置本地DNS服务器的IP地址为本机地址;
[0082] 其中,第一API和第二API均为支持DOH协议的API。
[0083] 在一些实施例中,本地DNS服务器配置模块还用于:
[0084] 根据预设URL创建第一传入参数;
[0085] 通过传入第一传入参数来调用第一API,配置本地DNS服务器的服务域名和服务域名对应的URL。
[0086] 在一些实施例中,本地DNS服务器配置模块还用于:
[0087] 将通过第一API创建的本地DNS服务器的服务域名和服务域名对应的URL,作为第二API的第二传入参数;
[0088] 将本机地址作为第三传入参数;
[0089] 通过传入第二传入参数和第三传入参数来调用第二API,配置本地DNS服务器的IP地址为本机地址。
[0090] 在一些实施例中,目标DNS服务器包括:远端DNS服务器;请求发送模块502还用于:
[0091] 获取iOS系统提供的用于获取DNS请求的C函数和C函数的第一函数地址;
[0092] 将C函数替换为预设的自定义DNS获取函数;
[0093] 通过自定义DNS获取函数向预先配置的远端DNS服务器发送DNS请求。
[0094] 在一些实施例中,请求发送模块502还用于:
[0095] 获取预设的自定义DNS获取函数的第二函数地址;
[0096] 获取保留参数,保留参数用于表示保留C函数的指针的地址;
[0097] 通过传入第一函数地址、第二函数地址和保留参数,来调用DobbyHook框架中的替换函数,将C函数替换为自定义DNS获取函数。
[0098] 在一些实施例中,请求发送模块502还用于:
[0099] 计算目标域名的哈希值;
[0100] 从预先配置的DNS映射文件中存储的key值中,查询与目标域名的哈希值相同的目标key值;其中,DNS映射文件以键值对存储具有映射关系的域名和IP地址,键值对包括:表示域名的key值和表示IP地址的value值;
[0101] 获得目标key值对应的目标value值,并将目标value值表示的IP地址确定为与目标域名对应的目标IP地址。
[0102] 本实施例所提供的装置,其实现原理及产生的技术效果和前述方法实施例相同,为简要描述,装置实施例部分未提及之处,可参考前述方法实施例中相应内容。
[0103] 本公开示例性实施例还提供一种电子设备,包括:至少一个处理器;以及与至少一个处理器通信连接的存储器。所述存储器存储有能够被所述至少一个处理器执行的计算机程序,所述计算机程序在被所述至少一个处理器执行时用于使所述电子设备执行根据本公开实施例的方法。
[0104] 本公开示例性实施例还提供一种计算机程序产品,包括计算机程序,其中,所述计算机程序在被计算机的处理器执行时用于使所述计算机执行根据本公开实施例的方法。
[0105] 参考图6,现将描述可以作为本公开的服务器或客户端的电子设备600的结构框图,其是可以应用于本公开的各方面的硬件设备的示例。电子设备旨在表示各种形式的数字电子的计算机设备,诸如,膝上型计算机、台式计算机、工作台、个人数字助理、服务器、刀片式服务器、大型计算机、和其它适合的计算机。电子设备还可以表示各种形式的移动装置,诸如,个人数字处理、蜂窝电话、智能电话、可穿戴设备和其它类似的计算装置。本文所示的部件、它们的连接和关系、以及它们的功能仅仅作为示例,并且不意在限制本文中描述的和/或者要求的本公开的实现。
[0106] 如图6所示,电子设备600包括计算单元601,其可以根据存储在只读存储器(ROM)602中的计算机程序或者从存储单元608加载到随机访问存储器(RAM)603中的计算机程序,来执行各种适当的动作和处理。在RAM 603中,还可存储设备600操作所需的各种程序和数据。计算单元601、ROM 602以及RAM 603通过总线604彼此相连。输入/输出(I/O)接口605也连接至总线604。
[0107] 电子设备600中的多个部件连接至I/O接口605,包括:输入单元606、输出单元607、存储单元608以及通信单元609。输入单元606可以是能向电子设备600输入信息的任何类型的设备,输入单元606可以接收输入的数字或字符信息,以及产生与电子设备的用户设置和/或功能控制有关的键信号输入。输出单元607可以是能呈现信息的任何类型的设备,并且可以包括但不限于显示器、扬声器、视频/音频输出终端、振动器和/或打印机。存储单元608可以包括但不限于磁盘、光盘。通信单元609允许电子设备600通过诸如因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据,并且可以包括但不限于调制解调器、网卡、红外通信设备、无线通信收发机和/或芯片组,例如蓝牙TM设备、WiFi设备、WiMax设备、蜂窝通信设备和/或类似物。
[0108] 计算单元601可以是各种具有处理和计算能力的通用和/或专用处理组件。计算单元601的一些示例包括但不限于中央处理单元(CPU)、图形处理单元(GPU)、各种专用的人工智能(AI)计算芯片、各种运行机器学习模型算法的计算单元、数字信号处理器(DSP)、以及任何适当的处理器、控制器、微控制器等。计算单元601执行上文所描述的各个方法和处理。例如,在一些实施例中,文本识别方法或识别网络的训练方法可被实现为计算机软件程序,其被有形地包含于机器可读介质,例如存储单元608。在一些实施例中,计算机程序的部分或者全部可以经由ROM 602和/或通信单元609而被载入和/或安装到电子设备600上。在一些实施例中,计算单元601可以通过其他任何适当的方式(例如,借助于固件)而被配置为执行文本识别方法或识别网络的训练方法。
[0109] 用于实施本公开的方法的程序代码可以采用一个或多个编程语言的任何组合来编写。这些程序代码可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器或控制器,使得程序代码当由处理器或控制器执行时使流程图和/或框图中所规定的功能/操作被实施。程序代码可以完全在机器上执行、部分地在机器上执行,作为独立软件包部分地在机器上执行且部分地在远程机器上执行或完全在远程机器或服务器上执行。
[0110] 在本公开的上下文中,机器可读介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的程序。机器可读介质可以是机器可读信号介质或机器可读储存介质。机器可读介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或快闪存储器)、光纤、便捷式紧凑盘只读存储器(CD‑ROM)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
[0111] 如本公开使用的,术语“机器可读介质”和“计算机可读介质”指的是用于将机器指令和/或数据提供给可编程处理器的任何计算机程序产品、设备、和/或装置(例如,磁盘、光盘、存储器、可编程逻辑装置(PLD)),包括,接收作为机器可读信号的机器指令的机器可读介质。术语“机器可读信号”指的是用于将机器指令和/或数据提供给可编程处理器的任何信号。
[0112] 为了提供与用户的交互,可以在计算机上实施此处描述的系统和技术,该计算机具有:用于向用户显示信息的显示装置(例如,CRT(阴极射线管)或者LCD(液晶显示器)监视器);以及键盘和指向装置(例如,鼠标或者轨迹球),用户可以通过该键盘和该指向装置来将输入提供给计算机。其它种类的装置还可以用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的传感反馈(例如,视觉反馈、听觉反馈、或者触觉反馈);并且可以用任何形式(包括声输入、语音输入或者、触觉输入)来接收来自用户的输入。
[0113] 可以将此处描述的系统和技术实施在包括后台部件的计算系统(例如,作为数据服务器)、或者包括中间件部件的计算系统(例如,应用服务器)、或者包括前端部件的计算系统(例如,具有图形用户界面或者网络浏览器的用户计算机,用户可以通过该图形用户界面或者该网络浏览器来与此处描述的系统和技术的实施方式交互)、或者包括这种后台部件、中间件部件、或者前端部件的任何组合的计算系统中。可以通过任何形式或者介质的数字数据通信(例如,通信网络)来将系统的部件相互连接。通信网络的示例包括:局域网(LAN)、广域网(WAN)和互联网。
[0114] 计算机系统可以包括客户端和服务器。客户端和服务器一般远离彼此并且通常通过通信网络进行交互。通过在相应的计算机上运行并且彼此具有客户端‑服务器关系的计算机程序来产生客户端和服务器的关系。
[0115] 以上所述仅是本公开的具体实施方式,使本领域技术人员能够理解或实现本公开。对这些实施例的多种修改对本领域的技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本公开的精神或范围的情况下,在其它实施例中实现。因此,本公开将不会被限制于本文所述的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。