首页> 中国专利> 域名解析代理方法和系统、域名解析代理服务器

域名解析代理方法和系统、域名解析代理服务器

摘要

本发明提供了一种域名解析代理方法和系统、一种域名解析代理服务器,其中的域名解析代理方法具体包括:客户端发起基于HTTP协议的域名解析请求,所述域名解析请求中包括域名参数;接收所述域名解析请求;从所述域名解析请求中解析域名参数;依据解析得到的域名参数,向DNS服务器发起DNS查询请求;解析DNS服务器返回的DNS应答,并返回给客户端。本发明能够基于HTTP协议的DNS代理解析技术进行域名解析,从而提高域名解析的安全性。

著录项

  • 公开/公告号CN102790807A

    专利类型发明专利

  • 公开/公告日2012-11-21

    原文格式PDF

  • 申请/专利权人 奇智软件(北京)有限公司;

    申请/专利号CN201110126407.5

  • 发明设计人 李钊;董斌雁;

    申请日2011-05-16

  • 分类号H04L29/12(20060101);H04L29/06(20060101);

  • 代理机构11319 北京润泽恒知识产权代理有限公司;

  • 代理人苏培华

  • 地址 100016 北京市朝阳区酒仙桥路14号兆维大厦4层东侧单元

  • 入库时间 2023-12-18 07:26:32

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2022-03-15

    专利权人的姓名或者名称、地址的变更 IPC(主分类):H04L29/12 专利号:ZL2011101264075 变更事项:专利权人 变更前:北京鸿腾智能科技有限公司 变更后:三六零数字安全科技集团有限公司 变更事项:地址 变更前:100016 北京市朝阳区酒仙桥路甲10号3号楼15层17层1773 变更后:100016 北京市朝阳区酒仙桥路甲10号3号楼15层17层1773

    专利权人的姓名或者名称、地址的变更

  • 2016-05-25

    授权

    授权

  • 2016-04-13

    专利申请权的转移 IPC(主分类):H04L29/12 登记生效日:20160321 变更前: 变更后: 申请日:20110516

    专利申请权、专利权的转移

  • 2013-01-16

    实质审查的生效 IPC(主分类):H04L29/12 申请日:20110516

    实质审查的生效

  • 2012-11-21

    公开

    公开

说明书

技术领域

本发明涉及数字网络通信技术领域,特别是涉及一种域名解析代理方法 和系统、一种域名解析代理服务器。

背景技术

DNS(域名系统,Domain Name System)是一种用于TCP/IP(传输控 制协议/因特网互联协议,Transmission Control Protocol/Internet Protocol)的 应用程序的分布式数据库,它提供主机名字和IP地址之间的转换信息。

目前通常采用的域名解析方法如下:1)客户端向DNS服务器发送域名 解析请求;2)DNS服务器对域名进行解析;3)DNS服务器将解析结果返 回给客户端;以及4)客户端从该结果中选择一个IP地址进行访问。

目前,域名解析的过程需要调用Windows应用层API(应用程序编程接, 口,Application Programming Interface),不仅允许正常程序过滤和修改 Windows网络协议,而且更令恶意程序有机可乘,因此存在被恶意代码攻击 的可能。而DNS是一个开放的系统,可以自由地接收并发送信息,一旦受 到攻击,Windows客户端就会连接到指定的恶意服务器,木马或病毒操作集 团就会克隆实际服务器的大部分服务,并将一部分内容替换为木马或病毒, 从而侵害用户利益。

例如,由于Winsock SPI(服务商提供接口,Service Provider Interface) 和LSP(分层服务提供程序,Layered Service Provider)等API的设计,互联网 间谍软件和木马可以通过以下几个方面篡改Windows网络协议:1、修改 Winsock 2的LSP的堆栈设置运行木马DLL(动态链接库,Dynamic Link  Library)文件;2、添加在Winsock LSP 2额外协议栈运行木马DLL文件。而 一旦间谍木马DLL文件进入Winsock LSP2的堆栈,它就会悄悄地过滤互联 网通信信息,具体表现在:

1、窃取并篡改用户名和密码信息等,轻则可以让Windows客户端无法 打开网页,重则是网络钓鱼和金融诈骗给Windows客户端造成巨大损失;

2、可允许未经身份验证的远程攻击者迅速可靠地欺骗响应并将记录插 入DNS服务器或者Windows客户端缓存,从而重定向Internet通信量;

