域名系统解析方法、装置及客户端的制作方法

文档序号:7668002阅读:159来源:国知局
专利名称:域名系统解析方法、装置及客户端的制作方法
技术领域
本发明涉及域名解析技术领域,特别是涉及一种域名系统解析方法、装置及客户端。
背景技术
域名系统(DNS, Domain Name System)是一种用于TCP/IP应用程序的分布式数据库,它提供主机名字和IP地址之间的转换信息,即对访问请求进行域名解析。当基于Windows的域名系统客户端从DNS服务器中接收查询的成功回复时,该客户端会将查询结果临时存储在本地缓存中。当应用程序(如Windows Internet Explorer)向Windows客户端提交请求以解析DNS名称时,Windows客户端将针对匹配名称检查本地缓存。如果 Windows客户端在本地缓存中找到与该DNS名称对应的IP (Internet Protocol)地址,则将使用本地缓存中的数据来回复应用程序。如果该缓存中没有DNS名称对应的IP地址,则会将该应用程序的查询转发到DNS服务器,并将结果传送到应用程序,同时并将结果存储在本地缓存中。此种在向DNS服务器发送查询之前检查本地缓存的方式可以提高Windows客户端内的性能,并可减少DNS客户端和DNS服务器之间的网络通信。除了包含从DNS服务器中检索得出的数据,本地DNS客户端缓存还可以预加载客户端计算机文件中存储的名称解析信息。但是,Windows客户端的本地缓存会将IP地址存储在hosts文件中,恶意程序可以直接向hosts文件中插入假的DNS解析信息,劫持网络通讯造成信息泄露。因为这种对于文件的恶意攻击的实现较为简单,而且可以采用文件保护或重写机制,使得反恶意软件不能连接网络,从而使基于云的查杀机制失效。因此Windows客户端的本地缓存很容易被恶意攻击,如被插入非法的IP地址,并在本地缓存中修改域名与IP地址的对应关系,将域名与非法的IP地址对应,影响用户网络安全。另外,Windows应用层网络很多参数是通过注册表来配置的,恶意程序可以随意修改,使得网络失效或服务不能启用或篡改网络配置,从而破坏正常网络应用。

