著录项信息
专利名称 | 域名解析代理方法和系统、域名解析代理服务器 |
申请号 | CN201110126407.5 | 申请日期 | 2011-05-16 |
法律状态 | 暂无 | 申报国家 | 中国 |
公开/公告日 | 2012-11-21 | 公开/公告号 | CN102790807A |
优先权 | 暂无 | 优先权号 | 暂无 |
主分类号 | H04L29/12 | IPC分类号 | H;0;4;L;2;9;/;1;2;;;H;0;4;L;2;9;/;0;6查看分类表>
|
申请人 | 奇智软件(北京)有限公司 | 申请人地址 | 北京市朝阳区酒仙桥路甲10号3号楼15层17层1773
变更
专利地址、主体等相关变化,请及时变更,防止失效 |
权利人 | 北京鸿腾智能科技有限公司 | 当前权利人 | 北京鸿腾智能科技有限公司 |
发明人 | 李钊;董斌雁 |
代理机构 | 北京润泽恒知识产权代理有限公司 | 代理人 | 苏培华 |
摘要
本发明提供了一种域名解析代理方法和系统、一种域名解析代理服务器,其中的域名解析代理方法具体包括:客户端发起基于HTTP协议的域名解析请求,所述域名解析请求中包括域名参数;接收所述域名解析请求;从所述域名解析请求中解析域名参数;依据解析得到的域名参数,向DNS服务器发起DNS查询请求;解析DNS服务器返回的DNS应答,并返回给客户端。本发明能够基于HTTP协议的DNS代理解析技术进行域名解析,从而提高域名解析的安全性。
1.一种域名解析代理方法,其特征在于,包括:
浏览器客户端发起基于HTTP协议的域名解析请求,所述域名解析请求中包括域名参数、浏览器客户端请求序列号参数和校验码参数;
接收所述浏览器客户端发起的所述域名解析请求;
从所述域名解析请求中解析域名参数;
依据解析得到的域名参数,基于DNS协议向DNS服务器发起DNS查询请求;
解析DNS服务器基于DNS协议返回的DNS应答,并基于HTTP协议将所述DNS应答返回给所述浏览器客户端;
其中,在依据解析得到的域名参数,基于DNS协议向DNS服务器发起DNS查询请求前,所述方法还包括:
根据所述校验码参数,确认浏览器客户端是否为可信连接发起者,若是,则参照所述浏览器客户端请求序列号参数及检验码参数生成一个消息摘要;
以该消息摘要作为关键字,将相应浏览器客户端作为连接节点插入待响应DNS应答map中;
所述解析DNS服务器基于DNS协议返回的DNS应答,并基于HTTP协议将所述DNS应答返回给浏览器客户端的步骤,还包括:
将DNS服务器基于DNS协议返回的DNS应答作为GET应答的内容,进行加密和base64编码;
通过查询消息摘要关键字,找到该浏览器客户端的连接节点;
将加密和base64编码后的DNS相应数据拷贝给该连接节点;
从待响应DNS应答map中删除该连接节点。
2.根据权利要求1所述的方法,其特征在于,所述浏览器客户端通过如下步骤发起域名解析请求:
将需要解析的域名参数进行base64编码,并封装到HTTP GET命令请求的包头中;
向域名解析代理服务器发送所述HTTP GET命令请求;
所述从所述域名解析请求中解析域名参数的步骤,包括:
所述域名解析代理服务器的CGI程序接收所述HTTP GET命令请求;
所述CGI程序通过对所述HTTP GET命令请求进行base64解码,解析出所述域名参数。
3.根据权利要求2所述的方法,其特征在于,在将需要解析的域名参数进行base64编码前,所述浏览器客户端发起域名解析请求的步骤,还包括:
将需要解析的域名参数进行加密,以加密后的域名参数进行base64编码;
在所述CGI程序对所述HTTP GET命令请求进行base64解码前,所述从域名解析请求中解析域名参数的步骤,还包括:
对所述HTTP GET命令请求进行解密,以解密后的HTTP GET命令请求进行base64解码。
4.根据权利要求2所述的方法,其特征在于,还包括:
所述浏览器客户端判断所述域名解析代理服务器基于HTTP协议返回的DNS应答,若该DNS应答的HTTP状态码为200,则解析所述DNS应答;
若该DNS应答的HTTP状态码不为200,则返回错误,并结束本次查询请求。
5.根据权利要求4所述的方法,其特征在于,所述解析所述DNS应答的步骤,包括:
获取HTTP响应信息数据载荷;
将数据载荷进行base64解码,并解密,得到DNS解析数据。
6.根据权利要求5所述的方法,其特征在于,所述解析所述DNS应答的步骤,还包括:
解析所述DNS解析数据的字段,得到相应的数据结构;
为所述数据结构申请动态内存,并将该动态内存插入缓存系统。
7.根据权利要求4所述的方法,其特征在于,还包括:
在该DNS应答的HTTP状态码为200时,记录所述域名解析代理服务器的游标位置,以所述游标位置作为下次域名解析的定向依据。
8.根据权利要求1所述的方法,其特征在于,所述域名解析请求中还包括查询信息或者超时信息;
其中,所述查询信息包括递归查询或者非递归查询,所述超时信息表示浏览器客户端得到DNS应答的最大时间。
9.一种域名解析代理服务器,其特征在于,其分别连接浏览器客户端及DNS服务器,包括:
接收模块,用于接收浏览器客户端发起的基于HTTP协议的域名解析请求,所述域名解析请求中包括域名参数、浏览器客户端请求序列号参数和校验码参数;
第一解析模块,用于从所述域名解析请求中解析域名参数;
查询模块,用于依据解析得到的域名参数,基于DNS协议向DNS服务器发起DNS查询请求;
第二解析模块,用于解析DNS服务器基于DNS协议返回的DNS应答,将DNS服务器基于DNS协议返回的DNS应答作为GET应答的内容,进行加密和base64编码;及
返回模块,用于基于HTTP协议将所述DNS应答返回给浏览器客户端;
其中,所述域名解析代理服务器还包括:
认证模块,用于在所述第二解析模块依据解析得到的域名参数,基于DNS协议向DNS服务器发起DNS查询请求前,根据所述校验码参数,确认浏览器客户端是否为可信连接发起者,若是,则参照所述浏览器客户端请求序列号参数及检验码参数生成一个消息摘要;
节点插入模块,用于以该消息摘要作为关键字,将相应浏览器客户端作为连接节点插入待响应DNS应答map中;
所述第二解析模块包括:
查询单元,用于通过查询消息摘要关键字,找到该浏览器客户端的连接节点;
拷贝单元,用于将加密和base64编码后的DNS相应数据拷贝给该连接节点;及删除单元,用于从待响应DNS应答map中删除该连接节点。
10.根据权利要求9所述的域名解析代理服务器,其特征在于,所述接收模块和所述第一解析模块为CGI程序;
所述CGI程序,具体用于接收所述HTTP GET命令请求,并通过对所述HTTP GET命令请求进行base64解码,解析出所述域名参数。
11.根据权利要求10所述的域名解析代理服务器,其特征在于,所述CGI程序还用于,在对所述HTTP GET命令请求进行base64解码前,对所述HTTP GET命令请求进行解密,以解密后的HTTP GET命令请求进行base64解码。
12.根据权利要求11所述的域名解析代理服务器,其特征在于,所述域名解析请求中还包括查询信息或者超时信息;
其中,所述查询信息包括递归查询或者非递归查询,所述超时信息表示浏览器客户端得到DNS应答的最大时间。
13.一种域名解析代理系统,其特征在于,包括浏览器客户端、DNS服务器及连接在所述浏览器客户端和DNS服务器之间的域名解析代理服务器,其中,所述域名解析代理服务器包括:
接收模块,用于接收浏览器客户端发起的基于HTTP协议的域名解析请求,所述域名解析请求中包括域名参数、浏览器客户端请求序列号参数和校验码参数;
第一解析模块,用于从所述域名解析请求中解析域名参数;
查询模块,用于依据解析得到的域名参数,基于DNS协议向DNS服务器发起DNS查询请求;
第二解析模块,用于解析DNS服务器基于DNS协议返回的DNS应答,将DNS服务器基于DNS协议返回的DNS应答作为GET应答的内容,进行加密和base64编码;及
返回模块,用于基于HTTP协议将所述DNS应答返回给浏览器客户端;
其中,所述域名解析代理服务器还包括:
认证模块,用于在所述第二解析模块依据解析得到的域名参数,基于DNS协议向DNS服务器发起DNS查询请求前,根据所述校验码参数,确认浏览器客户端是否为可信连接发起者,若是,则参照所述浏览器客户端请求序列号参数及检验码参数生成一个消息摘要;
节点插入模块,用于以该消息摘要作为关键字,将相应浏览器客户端作为连接节点插入待响应DNS应答map中;
所述第二解析模块包括:
查询单元,用于通过查询消息摘要关键字,找到该浏览器客户端的连接节点;
拷贝单元,用于将加密和base64编码后的DNS相应数据拷贝给该连接节点;及删除单元,用于从待响应DNS应答map中删除该连接节点。
14.根据权利要求13所述的域名解析代理系统,其特征在于,所述浏览器客户端包括:
判断模块,用于判断所述域名解析代理服务器基于HTTP协议返回的DNS应答;
应答解析模块,用于在该DNS应答的HTTP状态码为200时,解析所述DNS应答;及返回模块,用于在该DNS应答的HTTP状态码不为200时,返回错误,并结束本次查询请求。
15.根据权利要求14所述的域名解析代理系统,其特征在于,所述应答解析模块,包括:
获取单元,用于获取HTTP响应信息数据载荷;
解码解密单元,用于将数据载荷进行base64解码,并解密,得到DNS解析数据。
16.根据权利要求15所述的域名解析代理系统,其特征在于,所述应答解析模块,还包括:
字段解析单元,用于解析所述DNS解析数据的字段,得到相应的数据结构;
申请单元,用于为所述数据结构申请动态内存;及
插入单元,用于将该动态内存插入缓存系统。
17.根据权利要求14所述的域名解析代理系统,其特征在于,还包括:
记录模块,用于在该DNS应答的HTTP状态码为200时,记录所述域名解析代理服务器的游标位置,以所述游标位置作为下次域名解析的定向依据。
域名解析代理方法和系统、域名解析代理服务器\n技术领域\n[0001] 本发明涉及数字网络通信技术领域,特别是涉及一种域名解析代理方法和系统、一种域名解析代理服务器。\n背景技术\n[0002] DNS(域名系统,Domain Name System)是一种用于TCP/IP(传输控制协议/因特网互联协议,Transmission Control Protocol/Internet Protocol)的应用程序的分布式数据库,它提供主机名字和IP地址之间的转换信息。\n[0003] 目前通常采用的域名解析方法如下:1)客户端向DNS服务器发送域名解析请求;2)DNS服务器对域名进行解析;3)DNS服务器将解析结果返回给客户端;以及4)客户端从该结果中选择一个IP地址进行访问。\n[0004] 目前,域名解析的过程需要调用Windows应用层API(应用程序编程接,口,Application Programming Interface),不仅允许正常程序过滤和修改Windows网络协议,而且更令恶意程序有机可乘,因此存在被恶意代码攻击的可能。而DNS是一个开放的系统,可以自由地接收并发送信息,一旦受到攻击,Windows客户端就会连接到指定的恶意服务器,木马或病毒操作集团就会克隆实际服务器的大部分服务,并将一部分内容替换为木马或病毒,从而侵害用户利益。\n[0005] 例如,由于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的堆栈,它就会悄悄地过滤互联网通信信息,具体表现在:\n[0006] 1、窃取并篡改用户名和密码信息等,轻则可以让Windows客户端无法打开网页,重则是网络钓鱼和金融诈骗给Windows客户端造成巨大损失;\n[0007] 2、可允许未经身份验证的远程攻击者迅速可靠地欺骗响应并将记录插入DNS服务器或者Windows客户端缓存,从而重定向Internet通信量;\n[0008] 3、可允许未经身份验证的远程攻击者将特制的响应发送给易受攻击的系统的DNS请求,从而使DNS缓存中毒,并将Internet通信量从合法位置重定向至其他位置;\n[0009] 4、Windows应用层网络很多参数是通过注册表来配置的,这恰恰给了恶意程序随意修改注册表的机会,使得网络失效或服务不能启用或篡改网络配置,从而破坏正常网络应用。\n[0010] 总之,需要本领域技术人员迫切解决的一个技术问题就是:如何能够防止域名解析过程中恶意代码的攻击,从而提高域名解析的安全性。\n发明内容\n[0011] 本发明所要解决的技术问题是提供一种域名解析代理方法和系统、一种域名解析代理服务器,能够基于HTTP协议的DNS代理解析技术进行域名解析,从而提高域名解析的安全性。\n[0012] 为了解决上述问题,本发明公开了一种域名解析代理方法,包括:\n[0013] 客户端发起基于HTTP协议的域名解析请求,所述域名解析请求中包括域名参数;\n[0014] 接收所述域名解析请求;\n[0015] 从所述域名解析请求中解析域名参数;\n[0016] 依据解析得到的域名参数,向DNS服务器发起DNS查询请求;\n[0017] 解析DNS服务器返回的DNS应答,并返回给客户端。\n[0018] 优选的,所述客户端通过如下步骤发起域名解析请求:\n[0019] 将需要解析的域名参数进行base64编码,并封装到HTTP GET命令请求的包头中;\n[0020] 向域名解析代理服务器发送所述HTTP GET命令请求;\n[0021] 所述从所述域名解析请求中解析域名参数的步骤,包括:\n[0022] 所述域名解析代理服务器的CGI程序接收所述HTTP GET命令请求;\n[0023] 所述CGI程序通过对所述HTTP GET命令请求进行base64解码,解析出所述域名参数。\n[0024] 优选的,在将需要解析的域名参数进行base64编码前,所述客户端发起域名解析请求的步骤,还包括:\n[0025] 将需要解析的域名参数进行加密,以加密后的域名参数进行base64编码;\n[0026] 在所述CGI程序对所述HTTP GET命令请求进行base64解码前,所述从域名解析请求中解析域名参数的步骤,还包括:\n[0027] 对所述HTTP GET命令请求进行解密,以解密后的HTTP GET命令请求进行base64解码。\n[0028] 优选的,所述解析DNS服务器返回的DNS应答,并返回给客户端的步骤,包括:\n[0029] 将DNS服务器返回的DNS应答作为GET应答的内容,进行加密和base64编码后,返回给客户端。\n[0030] 优选的,所述域名解析请求中还包括客户端请求序列号参数和校验码参数;\n[0031] 在依据解析得到的域名参数,向DNS服务器发起DNS查询请求前,所述方法还包括:\n[0032] 根据所述校验码参数,确认客户端是否为可信连接发起者,若是,则参照所述客户端请求序列号参数及检验码参数生成一个消息摘要;\n[0033] 以该消息摘要作为关键字,将相应客户端作为连接节点插入待响应DNS应答map中;\n[0034] 所述解析DNS服务器返回的DNS应答,并返回给客户端的步骤,还包括:\n[0035] 通过查询消息摘要关键字,找到该客户端的连接节点;\n[0036] 将加密和base64编码后的DNS相应数据拷贝给该连接节点;\n[0037] 从待响应DNS应答map中删除该连接节点。\n[0038] 优选的,所述方法还包括:\n[0039] 所述客户端判断所述域名解析代理服务器返回的DNS应答,若该DNS应答的HTTP状态码为200,则解析所述DNS应答;\n[0040] 若该DNS应答的HTTP状态码不为200,则返回错误,并结束本次查询请求。\n[0041] 优选的,所述解析所述DNS应答的步骤,包括:\n[0042] 获取HTTP响应信息数据载荷;\n[0043] 将数据载荷进行base64解码,并解密,得到DNS解析数据。\n[0044] 优选的,所述解析所述DNS应答的步骤,还包括:\n[0045] 解析所述DNS解析数据的字段,得到相应的数据结构;\n[0046] 为所述数据结构申请动态内存,并将该动态内存插入缓存系统。\n[0047] 优选的,所述方法还包括:\n[0048] 在该DNS应答的HTTP状态码为200时,记录所述域名解析代理服务器的游标位置,以所述游标位置作为下次域名解析的定向依据。\n[0049] 优选的,所述域名解析请求中还包括查询信息或者超时信息;\n[0050] 其中,所述查询信息包括递归查询或者非递归查询,所述超时信息表示客户端得到DNS应答的最大时间。\n[0051] 另一方面,本发明还公开了一种域名解析代理服务器,其分别连接客户端及DNS服务器,包括:\n[0052] 接收模块,用于接收客户端发起的基于HTTP协议的域名解析请求,所述域名解析请求中包括域名参数;\n[0053] 第一解析模块,用于从所述域名解析请求中解析域名参数;\n[0054] 查询模块,用于依据解析得到的域名参数,向DNS服务器发起DNS查询请求;\n[0055] 第二解析模块,用于解析DNS服务器返回的DNS应答;及\n[0056] 返回模块,用于将所述DNS应答返回给客户端。\n[0057] 优选的,所述接收模块和所述第一解析模块为CGI程序;\n[0058] 所述CGI程序,具体用于接收所述HTTP GET命令请求,并通过对所述HTTP GET命令请求进行base64解码,解析出所述域名参数。\n[0059] 优选的,所述CGI程序还用于,在对所述HTTP GET命令请求进行base64解码前,对所述HTTP GET命令请求进行解密,以解密后的HTTP GET命令请求进行base64解码。\n[0060] 优选的,所述第二解析模块,具体用于将DNS服务器返回的DNS应答作为GET应答的内容,进行加密和base64编码。\n[0061] 优选的,所述域名解析请求中还包括客户端请求序列号参数和校验码参数;\n[0062] 所述方法域名解析代理服务器还包括:\n[0063] 认证模块,用于在所述第二解析模块依据解析得到的域名参数,向DNS服务器发起DNS查询请求前,根据所述校验码参数,确认客户端是否为可信连接发起者,若是,则参照所述客户端请求序列号参数及检验码参数生成一个消息摘要;\n[0064] 节点插入模块,用于以该消息摘要作为关键字,将相应客户端作为连接节点插入待响应DNS应答map中;\n[0065] 所述第二解析模块包括:\n[0066] 查询单元,用于通过查询消息摘要关键字,找到该客户端的连接节点;\n[0067] 拷贝单元,用于将加密和base64编码后的DNS相应数据拷贝给该连接节点;及[0068] 删除单元,用于从待响应DNS应答map中删除该连接节点。\n[0069] 优选的,所述域名解析请求中还包括查询信息或者超时信息;\n[0070] 其中,所述查询信息包括递归查询或者非递归查询,所述超时信息表示客户端得到DNS应答的最大时间。\n[0071] 另一方面,本发明还公开了一种域名解析代理系统,包括客户端、DNS服务器及连接在所述客户端和DNS服务器之间的域名解析代理服务器,其中,所述域名解析代理服务器包括:\n[0072] 接收模块,用于接收客户端发起的基于HTTP协议的域名解析请求,所述域名解析请求中包括域名参数;\n[0073] 第一解析模块,用于从所述域名解析请求中解析域名参数;\n[0074] 查询模块,用于依据解析得到的域名参数,向DNS服务器发起DNS查询请求;\n[0075] 第二解析模块,用于解析DNS服务器返回的DNS应答;及\n[0076] 返回模块,用于将所述DNS应答返回给客户端。\n[0077] 优选的,所述客户端包括:\n[0078] 判断模块,用于判断所述域名解析代理服务器返回的DNS应答;\n[0079] 应答解析模块,用于在该DNS应答的HTTP状态码为200时,解析所述DNS应答;及[0080] 返回模块,用于在该DNS应答的HTTP状态码不为200时,返回错误,并结束本次查询请求。\n[0081] 优选的,所述应答解析模块,包括:\n[0082] 获取单元,用于获取HTTP响应信息数据载荷;\n[0083] 解码解密单元,用于将数据载荷进行base64解码,并解密,得到DNS解析数据。\n[0084] 优选的,所述应答解析模块,还包括:\n[0085] 字段解析单元,用于解析所述DNS解析数据的字段,得到相应的数据结构;\n[0086] 申请单元,用于为所述数据结构申请动态内存;及\n[0087] 插入单元,用于将该动态内存插入缓存系统。\n[0088] 优选的,所述系统还包括:\n[0089] 记录模块,用于在该DNS应答的HTTP状态码为200时,记录所述域名解析代理服务器的游标位置,以所述游标位置作为下次域名解析的定向依据。\n[0090] 与现有技术相比,本发明具有以下优点:\n[0091] 首先,本发明采用基于HTTP协议的DNS代理解析技术进行域名解析,由于基于HTTP协议的DNS代理解析技术无需调用任意Windows应用层网络API,而是通过DNS报文代理服务,所以不受LSP恶意代码对DNS协议的篡改、拦截、过滤、重定向等影响,不受hosts文件篡改等攻击影响;因此,相对于现有域名解析方法,能够有效防止域名解析过程中恶意代码的攻击,从而提高域名解析的安全性;\n[0092] 其次,本发明还可以将域名解析请求中的域名参数进行加密后发送给域名解析代理服务器,这样,即使恶意代码劫持HTTP通讯,也无法解密。因此,能够避免基于域名过滤的网络攻击;\n[0093] 再者,本发明还可以在客户端记录当前成功解析的域名解析代理服务器所在的游标位置,以便在下次解析时,定向到前一个成功域名解析代理服务器;\n[0094] 另外,本发明还可以由客户端指定域名解析的超时时间,以便客户端程序在指定的时间内得到成功或失败的响应;\n[0095] 进一步,本发明还可以由客户端指定请求序列号参数和校验码参数,以确保多客户端多服务器情况下的解析同步匹配算法;这样,域名解析代理服务器可以根据客户端的请求序列号参数和校验码参数,把DNS服务器返回的DNS解析信息打包给相应的客户端,保证正确送达到客户端,从而提高域名解析的成功率;\n[0096] 更进一步,相对于现有技术Windows客户端一般仅支持非递归方式查询的缺陷,本发明能够支持递归方式DNS查询以及非递归方式DNS查询;\n[0097] 总之,本发明能够实现基于HTTP协议的安全域名解析,能够提高DNS解析的成功率,防止恶意代码针对Windows网络应用层及DNS协议本身的攻击;本发明可应用于众多安全产品中,以起到防范应用层恶意代码攻击DNS的作用,从而面向应用程序提供安全的DNS解析代理服务。\n附图说明\n[0098] 图1是本发明一种域名解析代理方法实施例1的流程图;\n[0099] 图2是本发明一种域名解析代理服务器与客户端和DNS服务器之间的关系示意图;\n[0100] 图3是本发明一种域名解析代理方法实施例2的流程图;\n[0101] 图4是本发明一种域名解析代理方法实施例3的流程图;\n[0102] 图5是本发明一种域名解析代理方法实施例4的流程图;\n[0103] 图6是本发明一种域名解析代理服务器实施例的结构图;\n[0104] 图7是本发明一种域名解析代理系统实施例的结构图。\n具体实施方式\n[0105] 为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。\n[0106] 现有域名解析方法被恶意代码攻击的根本原因是,其需要调用Windows应用层API,而Windows应用层API不仅允许正常程序过滤和修改Windows网络协议,而且更令恶意程序有机可乘。\n[0107] 本专利发明人注意了这一点,因此创造性地提出了本发明实施例的核心构思之一,也即,采用基于HTTP协议的DNS代理解析技术进行域名解析,由于基于HTTP协议的DNS代理解析技术无需调用任意Windows应用层网络API,而是通过DNS报文代理服务,所以不受LSP恶意代码对DNS协议的篡改、拦截、过滤、重定向等影响,不受hosts文件篡改等攻击影响;因此,相对于现有域名解析方法,能够有效防止域名解析过程中恶意代码的攻击,从而提高域名解析的安全性。\n[0108] 参照图1,示出了本发明域名解析代理方法实施例1的流程图,具体可以包括:\n[0109] 步骤101、接收客户端发起的基于HTTP协议的域名解析请求,所述域名解析请求中可以包括域名参数;\n[0110] 本发明实施例中,所述客户端可以为Windows客户端,也可以为Linux客户端,这里仅以Windows客户端为例进行说明,其它系统的客户端相互参照即可。\n[0111] HTTP协议定义了与服务器交互的不同方法,最基本的方法是GET和POST。事实上GET适用于多数请求,而保留POST仅用于更新站点。根据HTTP规范,GET用于信息获取,而且应该是安全的和幂等的。\n[0112] 在本发明的一种优选实施例中,为了提高域名解析的安全性,所述客户端可以通过GET方法发起域名解析请求:\n[0113] 子步骤A1、将需要解析的域名参数进行base64编码,并封装到HTTPGET命令请求的包头中;\n[0114] 子步骤A2、向域名解析代理服务器发送所述HTTP GET命令请求。\n[0115] 当然,除了GET外,本领域技术人员还可以根据实际需要,采用其他请求,如POST等,本发明对此不加以限制。\n[0116] 为了更有效避免基于域名过滤的网络攻击,在本发明的一种优选实施例中,在将需要解析的域名参数进行base64编码前,所述客户端发起域名解析请求的步骤,还可以包括:\n[0117] 子步骤A3、将需要解析的域名参数进行加密,以加密后的域名参数进行base64编码。\n[0118] 将域名参数通过加密方式发送给域名解析代理服务器,即使恶意代码劫持HTTP通讯,也无法解密。因此,能够避免基于域名过滤的网络攻击。\n[0119] 步骤102、从所述域名解析请求中解析主机参数;\n[0120] 参照图2,示出了域名解析代理服务器与客户端和DNS服务器之间的关系示意图,其中,客户端应用程序可直接通过IP连接该域名解析代理服务器,相对于现有技术客户端与DNS服务器进行之间通信交互,本实施例采用域名解析代理服务器作为代理媒介,用于分别实现与客户端和DNS服务器之间的通信:一方面,其可以基于HTTP协议安全解析来自客户端的域名解析请求,并基于DNS协议传输给DNS服务器;另一方面,其可以基于DNS协议安全解析来自DNS服务器的DNS应答,并基于HTTP协议返回给客户端。\n[0121] 在本发明的一种优选实施例中,域名解析代理服务器可以指定CGI程序处理来自客户端的HTTP GET命令请求,相应地,域名解析代理服务器可以通过如下步骤从所述域名解析请求中解析域名参数:\n[0122] 子步骤B1、所述域名解析代理服务器的CGI程序接收所述HTTP GET命令请求;\n[0123] 子步骤B2、所述CGI程序通过对所述HTTP GET命令请求进行base64解码,解析出所述域名参数。\n[0124] CGI(通用网关接口,Common Gate Interface)程序,通常运行在服务器上,提供与客户端应用程序(如浏览器)之间的接口。CGI程序通常被用来解释处理来自表单的输入信息,并在服务器产生相应的处理,或将相应的信息反馈给浏览器。\n[0125] CGI程序处理请求的原理通常为:通过Internet把用户请求送到服务器;服务器接收用户请求并交给CGI程序处理;CGI程序把处理结果传送给服务器;服务器把结果送回到用户。依据上述原理,步骤102-步骤104均由CGI程序来完成。\n[0126] 对应于客户端加密主机域名的情形,在本发明的一种优选实施例中,在所述CGI程序对所述HTTP GET命令请求进行base64解码前,所述从域名解析请求中解析域名参数的步骤,还可以包括:\n[0127] 对所述HTTP GET命令请求进行解密,以解密后的HTTP GET命令请求进行base64解码。\n[0128] 步骤103、依据解析得到的域名参数,向DNS服务器发起DNS查询请求;\n[0129] 步骤104、解析DNS服务器返回的DNS应答,并返回给客户端。\n[0130] 在本发明的一种优选实施例中,所述步骤104具体可以包括:\n[0131] 将DNS服务器返回的DNS应答作为GET应答的内容,进行加密和base64编码后,返回给客户端。\n[0132] 总之,由于本发明域名解析的过程无需调用Windows应用层网络API,而是通过DNS报文代理服务,所以不受LSP恶意代码对DNS协议的篡改、拦截、过滤、重定向等影响,不受hosts文件篡改等攻击影响。概括而言,本发明能够实现基于HTTP DNS代理的安全DNS域名解析,从而能够提高域名解析的成功率,防止恶意代码针对Windows网络应用层及DNS协议本身的攻击。\n[0133] 在实际中,本发明可以应用于众多安全产品(例如,“360卫士”的系统急救箱、木马云查杀引擎、主机防御系统等产品)中,从而可以防范应用层恶意代码攻击DNS的作用,并且能够面向Windows客户端应用程序提供安全的DNS解析服务。\n[0134] 参照图3,示出了本发明域名解析代理方法实施例2的流程图,具体可以包括:\n[0135] 步骤301、接收客户端发起的基于HTTP协议的域名解析请求,所述域名解析请求中可以包括域名参数、客户端请求序列号参数和校验码参数;\n[0136] 步骤302、从所述域名解析请求中解析域名参数;\n[0137] 步骤303、根据所述校验码参数,确认客户端是否为可信连接发起者,若是,则参照所述客户端请求序列号参数及检验码参数生成一个消息摘要;\n[0138] 步骤304、以该消息摘要作为关键字,将相应客户端作为连接节点插入待响应DNS应答map中;\n[0139] 步骤305、依据解析得到的域名参数,向DNS服务器发起DNS查询请求;\n[0140] 步骤306、将DNS服务器返回的DNS应答作为GET应答的内容,进行加密和base64编码;\n[0141] 步骤307、通过查询消息摘要关键字,找到该客户端的连接节点;\n[0142] 步骤308、将加密和base64编码后的DNS相应数据拷贝给该连接节点;\n[0143] 步骤309、从待响应DNS应答map中删除该连接节点。\n[0144] 相对于实施例1,本实施例可由客户端指定请求序列号参数和校验码参数,以确保多客户端多服务器情况下的解析同步匹配算法。\n[0145] 首先,域名解析代理服务器可以根据校验码参数对客户端进行认证,只有在确认客户端为可信连接发起者时,才会进行域名参数的解析;\n[0146] 其次,域名解析代理服务器可以根据请求序列号参数,把DNS服务器返回的DNS应答打包给相应的客户端,以保证正确送达到客户端;本实施中主要通过在待响应DNS应答map设置连接节点的方式来实现。\n[0147] 对于实施例2而言,由于其与实施例1基本相似,所以描述的比较简单,相关之处参见实施例1的部分说明即可。\n[0148] 参照图4,示出了本发明域名解析代理方法实施例3的流程图,具体可以包括:\n[0149] 步骤401、接收客户端发起的基于HTTP协议的HTTP GET命令请求,所述HTTP GET命令请求中可以包括域名参数;\n[0150] 步骤402、域名解析代理服务器的CGI程序接收所述HTTP GET命令请求;\n[0151] 步骤403、所述CGI程序通过对所述HTTP GET命令请求进行base64解码,解析出所述域名参数;\n[0152] 步骤404、所述CGI程序依据解析得到的域名参数,向DNS服务器发起DNS查询请求;\n[0153] 步骤405、解析DNS服务器返回的DNS应答,并返回给客户端;\n[0154] 步骤406、所述客户端判断所述域名解析代理服务器返回的DNS应答,若该DNS应答的HTTP状态码为200,则解析所述DNS应答;\n[0155] 步骤407、若该DNS应答的HTTP状态码不为200,则返回错误,并结束本次查询请求。\n[0156] 相对于实施例1,本实施例可由客户端根据域名解析代理服务器返回的HTTP状态码,判断之前发送的HTTP GET命令请求是否被域名解析代理服务器成功接收,这些的判断遵从HTTP协议。\n[0157] 在本发明的一种优选实施例中,所述解析所述DNS应答的步骤,具体可以包括:\n[0158] 子步骤C1、获取HTTP响应信息数据载荷;\n[0159] 子步骤C2、将数据载荷进行base64解码,并解密,得到DNS解析数据。\n[0160] 在本发明另一种优选实施例中,所述解析所述DNS应答的步骤,还可以包括:\n[0161] 子步骤D1、解析所述DNS解析数据的字段,得到相应的数据结构;\n[0162] 子步骤D2、为所述数据结构申请动态内存,并将该动态内存插入缓存系统。\n[0163] 本优选实施例在客户端中设置缓存系统,并且将查询历史记录插入该缓存系统,以便客户端再次查询相同的域名时,直接查询该缓存系统以提高查询效率。\n[0164] 在具体实现中,为所述数据结构申请动态内存的步骤具体可以包括:\n[0165] 子步骤E1、递归释放成员变量m_pHost(数据类型为Phostent_Cache_t);\n[0166] 子步骤E2、动态分配数据结构类型为hostent_Cache_t并赋值给成员变量m_pHost;\n[0167] 子步骤E3、若分配成功,则清零,否则返回FALSE;\n[0168] 子步骤E4、动态申请数据结构类型为struct hostent并赋值给m_pHost->host;\n[0169] 子步骤E5、若分配成功,则清零,否则返回FALSE;\n[0170] 子步骤E6、长度和地址类型相应赋值为sizeof(unsigned long)和AF_INET;\n[0171] m_pHost->host->h_length=sizeof(unsigned long);\n[0172] m_pHost->host->h_addrtype=AF_INET;\n[0173] 子步骤E7、获取OfficialName字段长度,分配长度加1的字符串数组,并将OfficialName赋值给m_pHost->host->h_name;\n[0174] 子步骤E8、申请类型为char*的指针数组,并赋值给m_pHost->host->h_addr_list\n[0175] m_pHost->host->h_addr_list=new char*[DW_DNS_MAX_IP];\n[0176] 子步骤E9、若分配成功,则清零,否则返回FALSE;\n[0177] 子步骤E10、循环赋值解析后的IP地址给m_pHost->host->h_addr_list数组;\n[0178] 子步骤E11、将TTL赋值给m_pHost->m_ttl;\n[0179] 子步骤E12、调用SetInsertCacheTime(m_pHost),设置插入缓存时的时间戳。\n[0180] 子步骤E13、返回TRUE。\n[0181] 需要说明的是,上述TTL(生存时间,Time To Live)生存时间可由DNS服务器根据实际情况指定;这样,只有在TTL未过期的情况下,该缓存系统中的动态内存才能被使用。\n[0182] 总之,本优选实施例可以通过在Windows客户端构造DNS解析的数据结构,来得到提供相同语义的编程接口,这样,就可以不受本地域名服务缓存毒害(DNS Cache poisoning)的影响。\n[0183] 在本发明的另一优选实施例中,所述方法还可以包括:\n[0184] 在该DNS应答的HTTP状态码为200时,记录所述域名解析代理服务器的游标位置,以所述游标位置作为下次域名解析的定向依据。\n[0185] 本优选实施例通过记录当前成功解析域名解析代理服务器游标位置,下次解析时,定向到前一个成功域名解析代理服务器。\n[0186] 另外,本发明还可以支持编程接口级设置自定义的域名解析代理服务器并且设置访问优先顺序。\n[0187] 参照图5,示出了本发明域名解析代理方法实施例4的流程图,具体可以包括:\n[0188] 步骤501、接收客户端发起的基于HTTP协议的域名解析请求,所述域名解析请求中可以包括域名参数、查询信息或者超时信息;其中,所述查询信息可以包括递归查询或者非递归查询,所述超时信息表示客户端得到DNS应答的最大时间;\n[0189] 步骤502、从所述域名解析请求中解析域名参数;\n[0190] 步骤503、依据解析得到的域名参数,向DNS服务器发起DNS查询请求;\n[0191] 步骤504、解析DNS服务器返回的DNS应答,并返回给客户端。\n[0192] 相对于实施例1,本实施例具有如下优点:\n[0193] 1、可由客户端指定域名解析的超时,以便客户端应用程序在指定的时间内得到成功或失败的响应;\n[0194] 2、支持递归方式DNS查询以及非递归方式DNS查询,Windows客户端一般仅支持非递归方式查询。\n[0195] 由于使用HTTP协议作为客户端与域名解析代理服务器之间的通讯协议,所以不受防火墙禁止DNSP协议或对DNS协议进行特定域名字段过滤的影响,另外,由于后台DNS服务器可使用Bind 9或其他DNS服务器,并可以配置成递归解析模式,从事使得解析DNS的成功率更高,解决了现有技术中Windows客户端系统不支持递归解析的问题。\n[0196] 为使本领域技术人员更好地理解本发明,以下通过具体的示例来说明本发明在实际中的应用,具体可以包括:\n[0197] 步骤S1、客户端将自己的IP地址、CPU ID、当前线程ID、需要解析的域名、递归查询方式还是非递归查询方式标记、客户端请求序列号参数和校验码参数等,基于HTTP协议按照一定的组合封装成一个数据结构,这里的数据结构通常为HTTP GET命令请求;\n[0198] 在具体实现中,域名解析代理服务器可以提供给客户端如下接口函数:\n[0199] 函数BOOL CHttpDns::SetOption提供了应用程序根据自身需要对DNS解析各个环节的选项设置,如单次接收、发送UDP数据报的超时时间、是否逐个遍历域名解析代理服务器,设置自定义域名解析代理服务器等;\n[0200] 函数BOOL CHttpDns::gethostbyname_by_http_proxy(const char*pUrl,UINT*pIpList,)实现HTTP DNS代理请求服务的封装;\n[0201] 函数struct hostent*FAR CHttpDns::gethostbyname(const char*name)提供对CHttpDns::gethostbyname_by_http_proxy()返回成功后将IP地址列表填入新申请分配的struct hostent的相应域里。并将结果保存在缓存中。\n[0202] 其中,上述接口函数可以在现有Windows编程界面gethostbyname的基础上实现,也即,本发明可以实现与gethostbyname语义相同的编程界面,易于调用。\n[0203] 步骤S2、加密该数据结构,,并发送给域名解析代理服务器;\n[0204] 步骤S3、域名解析代理服务器解密;\n[0205] 步骤S4、根据所述校验码参数,确认客户端是否为可信连接发起者,若是,则参照所述客户端请求序列号参数及检验码参数生成一个消息摘要;\n[0206] 步骤S5、以该消息摘要作为关键字,将相应客户端作为连接节点插入待响应DNS应答map中;\n[0207] 本发明提供了一种DNS解析应答缓存节点描述符的结构示意:\n[0208]\n[0209] 步骤S6、依据解析得到的域名参数,向DNS服务器发起DNS查询请求;\n[0210] 步骤S7、将DNS服务器返回的DNS应答作为GET应答的内容,进行加密和base64编码;\n[0211] 步骤S8、通过查询消息摘要关键字,找到该客户端的连接节点;\n[0212] 步骤S9、将加密和base64编码后的DNS相应数据拷贝给该连接节点;\n[0213] 步骤S10、从待响应DNS应答map中删除该连接节点。\n[0214] 总之,本发明通过HTTP DNS的报文代理服务,即基于HTTP协议作为发起DNS请求客户端与域名解析代理服务器之间的DNS解析代理协议,实现了DNS的安全解析,能够有效防止任何恶意代码在Windows非特权环境下的DNS攻击。\n[0215] 对于客户端而言,由于其采用HTTP协议发送域名解析请求,并且解析域名解析代理服务器返回的数据载荷,所以能防范所有在客户端攻击DNS协议的恶意程序。\n[0216] 另外,本发明可支持IPV4(Internet Protocol Version 4)和IPV6(Internet Protocol Version 6),支持DNS SEC(DNS安全扩展,Domain Name System Security Extensions),且支持各种加解密机制。\n[0217] 参照图6,示出了本发明一种域名解析代理服务器实施例的结构图,其分别连接客户端及DNS服务器,具体可以包括:\n[0218] 接收模块601,用于接收客户端发起的基于HTTP协议的域名解析请求,所述域名解析请求中包括域名参数;\n[0219] 第一解析模块602,用于从所述域名解析请求中解析域名参数;\n[0220] 查询模块603,用于依据解析得到的域名参数,向DNS服务器发起DNS查询请求;\n[0221] 第二解析模块604,用于解析DNS服务器返回的DNS应答;及\n[0222] 返回模块605,用于将所述DNS应答返回给客户端。\n[0223] 在本发明的一种优选实施例中,可指定CGI程序执行所述接收模块601和所述第一解析模块602的操作;\n[0224] 此时,所述CGI程序,可具体用于接收所述HTTP GET命令请求,并通过对所述HTTP GET命令请求进行base64解码,解析出所述域名参数。对于客户端发起HTTP GET命令请求的过程,请参照方法实施例的相关说明,在此不作赘述。\n[0225] 在本发明的另一种优选实施例中,所述CGI程序还可用于,在对所述HTTP GET命令请求进行base64解码前,对所述HTTP GET命令请求进行解密,以解密后的HTTP GET命令请求进行base64解码。\n[0226] 在本发明实施例中,优选的是,所述第二解析模块604,可具体用于将DNS服务器返回的DNS应答作为GET应答的内容,进行加密和base64编码。\n[0227] 在本发明的一种优选实施例中,所述域名解析请求中还可以包括客户端请求序列号参数和校验码参数;\n[0228] 相应地,所述方法域名解析代理服务器还可以包括:\n[0229] 认证模块,用于在所述第二解析模块依据解析得到的域名参数,向DNS服务器发起DNS查询请求前,根据所述校验码参数,确认客户端是否为可信连接发起者,若是,则参照所述客户端请求序列号参数及检验码参数生成一个消息摘要;\n[0230] 节点插入模块,用于以该消息摘要作为关键字,将相应客户端作为连接节点插入待响应DNS应答map中;\n[0231] 此时,所述第二解析模块604具体可以包括:\n[0232] 查询单元,用于通过查询消息摘要关键字,找到该客户端的连接节点;\n[0233] 拷贝单元,用于将加密和base64编码后的DNS相应数据拷贝给该连接节点;及[0234] 删除单元,用于从待响应DNS应答map中删除该连接节点。\n[0235] 在本发明的再一种优选实施例中,所述域名解析请求中还可以包括查询信息或者超时信息;\n[0236] 其中,所述查询信息包括递归查询或者非递归查询,所述超时信息表示客户端得到DNS应答的最大时间。\n[0237] 对于域名解析代理服务器实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。\n[0238] 参照图7,示出了本发明一种域名解析代理系统实施例的结构图,具体可以包括客户端701、DNS服务器703及连接在所述客户端和DNS服务器之间的域名解析代理服务器702,其中,所述域名解析代理服务器702具体可以包括:\n[0239] 接收模块721,用于接收客户端发起的基于HTTP协议的域名解析请求,所述域名解析请求中包括域名参数;\n[0240] 第一解析模块722,用于从所述域名解析请求中解析域名参数;\n[0241] 查询模块723,用于依据解析得到的域名参数,向DNS服务器发起DNS查询请求;\n[0242] 第二解析模块724,用于解析DNS服务器返回的DNS应答;及\n[0243] 返回模块725,用于将所述DNS应答返回给客户端。\n[0244] 在本发明的一种优选实施例中,所述客户端701具体可以包括:\n[0245] 判断模块,用于判断所述域名解析代理服务器返回的DNS应答;\n[0246] 应答解析模块,用于在该DNS应答的HTTP状态码为200时,解析所述DNS应答;及[0247] 返回模块,用于在该DNS应答的HTTP状态码不为200时,返回错误,并结束本次查询请求。\n[0248] 在本发明的另一种优选实施例中,所述应答解析模块,可以进一步包括:\n[0249] 获取单元,用于获取HTTP响应信息数据载荷;\n[0250] 解码解密单元,用于将数据载荷进行base64解码,并解密,得到DNS解析数据。\n[0251] 在本发明的再一种优选实施例中,所述应答解析模块,还可以包括:\n[0252] 字段解析单元,用于解析所述DNS解析数据的字段,得到相应的数据结构;\n[0253] 申请单元,用于为所述数据结构申请动态内存;及\n[0254] 插入单元,用于将该动态内存插入缓存系统。\n[0255] 在本发明实施例中,优选的是,所述系统还可以包括:\n[0256] 记录模块,用于在该DNS应答的HTTP状态码为200时,记录所述域名解析代理服务器的游标位置,以所述游标位置作为下次域名解析的定向依据。\n[0257] 对于域名解析代理服务器702的具体结构,由于其与域名解析代理服务器实施例中的结构模块类似,故在此不作赘述。\n[0258] 对于系统实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。\n[0259] 本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。\n[0260] 以上对本发明所提供的一种域名解析代理方法和系统、一种域名解析代理服务器,进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
法律信息
- 2022-03-15
专利权人的姓名或者名称、地址的变更
专利权人由北京鸿腾智能科技有限公司变更为三六零数字安全科技集团有限公司
地址由100016 北京市朝阳区酒仙桥路甲10号3号楼15层17层1773变更为100016 北京市朝阳区酒仙桥路甲10号3号楼15层17层1773
- 2021-05-25
专利权的转移
登记生效日: 2021.05.12
专利权人由北京奇虎科技有限公司变更为北京鸿腾智能科技有限公司
地址由100088 北京市西城区新街口外大街28号D座112室(德胜园区)变更为100016 北京市朝阳区酒仙桥路甲10号3号楼15层17层1773
专利权人由奇智软件(北京)有限公司 变更为空
- 2016-05-25
- 2016-04-13
专利申请权的转移
登记生效日: 2016.03.21
申请人由奇智软件(北京)有限公司变更为北京奇虎科技有限公司
地址由100016 北京市朝阳区酒仙桥路14号兆维大厦4层东侧单元变更为100088 北京市西城区新街口外大街28号D座112室(德胜园区)
申请人变更为奇智软件(北京)有限公司
- 2013-01-16
实质审查的生效
IPC(主分类): H04L 29/12
专利申请号: 201110126407.5
申请日: 2011.05.16
- 2012-11-21
引用专利(该专利引用了哪些专利)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 |
1
| |
2001-03-28
|
1999-01-27
| | |
2
| |
2008-03-12
|
2007-10-26
| | |
3
| |
2008-07-23
|
2006-07-05
| | |
4
| |
2010-10-20
|
2010-06-03
| | |
被引用专利(该专利被哪些专利引用)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有被任何外部专利所引用! |