3、可允许未经身份验证的远程攻击者将特制的响应发送给易受攻击的 系统的DNS请求,从而使DNS缓存中毒,并将Internet通信量从合法位置 重定向至其他位置;

4、Windows应用层网络很多参数是通过注册表来配置的,这恰恰给了 恶意程序随意修改注册表的机会,使得网络失效或服务不能启用或篡改网络 配置,从而破坏正常网络应用。

总之,需要本领域技术人员迫切解决的一个技术问题就是:如何能够防 止域名解析过程中恶意代码的攻击,从而提高域名解析的安全性。

发明内容

本发明所要解决的技术问题是提供一种域名解析代理方法和系统、一种 域名解析代理服务器,能够基于HTTP协议的DNS代理解析技术进行域名 解析,从而提高域名解析的安全性。

为了解决上述问题,本发明公开了一种域名解析代理方法,包括:

客户端发起基于HTTP协议的域名解析请求,所述域名解析请求中包括 域名参数;

接收所述域名解析请求;

从所述域名解析请求中解析域名参数;

依据解析得到的域名参数,向DNS服务器发起DNS查询请求;

解析DNS服务器返回的DNS应答,并返回给客户端。

优选的,所述客户端通过如下步骤发起域名解析请求:

将需要解析的域名参数进行base64编码,并封装到HTTP GET命令请 求的包头中;

向域名解析代理服务器发送所述HTTP GET命令请求;

所述从所述域名解析请求中解析域名参数的步骤,包括:

所述域名解析代理服务器的CGI程序接收所述HTTP GET命令请求;

所述CGI程序通过对所述HTTP GET命令请求进行base64解码,解析 出所述域名参数。

优选的,在将需要解析的域名参数进行base64编码前,所述客户端发起 域名解析请求的步骤,还包括:

将需要解析的域名参数进行加密,以加密后的域名参数进行base64编 码;

在所述CGI程序对所述HTTP GET命令请求进行base64解码前,所述 从域名解析请求中解析域名参数的步骤,还包括:

对所述HTTP GET命令请求进行解密,以解密后的HTTP GET命令请 求进行base64解码。

优选的,所述解析DNS服务器返回的DNS应答,并返回给客户端的步 骤,包括:

将DNS服务器返回的DNS应答作为GET应答的内容,进行加密和 base64编码后,返回给客户端。

优选的,所述域名解析请求中还包括客户端请求序列号参数和校验码参 数;

在依据解析得到的域名参数,向DNS服务器发起DNS查询请求前,所 述方法还包括:

根据所述校验码参数,确认客户端是否为可信连接发起者,若是,则参 照所述客户端请求序列号参数及检验码参数生成一个消息摘要;

以该消息摘要作为关键字,将相应客户端作为连接节点插入待响应DNS 应答map中;

所述解析DNS服务器返回的DNS应答,并返回给客户端的步骤,还包 括:

通过查询消息摘要关键字,找到该客户端的连接节点;

将加密和base64编码后的DNS相应数据拷贝给该连接节点;

从待响应DNS应答map中删除该连接节点。

优选的,所述方法还包括:

所述客户端判断所述域名解析代理服务器返回的DNS应答,若该DNS 应答的HTTP状态码为200,则解析所述DNS应答;

若该DNS应答的HTTP状态码不为200,则返回错误,并结束本次查询 请求。

优选的,所述解析所述DNS应答的步骤,包括:

获取HTTP响应信息数据载荷;

将数据载荷进行base64解码,并解密,得到DNS解析数据。

优选的,所述解析所述DNS应答的步骤,还包括:

解析所述DNS解析数据的字段,得到相应的数据结构;

为所述数据结构申请动态内存,并将该动态内存插入缓存系统。

优选的,所述方法还包括:

在该DNS应答的HTTP状态码为200时,记录所述域名解析代理服务 器的游标位置,以所述游标位置作为下次域名解析的定向依据。

优选的,所述域名解析请求中还包括查询信息或者超时信息;

其中,所述查询信息包括递归查询或者非递归查询,所述超时信息表示 客户端得到DNS应答的最大时间。

另一方面,本发明还公开了一种域名解析代理服务器,其分别连接客户 端及DNS服务器,包括:

接收模块,用于接收客户端发起的基于HTTP协议的域名解析请求,所 述域名解析请求中包括域名参数;

第一解析模块,用于从所述域名解析请求中解析域名参数;