发明内容
本发明所要解决的技术问题是提供一种域名系统解析方法、装置及客户端,能满足缓存解析的域名系统应答需求,同时可以避免受到恶意代码对缓存的攻击。为了解决上述问题,本发明公开了一种域名系统解析方法,包括以下步骤解析DNS应答,获取解析数据;将解析数据写入内存中;接收DNS查询请求后,从内存中查询是否存在与所述DNS查询请求对应的解析数据,若存在,则将查询的解析数据传回,反之,则向DNS服务器提出查询请求。进一步地,在将解析数据写入内存中后,所述方法还包括对写入内存的解析数据进行加密;
对在内存中查询到DNS查询请求对应的解析数据进行解密。进一步地,所述方法还包括将所述解析数据的老化时间及插入时间写入内存中,根据所述解析数据的老化时间及插入时间对内存中的解析数据进行老化处理。进一步地,所述对解析数据进行老化处理包括以下步骤获取解析数据的插入时间及当前的系统时间;
计算系统时间与解析数据插入时间的时间差;获取解析数据的老化时间,并与时间差进行比较,若时间差大于老化时间,则删除该解析数据。进一步地,所述方法还包括确定老化机制,根据老化机制在缓存满时删除解析数据。进一步地,所述在缓存满时删除的解析数据包括到了老化时间和未到老化时间的解析数据。进一步地,所述老化机制包括命中率最高优先保留机制,预先设定命中率阈值,如果累计命中次数低于预定的阈值,则删除该解析数据;或最近最先使用优先保留机制,预先设定最近访问时间阈值,如果最近一次访问时间大于预定的阈值,则删除该解析数据;或随机保留机制,随机删除其中的解析数据。进一步地,所述解析数据的命中率通过如下方式累计若在内存中查询到DNS查询请求对应的解析数据,返回结果给请求者的同时将该解析数据的命中率加一。为了解决上述问题,本发明还公开了一种域名系统解析装置,其特征在于,包括解析模块,对DNS应答进行解析并获取解析数据;存储模块,将获取的解析数据写入内存中;查询模块,根据DNS查询请求在内存中查询是否存在与所述DNS查询请求对应的解析数据。进一步地,所述装置还包括加密模块,用于对写入内存的解析数据进行加密;解密模块,对在内存中查询到DNS查询请求对应的解析数据进行解密。进一步地,所述装置还包括时间模块,用于将解析数据的老化时间及插入时间写入内存中;老化处理模块,根据时间模块记载的解析数据的老化时间及插入时间对内存中的解析数据进行老化处理。进一步地,所述装置还包括老化机制确定模块,用于确定老化机制,在缓存满时删除解析数据。进一步地,所述装置还包括命中率最高优先保留机制模块,用于根据命中率删除累计命中次数低于预定阈值的解析数据;或
最近最先使用优先保留机制模块,用于根据访问时间删除最近一次访问时间大于预定阈值的解析数据;或随机保留机制模块,用于随机删除解析数据。为了解决上述问题,本发明还公开了一种客户端,其特征在于,包括如前所述的域名系统解析装置。与现有技术相比,本发明具有以下优点本发明的域名系统解析方法、装置及客户端通过将缓存数据写入内存的方法来实现缓存,因为采用内存存储缓存的隐蔽性较好,所以通过将缓存设置在内存中,可以满足缓存解析的DNS应答需求,同时可以避免恶意代码对缓存的攻击。其次,对缓存数据进行加密后,增加了数据的安全性,即使内存被恶意程序读取,因为无法解密缓存数据,也就无法修改数据,因此也可以避免恶意程序对缓存的攻击。
另外,根据解析数据中的TTL字段值精确实现老化处理,实现了安全、高效、实用的缓存刷新机制。当缓存满时,支持按命中率最高优先保留、最近最先使用优先保留、随机保留三种老化机制,具有一定的灵活性。