查询模块,用于依据解析得到的域名参数,向DNS服务器发起DNS查 询请求;

第二解析模块,用于解析DNS服务器返回的DNS应答;及

返回模块,用于将所述DNS应答返回给客户端。

优选的,所述接收模块和所述第一解析模块为CGI程序;

所述CGI程序,具体用于接收所述HTTP GET命令请求,并通过对所 述HTTP GET命令请求进行base64解码,解析出所述域名参数。

优选的,所述CGI程序还用于,在对所述HTTP GET命令请求进行base64 解码前,对所述HTTP GET命令请求进行解密,以解密后的HTTP GET命 令请求进行base64解码。

优选的,所述第二解析模块,具体用于将DNS服务器返回的DNS应答 作为GET应答的内容,进行加密和base64编码。

优选的,所述域名解析请求中还包括客户端请求序列号参数和校验码参 数;

所述方法域名解析代理服务器还包括:

认证模块,用于在所述第二解析模块依据解析得到的域名参数,向DNS 服务器发起DNS查询请求前,根据所述校验码参数,确认客户端是否为可 信连接发起者,若是,则参照所述客户端请求序列号参数及检验码参数生成 一个消息摘要;

节点插入模块,用于以该消息摘要作为关键字,将相应客户端作为连接 节点插入待响应DNS应答map中;

所述第二解析模块包括:

查询单元,用于通过查询消息摘要关键字,找到该客户端的连接节点;

拷贝单元,用于将加密和base64编码后的DNS相应数据拷贝给该连接 节点;及

删除单元,用于从待响应DNS应答map中删除该连接节点。

优选的,所述域名解析请求中还包括查询信息或者超时信息;

其中,所述查询信息包括递归查询或者非递归查询,所述超时信息表示 客户端得到DNS应答的最大时间。

另一方面,本发明还公开了一种域名解析代理系统,包括客户端、DNS 服务器及连接在所述客户端和DNS服务器之间的域名解析代理服务器,其 中,所述域名解析代理服务器包括:

接收模块,用于接收客户端发起的基于HTTP协议的域名解析请求,所 述域名解析请求中包括域名参数;

第一解析模块,用于从所述域名解析请求中解析域名参数;

查询模块,用于依据解析得到的域名参数,向DNS服务器发起DNS查 询请求;

第二解析模块,用于解析DNS服务器返回的DNS应答;及

返回模块,用于将所述DNS应答返回给客户端。

优选的,所述客户端包括:

判断模块,用于判断所述域名解析代理服务器返回的DNS应答;

应答解析模块,用于在该DNS应答的HTTP状态码为200时,解析所 述DNS应答;及

返回模块,用于在该DNS应答的HTTP状态码不为200时,返回错误, 并结束本次查询请求。

优选的,所述应答解析模块,包括:

获取单元,用于获取HTTP响应信息数据载荷;

解码解密单元,用于将数据载荷进行base64解码,并解密,得到DNS 解析数据。

优选的,所述应答解析模块,还包括:

字段解析单元,用于解析所述DNS解析数据的字段,得到相应的数据 结构;

申请单元,用于为所述数据结构申请动态内存;及

插入单元,用于将该动态内存插入缓存系统。

优选的,所述系统还包括:

记录模块,用于在该DNS应答的HTTP状态码为200时,记录所述域 名解析代理服务器的游标位置,以所述游标位置作为下次域名解析的定向依 据。

与现有技术相比,本发明具有以下优点:

首先,本发明采用基于HTTP协议的DNS代理解析技术进行域名解析, 由于基于HTTP协议的DNS代理解析技术无需调用任意Windows应用层网 络API,而是通过DNS报文代理服务,所以不受LSP恶意代码对DNS协议 的篡改、拦截、过滤、重定向等影响,不受hosts文件篡改等攻击影响;因 此,相对于现有域名解析方法,能够有效防止域名解析过程中恶意代码的攻 击,从而提高域名解析的安全性;

其次,本发明还可以将域名解析请求中的域名参数进行加密后发送给域 名解析代理服务器,这样,即使恶意代码劫持HTTP通讯,也无法解密。因 此,能够避免基于域名过滤的网络攻击;

再者,本发明还可以在客户端记录当前成功解析的域名解析代理服务器 所在的游标位置,以便在下次解析时,定向到前一个成功域名解析代理服务 器;

另外,本发明还可以由客户端指定域名解析的超时时间,以便客户端程 序在指定的时间内得到成功或失败的响应;

进一步,本发明还可以由客户端指定请求序列号参数和校验码参数,以 确保多客户端多服务器情况下的解析同步匹配算法;这样,域名解析代理服 务器可以根据客户端的请求序列号参数和校验码参数,把DNS服务器返回 的DNS解析信息打包给相应的客户端,保证正确送达到客户端,从而提高 域名解析的成功率;

更进一步,相对于现有技术Windows客户端一般仅支持非递归方式查询 的缺陷,本发明能够支持递归方式DNS查询以及非递归方式DNS查询;

总之,本发明能够实现基于HTTP协议的安全域名解析,能够提高DNS 解析的成功率,防止恶意代码针对Windows网络应用层及DNS协议本身的 攻击;本发明可应用于众多安全产品中,以起到防范应用层恶意代码攻击 DNS的作用,从而面向应用程序提供安全的DNS解析代理服务。

附图说明

图1是本发明一种域名解析代理方法实施例1的流程图;

图2是本发明一种域名解析代理服务器与客户端和DNS服务器之间的 关系示意图;

图3是本发明一种域名解析代理方法实施例2的流程图;

图4是本发明一种域名解析代理方法实施例3的流程图;

图5是本发明一种域名解析代理方法实施例4的流程图;

图6是本发明一种域名解析代理服务器实施例的结构图;

图7是本发明一种域名解析代理系统实施例的结构图。

具体实施方式

为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图 和具体实施方式对本发明作进一步详细的说明。

现有域名解析方法被恶意代码攻击的根本原因是,其需要调用Windows 应用层API,而Windows应用层API不仅允许正常程序过滤和修改Windows 网络协议,而且更令恶意程序有机可乘。

本专利发明人注意了这一点,因此创造性地提出了本发明实施例的核心 构思之一,也即,采用基于HTTP协议的DNS代理解析技术进行域名解析, 由于基于HTTP协议的DNS代理解析技术无需调用任意Windows应用层网 络API,而是通过DNS报文代理服务,所以不受LSP恶意代码对DNS协议 的篡改、拦截、过滤、重定向等影响,不受hosts文件篡改等攻击影响;因 此,相对于现有域名解析方法,能够有效防止域名解析过程中恶意代码的攻 击,从而提高域名解析的安全性。

参照图1,示出了本发明域名解析代理方法实施例1的流程图,具体可 以包括:

步骤101、接收客户端发起的基于HTTP协议的域名解析请求,所述域 名解析请求中可以包括域名参数;

本发明实施例中,所述客户端可以为Windows客户端,也可以为Linux 客户端,这里仅以Windows客户端为例进行说明,其它系统的客户端相互参 照即可。

HTTP协议定义了与服务器交互的不同方法,最基本的方法是GET和 POST。事实上GET适用于多数请求,而保留POST仅用于更新站点。根 据HTTP规范,GET用于信息获取,而且应该是安全的和幂等的。

在本发明的一种优选实施例中,为了提高域名解析的安全性,所述客户 端可以通过GET方法发起域名解析请求:

子步骤A1、将需要解析的域名参数进行base64编码,并封装到HTTP GET命令请求的包头中;

子步骤A2、向域名解析代理服务器发送所述HTTP GET命令请求。

当然,除了GET外,本领域技术人员还可以根据实际需要,采用其他 请求,如POST等,本发明对此不加以限制。

为了更有效避免基于域名过滤的网络攻击,在本发明的一种优选实施例 中,在将需要解析的域名参数进行base64编码前,所述客户端发起域名解析 请求的步骤,还可以包括:

子步骤A3、将需要解析的域名参数进行加密,以加密后的域名参数进 行base64编码。

将域名参数通过加密方式发送给域名解析代理服务器,即使恶意代码劫 持HTTP通讯,也无法解密。因此,能够避免基于域名过滤的网络攻击。

步骤102、从所述域名解析请求中解析主机参数;

参照图2,示出了域名解析代理服务器与客户端和DNS服务器之间的关 系示意图,其中,客户端应用程序可直接通过IP连接该域名解析代理服务 器,相对于现有技术客户端与DNS服务器进行之间通信交互,本实施例采 用域名解析代理服务器作为代理媒介,用于分别实现与客户端和DNS服务 器之间的通信:一方面,其可以基于HTTP协议安全解析来自客户端的域名 解析请求,并基于DNS协议传输给DNS服务器;另一方面,其可以基于 DNS协议安全解析来自DNS服务器的DNS应答,并基于HTTP协议返回给 客户端。