图I是本发明的域名系统解析方法实施例一的流程图;图2是本发明的域名系统解析方法实施例二的流程图;图3是本发明的域名系统解析方法实施例三的流程图;图4是本发明的老化处理的流程图;图5是本发明的域名系统解析装置实施例一的结构示意图;图6是本发明的域名系统解析装置实施例二的结构示意图;图7是本发明的域名系统解析装置实施例三的结构示意图。
具体实施例方式为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式
对本发明作进一步详细的说明。参照图1,示出本发明的域名系统解析方法实施例一,包括以下步骤步骤101,解析DNS应答,获取解析数据。当用户通过客户端向DNS服务器提交请求,请求解析DNS域名时,DNS服务器会将解析后的IP地址返回给客户端。通过解析客户端与DNS服务器端之间的应答,可以获取到DNS的解析数据,即,DNS域名和与该域名对应的IP地址的对应关系。解析数据的数据结构可以预先定义,例如,struct hostent等。步骤102,将解析数据写入内存中解析数据。解析数据可以存储在内存中维护的某一数据表中,也可以采用动态申请内容,存储在对应的内存中,每一组缓存解析数据都对应一个缓存节点,以便后续对缓存解析数据的处理。申请动态内存后,将解析数据根据内存的数据结构填入相应字段,从而将解析数据写入内存中对应的缓存节点中。内存的数据结构可以预先设定,例如,内存的数据结构可以为 Phostent_Cache_t 的内存。
下面以解析数据的数据结构为struct hostent,内存的数据结构为Phostent_Cache_t为例对将解析数据写入内存中对应的缓存节点中的过程进行说明递归释放成员变量m_pHost (数据类型为Phostent_Cache_t);动态分配数据结构类型为hostent_Cache_t并赋值给成员变量m_pHost ;若分配成功,则清零,否则返回FALSE ;动态申请数据结构类型为struct hostent并赋值给m_pHost-> host ;若分配成功,则清零,否则返回FALSE ;长度和地址类型相应赋值为sizeof (unsigned long)和AF_INET ; m_pHost- > host- > h_length = sizeof (unsigned long); m_pHost- > host- > h_addrtype = AF_INET ;获取OfficialName字段长度,分配长度加I的字符串数组,并将OfficialName赋值给 m_pHost- > host- > h_name ;申请类型为char*的指针数组,并赋值给m_pHost- > host- > h_addr_listm_pHost- > host- > h_addr_list = new char*[Dff_DNS_MAX_IP];若分配成功,则清零,否则返回FALSE ;循环赋值解析后的IP地址给m_pHost- > host- > h_addr_list数组;将TTL 赋值给 m_pHost_ > m_ttl ;调用SetInsertCacheTime (m_pHost),设置插入缓存时的时间戮。返回TRUE。步骤103,接收DNS查询请求后,从内存中查询是否存在与所述DNS查询请求对应的解析数据若存在,则将查询的解析数据传回,反之,则向DNS服务器提出查询请求。当下一次DNS查询请求到达时,根据关键字,调用对应的函数查询该DNS查询请求对应的解析是否在缓存中,若查询到,则对经过加密保存的解析数据进行解密,并返回给请求者,若未查询到,则向DNS服务器提出查询请求。因为恶意代码对内存的攻击难度会大于对文件的攻击难度,所以通过将缓存设置在内存中,可以满足缓存解析的DNS应答需求,同时可以避免恶意代码对缓存的攻击。参照图2,示出本发明的域名系统的缓存方法实施例二,进一步地,在实施例二在实施例一的步骤102之后还包括以下步骤步骤201,对写入内存的解析数据进行加密。在将解析数据根据内存的数据结构填入相应字段后,对该数据结构的内存进行加密,并插入到map中。当下一次DNS查询请求到达时,根据关键字,调用对应的函数查询该DNS查询请求对应的解析是否在缓存中,若查询到,则对经过加密保存的解析数据进行解密,并返回给请求者。通过对缓存数据进行加密后,增加了数据的安全性,即使内存被恶意程序读取,因为无法解密缓存数据,也就无法修改数据,因此也可以避免恶意程序对缓存的攻击。进一步地,在本发明实施例一和实施例二的步骤101之前,还可以包括定义缓存节点描述符。缓存节点描述符中定义了缓存节点中解析数据的数据结构、老化时间及插入时间。对解析数据的数据结构进行定义,可以校验解析数据的完整性和正确性。老化时间及插入时间等可供对解析数据进行老化处理时使用。具体的,定义缓存节点描述符方式如下
typedef struct S T_ho stent_C ache_t {
struct hostent *host; //host
time_tm_ttl; //TTL of parsed DNS reply
time_tm_InsertCacheTime ; //Current insert cache time
DWORDm_HitCount; //Hit Count
Time_tm_LastAccessTime ; //Last access time
}hostent_Cache_t,*Phostent_Cache_t;其中,host字段数据结构是struct hostent*,用来保存DNS解析应答封装类gethostbyname函数返回的数据结构。m_ttl字段用来保存当前DNS解析应答中的老化时间(单位秒)。m_InsertCacheTime字段用来保存当前插入缓存的时间,以便后续查询时老化校验。参照图3,进一步地,本发明的前述域名系统的解析方法实施例中还可以包括步骤301,根据解析数据老化时间及插入时间对解析数据进行老化处理,实现缓存刷新机制。参照图4,其中,老化处理可以包括以下步骤步骤SI,获取解析数据的插入时间及当前的系统时间。通过关键字可以从内存中获取对应的解析数据,然后读取解析数据中的插入时间,同时可以通过调用系统函数的方式获取当前的系统时间。步骤S2,计算系统时间与解析数据插入时间的时间差。步骤S3,获取解析数据的老化时间,并与时间差进行比较,如果时间差大于老化时间,删除该解析数据。具体的,根据前述定义的缓存节点描述符来实现,老化处理的实现过程为根据关键字查询map,获得解析数据,调用time函数,得到当前系统时间,并赋值给变量RefreshCalcTime ;变量RefreshCalcTime减去节点中当时插入缓存的节点时间戳,并把差值赋值给变量6]^口86(1111116;获得解析数据中当时0吧应答中的1'1^(1:;[1116 to live,老化时间)时间戳,如果elapsedTime大于等于TTL时间戳,则说明该记录达到老化时间,将该节点从缓存中删除,重新发起DNS解析请求。通过这种老化处理,可以删除缓存map中旧的解析数据,从而保证缓存map能够存入新的解析数据。采用前述的到达老化时间删除解析数据的方式,可能会出现当缓存map满时,其中的解析数据都未达到老化时间,此时则可以通过自定义的老化机制来删除某些解析数据,以便插入新的DNS解析数据。一般的老化机制可以包括按命中率最高优先保留、最近最先使用优先保留、随机保留三种。命中率最高优先保留,可以预先设定命中率阈值,如果累计命中次数低于预定的阈值,则删除该节点。其中,命中率可以通过当一次DNS查询请求到达时,若查询到DNS查询请求对应的解析在缓存中,返回结果给请求者的同时将该解析数据的命中率加I的方式来累计。最近最先使用优先保留,通过预先设定最近访问时间阈值,如果最近一次访问时间大于预定的阈值,则删除该节点。随机保留,则是随机删除其中的节点。前述的老化处理和老化机制的设定可以方便实现缓存刷新及老化。根据TTL字段值精确实现老化处理,实现了安全、高效、实用的缓存刷新机制。同时,当缓存满时,支持按命中率最高优先保留、最近最先使用优先保留、随机保留三种老化机制,具有一定的灵活 性。可以理解,对于解析数据的删除,也可以只通过前述确定的命中率最高优先保留、最近最先使用优先保留、随机保留其中一种老化机制来实现,即不通过到达老化时间来删除解析数据,而是在缓存满时,根据确定的老化机制来删除其中的解析数据,不管是否到达老化时间。参照图5,示出本发明实施例一的域名系统的缓存装置,包括解析模块10、存储模块20和查询模块30。解析模块10,用于对DNS应答进行解析并获取解析数据。存储模块20,用于将获取的解析数据写入内存中。查询模块30,根据DNS查询请求在内存中查询是否存在与所述DNS查询请求对应的解析数据参照图6,示出本发明实施例二的域名系统解析装置,还包括加密模块50及解密模块60。加密模块,用于对写入内存的解析数据进行加密。解密模块60,用于对在内存中查询到DNS查询请求对应的解析数据进行解密。参照图7,优先的,本发明的域名系统解析装置还包括时间模块70和老化处理模块80。时间模块70,用于将解析数据的老化时间及插入时间写入内存中。老化处理模块80,根据时间模块70记载的解析数据的老化时间及插入时间对解析数据进行老化处理。优先的,本发明的域名系统解析装置还包括老化机制确定模块90,用于确定老化机制,删除解析数据解析数据。其中,老化机制确定模块90所确定的老化机制可以包括命中率最高优先保留机制、最近最先使用优先保留机制或随机机制的其中一种。对应的,本发明的域名系统解析装置还包括命中率最高优先保留机制模块,用于根据命中率删除累计命中次数低于预定阈值的缓存节点;或最近最先使用优先保留机制模块,用于根据访问时间删除最近一次访问时间大于预定阈值的解析数据;或随机保留机制模块,用于随机删除解析数据。基于上述的域名系统解析装置,本发明实施例还提供了一种客户端,该客户端包括上述实施例所述的域名系统解析装置,该域名系统解析装置的具体结构可参见图7所示示例的描述,不再详述。本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。以上对本发明所提供的域名系统解析方法、装置及客户端进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮 助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式
及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
权利要求
1.一种域名系统解析方法,其特征在于,包括以下步骤 解析DNS应答,获取解析数据; 将解析数据写入内存中; 接收DNS查询请求后,从内存中查询是否存在与所述DNS查询请求对应的解析数据,若存在,则将查询的解析数据传回,反之,则向DNS服务器提出查询请求。
2.如权利要求I所述的方法,其特征在于,在将解析数据写入内存中后,所述方法还包括 对写入内存的解析数据进行加密; 对在内存中查询到DNS查询请求对应的解析数据进行解密。
3.如权利要求I或2所述的方法,其特征在于,所述方法还包括 将所述解析数据的老化时间及插入时间写入内存中,根据所述解析数据的老化时间及插入时间对内存中的解析数据进行老化处理。
4.如权利要求3所述的方法,其特征在于,所述对解析数据进行老化处理包括以下步骤 获取解析数据的插入时间及当前的系统时间; 计算系统时间与解析数据插入时间的时间差; 获取解析数据的老化时间,并与时间差进行比较,若时间差大于老化时间,则删除该解析数据。
5.如权利要求3所述的方法,其特征在于,所述方法还包括 确定老化机制,根据老化机制在缓存满时删除解析数据。
6.如权利要求5所述的方法,其特征在于,所述在缓存满时删除的缓存节点包括到了老化时间和未到老化时间的解析数据。
7.如权利要求5所述的方法,其特征在于,所述老化机制包括 命中率最高优先保留机制,预先设定命中率阈值,如果累计命中次数低于预定的阈值,则删除该解析数据;或 最近最先使用优先保留机制,预先设定最近访问时间阈值,如果最近一次访问时间大于预定的阈值,则删除该解析数据;或 随机保留机制,随机删除其中的解析数据。
8.如权利要求7所述的方法,其特征在于,所述缓存节点的命中率通过如下方式累计 若在内存中查询到DNS查询请求对应的解析数据,返回结果给请求者的同时将该解析数据的命中率加一。
9.一种域名系统解析装置,其特征在于,包括 解析模块,对DNS应答进行解析并获取解析数据; 存储模块,将获取的解析数据写入内存中; 查询模块,根据DNS查询请求在内存中查询是否存在与所述DNS查询请求对应的解析数据。
10.如权利要求9所述的装置,其特征在于,所述装置还包括 加密模块,用于对写入内存的解析数据进行加密; 解密模块,对在内存中查询到DNS查询请求对应的解析数据进行解密。
11.如权利要求10所述的装置,其特征在于,所述装置还包括 时间模块,用于将解析数据的老化时间及插入时间写入内存中; 老化处理模块,根据时间模块记载的解析数据的老化时间及插入时间对内存中的解析数据进行老化处理。
12.如权利要求11所述的装置,其特征在于,所述装置还包括 老化机制确定模块,用于确定老化机制,在缓存满 时删除解析数据。
13.如权利要求12所述的装置,其特征在于,所述装置还包括 命中率最高优先保留机制模块,用于根据命中率删除累计命中次数低于预定阈值的解析数据;或 最近最先使用优先保留机制模块,用于根据访问时间删除最近一次访问时间大于预定阈值的解析数据;或 随机保留机制模块,用于随机删除解析数据。
14.一种客户端,其特征在于,包括如上述权利要求9至13任一权利要求所述的域名系统解析装置。
全文摘要
本发明提供了一种域名系统解析方法,包括解析DNS应答,获取解析数据;将解析数据写入内存中;接收DNS查询请求后,从内存中查询是否存在与所述DNS查询请求对应的解析数据,若存在,则将查询的解析数据传回,反之,则向DNS服务器提出查询请求。本发明还提供一种域名系统解析装置及客户端。本发明的域名系统解析方法、装置及客户端,能满足缓存解析的域名系统应答需求,同时可以避免受到恶意代码对缓存的攻击。
文档编号H04L29/12GK102790809SQ20111012655
公开日2012年11月21日 申请日期2011年5月16日 优先权日2011年5月16日
发明者董斌雁 申请人:奇智软件(北京)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1