在本发明的一种优选实施例中,域名解析代理服务器可以指定CGI程序 处理来自客户端的HTTP GET命令请求,相应地,域名解析代理服务器可以 通过如下步骤从所述域名解析请求中解析域名参数:

子步骤B1、所述域名解析代理服务器的CGI程序接收所述HTTP GET 命令请求;

子步骤B2、所述CGI程序通过对所述HTTP GET命令请求进行base64 解码,解析出所述域名参数。

CGI(通用网关接口,Common Gate Interface)程序,通常运行在服务 器上,提供与客户端应用程序(如浏览器)之间的接口。CGI程序通常被用 来解释处理来自表单的输入信息,并在服务器产生相应的处理,或将相应的 信息反馈给浏览器。

CGI程序处理请求的原理通常为:通过Internet把用户请求送到服务器; 服务器接收用户请求并交给CGI程序处理;CGI程序把处理结果传送给服务 器;服务器把结果送回到用户。依据上述原理,步骤102-步骤104均由CGI 程序来完成。

对应于客户端加密主机域名的情形,在本发明的一种优选实施例中,在 所述CGI程序对所述HTTP GET命令请求进行base64解码前,所述从域名 解析请求中解析域名参数的步骤,还可以包括:

对所述HTTP GET命令请求进行解密,以解密后的HTTP GET命令请 求进行base64解码。

步骤103、依据解析得到的域名参数,向DNS服务器发起DNS查询请 求;

步骤104、解析DNS服务器返回的DNS应答,并返回给客户端。

在本发明的一种优选实施例中,所述步骤104具体可以包括:

将DNS服务器返回的DNS应答作为GET应答的内容,进行加密和 base64编码后,返回给客户端。

总之,由于本发明域名解析的过程无需调用Windows应用层网络API, 而是通过DNS报文代理服务,所以不受LSP恶意代码对DNS协议的篡改、 拦截、过滤、重定向等影响,不受hosts文件篡改等攻击影响。概括而言, 本发明能够实现基于HTTP DNS代理的安全DNS域名解析,从而能够提高 域名解析的成功率,防止恶意代码针对Windows网络应用层及DNS协议本 身的攻击。

在实际中,本发明可以应用于众多安全产品(例如,“360卫士”的系统 急救箱、木马云查杀引擎、主机防御系统等产品)中,从而可以防范应用层 恶意代码攻击DNS的作用,并且能够面向Windows客户端应用程序提供安 全的DNS解析服务。

参照图3,示出了本发明域名解析代理方法实施例2的流程图,具体可 以包括:

步骤301、接收客户端发起的基于HTTP协议的域名解析请求,所述域 名解析请求中可以包括域名参数、客户端请求序列号参数和校验码参数;

步骤302、从所述域名解析请求中解析域名参数;

步骤303、根据所述校验码参数,确认客户端是否为可信连接发起者, 若是,则参照所述客户端请求序列号参数及检验码参数生成一个消息摘要;

步骤304、以该消息摘要作为关键字,将相应客户端作为连接节点插入 待响应DNS应答map中;

步骤305、依据解析得到的域名参数,向DNS服务器发起DNS查询请 求;

步骤306、将DNS服务器返回的DNS应答作为GET应答的内容,进行 加密和base64编码;

步骤307、通过查询消息摘要关键字,找到该客户端的连接节点;

步骤308、将加密和base64编码后的DNS相应数据拷贝给该连接节点;

步骤309、从待响应DNS应答map中删除该连接节点。

相对于实施例1,本实施例可由客户端指定请求序列号参数和校验码参 数,以确保多客户端多服务器情况下的解析同步匹配算法。

首先,域名解析代理服务器可以根据校验码参数对客户端进行认证,只 有在确认客户端为可信连接发起者时,才会进行域名参数的解析;

其次,域名解析代理服务器可以根据请求序列号参数,把DNS服务器 返回的DNS应答打包给相应的客户端,以保证正确送达到客户端;本实施 中主要通过在待响应DNS应答map设置连接节点的方式来实现。

对于实施例2而言,由于其与实施例1基本相似,所以描述的比较简单, 相关之处参见实施例1的部分说明即可。

参照图4,示出了本发明域名解析代理方法实施例3的流程图,具体可 以包括:

步骤401、接收客户端发起的基于HTTP协议的HTTP GET命令请求, 所述HTTP GET命令请求中可以包括域名参数;

步骤402、域名解析代理服务器的CGI程序接收所述HTTP GET命令请 求;

步骤403、所述CGI程序通过对所述HTTP GET命令请求进行base64 解码,解析出所述域名参数;

步骤404、所述CGI程序依据解析得到的域名参数,向DNS服务器发 起DNS查询请求;

步骤405、解析DNS服务器返回的DNS应答,并返回给客户端;

步骤406、所述客户端判断所述域名解析代理服务器返回的DNS应答, 若该DNS应答的HTTP状态码为200,则解析所述DNS应答;

步骤407、若该DNS应答的HTTP状态码不为200,则返回错误,并结 束本次查询请求。

相对于实施例1,本实施例可由客户端根据域名解析代理服务器返回的 HTTP状态码,判断之前发送的HTTP GET命令请求是否被域名解析代理服 务器成功接收,这些的判断遵从HTTP协议。

在本发明的一种优选实施例中,所述解析所述DNS应答的步骤,具体 可以包括:

子步骤C1、获取HTTP响应信息数据载荷;

子步骤C2、将数据载荷进行base64解码,并解密,得到DNS解析数据。

在本发明另一种优选实施例中,所述解析所述DNS应答的步骤,还可 以包括:

子步骤D1、解析所述DNS解析数据的字段,得到相应的数据结构;

子步骤D2、为所述数据结构申请动态内存,并将该动态内存插入缓存 系统。

本优选实施例在客户端中设置缓存系统,并且将查询历史记录插入该缓 存系统,以便客户端再次查询相同的域名时,直接查询该缓存系统以提高查 询效率。

在具体实现中,为所述数据结构申请动态内存的步骤具体可以包括:

子步骤E1、递归释放成员变量m_pHost(数据类型为Phostent_Cache_t);

子步骤E2、动态分配数据结构类型为hostent_Cache_t并赋值给成员变 量m_pHost;

子步骤E3、若分配成功,则清零,否则返回FALSE;

子步骤E4、动态申请数据结构类型为struct hostent并赋值给 m_pHost->host;

子步骤E5、若分配成功,则清零,否则返回FALSE;

子步骤E6、长度和地址类型相应赋值为sizeof(unsigned long)和 AF_INET;

m_pHost->host->h_length=sizeof(unsigned long);

m_pHost->host->h_addrtype=AF_INET;

子步骤E7、获取OfficialName字段长度,分配长度加1的字符串数组, 并将OfficialName赋值给m_pHost->host->h_name;

子步骤E8、申请类型为char*的指针数组,并赋值给 m_pHost->host->h_addr_list

m_pHost->host->h_addr_list=new char*[DW_DNS_MAX_IP];

子步骤E9、若分配成功,则清零,否则返回FALSE;

子步骤E10、循环赋值解析后的IP地址给m_pHost->host->h_addr_list 数组;

子步骤E11、将TTL赋值给m_pHost->m_ttl;

子步骤E12、调用SetInsertCacheTime(m_pHost),设置插入缓存时的时 间戳。

子步骤E13、返回TRUE。

需要说明的是,上述TTL(生存时间,Time To Live)生存时间可由DNS 服务器根据实际情况指定;这样,只有在TTL未过期的情况下,该缓存系 统中的动态内存才能被使用。

总之,本优选实施例可以通过在Windows客户端构造DNS解析的数据 结构,来得到提供相同语义的编程接口,这样,就可以不受本地域名服务缓 存毒害(DNS Cache poisoning)的影响。

在本发明的另一优选实施例中,所述方法还可以包括:

在该DNS应答的HTTP状态码为200时,记录所述域名解析代理服务 器的游标位置,以所述游标位置作为下次域名解析的定向依据。

本优选实施例通过记录当前成功解析域名解析代理服务器游标位置,下 次解析时,定向到前一个成功域名解析代理服务器。

另外,本发明还可以支持编程接口级设置自定义的域名解析代理服务器 并且设置访问优先顺序。

参照图5,示出了本发明域名解析代理方法实施例4的流程图,具体可 以包括:

步骤501、接收客户端发起的基于HTTP协议的域名解析请求,所述域 名解析请求中可以包括域名参数、查询信息或者超时信息;其中,所述查询 信息可以包括递归查询或者非递归查询,所述超时信息表示客户端得到DNS 应答的最大时间;

步骤502、从所述域名解析请求中解析域名参数;

步骤503、依据解析得到的域名参数,向DNS服务器发起DNS查询请 求;

步骤504、解析DNS服务器返回的DNS应答,并返回给客户端。

相对于实施例1,本实施例具有如下优点:

1、可由客户端指定域名解析的超时,以便客户端应用程序在指定的时 间内得到成功或失败的响应;

2、支持递归方式DNS查询以及非递归方式DNS查询,Windows客户 端一般仅支持非递归方式查询。

由于使用HTTP协议作为客户端与域名解析代理服务器之间的通讯协 议,所以不受防火墙禁止DNSP协议或对DNS协议进行特定域名字段过滤 的影响,另外,由于后台DNS服务器可使用Bind 9或其他DNS服务器,并 可以配置成递归解析模式,从事使得解析DNS的成功率更高,解决了现有 技术中Windows客户端系统不支持递归解析的问题。

为使本领域技术人员更好地理解本发明,以下通过具体的示例来说明本 发明在实际中的应用,具体可以包括:

步骤S1、客户端将自己的IP地址、CPU ID、当前线程ID、需要解析的 域名、递归查询方式还是非递归查询方式标记、客户端请求序列号参数和校 验码参数等,基于HTTP协议按照一定的组合封装成一个数据结构,这里的 数据结构通常为HTTP GET命令请求;

在具体实现中,域名解析代理服务器可以提供给客户端如下接口函数:

函数BOOL CHttpDns::SetOption提供了应用程序根据自身需要对DNS 解析各个环节的选项设置,如单次接收、发送UDP数据报的超时时间、是 否逐个遍历域名解析代理服务器,设置自定义域名解析代理服务器等;

函数BOOL CHttpDns::gethostbyname_by_http_proxy(const char*pUrl, UINT*pIpList,)实现HTTP DNS代理请求服务的封装;

函数struct hostent*FAR CHttpDns::gethostbyname(const char*name)提 供对CHttpDns::gethostbyname_by_http_proxy()返回成功后将IP地址列表填 入新申请分配的struct hostent的相应域里。并将结果保存在缓存中。

其中,上述接口函数可以在现有Windows编程界面gethostbyname的基 础上实现,也即,本发明可以实现与gethostbyname语义相同的编程界面, 易于调用。

步骤S2、加密该数据结构,,并发送给域名解析代理服务器;

步骤S3、域名解析代理服务器解密;

步骤S4、根据所述校验码参数,确认客户端是否为可信连接发起者, 若是,则参照所述客户端请求序列号参数及检验码参数生成一个消息摘要;

步骤S5、以该消息摘要作为关键字,将相应客户端作为连接节点插入 待响应DNS应答map中;

本发明提供了一种DNS解析应答缓存节点描述符的结构示意:

步骤S6、依据解析得到的域名参数,向DNS服务器发起DNS查询请 求;

步骤S7、将DNS服务器返回的DNS应答作为GET应答的内容,进行 加密和base64编码;

步骤S8、通过查询消息摘要关键字,找到该客户端的连接节点;

步骤S9、将加密和base64编码后的DNS相应数据拷贝给该连接节点;

步骤S10、从待响应DNS应答map中删除该连接节点。

总之,本发明通过HTTP DNS的报文代理服务,即基于HTTP协议作为 发起DNS请求客户端与域名解析代理服务器之间的DNS解析代理协议,实 现了DNS的安全解析,能够有效防止任何恶意代码在Windows非特权环境 下的DNS攻击。

对于客户端而言,由于其采用HTTP协议发送域名解析请求,并且解析 域名解析代理服务器返回的数据载荷,所以能防范所有在客户端攻击DNS 协议的恶意程序。

另外,本发明可支持IPV4(Internet Protocol Version 4)和IPV6(Internet  Protocol Version 6),支持DNS SEC(DNS安全扩展,Domain Name System  Security Extensions),且支持各种加解密机制。

参照图6,示出了本发明一种域名解析代理服务器实施例的结构图,其 分别连接客户端及DNS服务器,具体可以包括:

接收模块601,用于接收客户端发起的基于HTTP协议的域名解析请求, 所述域名解析请求中包括域名参数;

第一解析模块602,用于从所述域名解析请求中解析域名参数;

查询模块603,用于依据解析得到的域名参数,向DNS服务器发起DNS 查询请求;

第二解析模块604,用于解析DNS服务器返回的DNS应答;及

返回模块605,用于将所述DNS应答返回给客户端。

在本发明的一种优选实施例中,可指定CGI程序执行所述接收模块601 和所述第一解析模块602的操作;

此时,所述CGI程序,可具体用于接收所述HTTP GET命令请求,并 通过对所述HTTP GET命令请求进行base64解码,解析出所述域名参数。 对于客户端发起HTTP GET命令请求的过程,请参照方法实施例的相关说 明,在此不作赘述。

在本发明的另一种优选实施例中,所述CGI程序还可用于,在对所述 HTTP GET命令请求进行base64解码前,对所述HTTP GET命令请求进行 解密,以解密后的HTTP GET命令请求进行base64解码。

在本发明实施例中,优选的是,所述第二解析模块604,可具体用于将 DNS服务器返回的DNS应答作为GET应答的内容,进行加密和base64编 码。

在本发明的一种优选实施例中,所述域名解析请求中还可以包括客户端 请求序列号参数和校验码参数;

相应地,所述方法域名解析代理服务器还可以包括:

认证模块,用于在所述第二解析模块依据解析得到的域名参数,向DNS 服务器发起DNS查询请求前,根据所述校验码参数,确认客户端是否为可 信连接发起者,若是,则参照所述客户端请求序列号参数及检验码参数生成 一个消息摘要;

节点插入模块,用于以该消息摘要作为关键字,将相应客户端作为连接 节点插入待响应DNS应答map中;

此时,所述第二解析模块604具体可以包括:

查询单元,用于通过查询消息摘要关键字,找到该客户端的连接节点;

拷贝单元,用于将加密和base64编码后的DNS相应数据拷贝给该连接 节点;及

删除单元,用于从待响应DNS应答map中删除该连接节点。

在本发明的再一种优选实施例中,所述域名解析请求中还可以包括查询 信息或者超时信息;

其中,所述查询信息包括递归查询或者非递归查询,所述超时信息表示 客户端得到DNS应答的最大时间。

对于域名解析代理服务器实施例而言,由于其与方法实施例基本相似, 所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

参照图7,示出了本发明一种域名解析代理系统实施例的结构图,具体 可以包括客户端701、DNS服务器703及连接在所述客户端和DNS服务器 之间的域名解析代理服务器702,其中,所述域名解析代理服务器702具体 可以包括:

接收模块721,用于接收客户端发起的基于HTTP协议的域名解析请求, 所述域名解析请求中包括域名参数;

第一解析模块722,用于从所述域名解析请求中解析域名参数;

查询模块723,用于依据解析得到的域名参数,向DNS服务器发起DNS 查询请求;

第二解析模块724,用于解析DNS服务器返回的DNS应答;及

返回模块725,用于将所述DNS应答返回给客户端。

在本发明的一种优选实施例中,所述客户端701具体可以包括:

判断模块,用于判断所述域名解析代理服务器返回的DNS应答;

应答解析模块,用于在该DNS应答的HTTP状态码为200时,解析所 述DNS应答;及

返回模块,用于在该DNS应答的HTTP状态码不为200时,返回错误, 并结束本次查询请求。

在本发明的另一种优选实施例中,所述应答解析模块,可以进一步包括:

获取单元,用于获取HTTP响应信息数据载荷;

解码解密单元,用于将数据载荷进行base64解码,并解密,得到DNS 解析数据。

在本发明的再一种优选实施例中,所述应答解析模块,还可以包括:

字段解析单元,用于解析所述DNS解析数据的字段,得到相应的数据 结构;

申请单元,用于为所述数据结构申请动态内存;及

插入单元,用于将该动态内存插入缓存系统。

在本发明实施例中,优选的是,所述系统还可以包括:

记录模块,用于在该DNS应答的HTTP状态码为200时,记录所述域 名解析代理服务器的游标位置,以所述游标位置作为下次域名解析的定向依 据。

对于域名解析代理服务器702的具体结构,由于其与域名解析代理服务 器实施例中的结构模块类似,故在此不作赘述。

对于系统实施例而言,由于其与方法实施例基本相似,所以描述的比较 简单,相关之处参见方法实施例的部分说明即可。

本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明 的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见 即可。

以上对本发明所提供的一种域名解析代理方法和系统、一种域名解析代 理服务器,进行了详细介绍,本文中应用了具体个例对本发明的原理及实施 方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核 心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实 施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为 对本发明的限制。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号