域名系统及其报文分析专业:信息对抗技术班级:021231学生姓名:指导教师:胡建伟崔艳鹏一、概述域名系统又称DNS(DomainNameSystem),该系统用于命名组织到域层次结构中的计算机和网络服务。域名是由圆点分开一串单词或缩写组成的,每一个域名都对应一个惟一的IP地址,在Internet上域名与IP地址之间是一一对应的,DNS就是进行域名解析的服务器。DNS命名用于Internet等TCP/IP网络中,通过用户友好的名称查找计算机和服务。DNS是因特网的一项核心服务,它作为可以将域名和IP地址相互映射的一个分布式数据库。(一)历史60年末代,美国资助试验性广域计算机风,称为ARPAnet,70年代时,70年代,ARPAnet只是一个拥有几百台主机的小网络,仅需要一个HOSTS文件就可以容纳所需要主机信息,HOSTS提供的是主机名也IP地址的映射关系,也就是说可以用主机名进行网络信息的共享,而不需要记住IP地址。但是随着网络的扩在,HOSTS文件已经不能够快速完成解析任务了,这时DNS出现了。可以说,上面所说的hosts文件就像是现代DNS域名服务器,是现代DNS系统的“源”。(二)功能我们知道,互联网上的每一个用户,包括服务器都必须有一个唯一的IP才能够在互联网上工作。而作为用户的我们,在与英特网上的某个主机通信时,显然不愿意使用很难记忆的长达32位二进制主机地址来访问。即使是点分十进制IP地址也不容易记忆。相反,大家愿意使用更容易记忆的主机名字。这样便于人记忆的字符串与便于机器处理的二进制IP地址之间的矛盾就产生了,这时,我们就需要用DNS在表示主机名的字符串与表示主机的IP地址二进制数之间建立联系,而这正就是DNS的作用所在。(三)结构要了解DNS,我们先得了解域名的结构,也就是域名是怎么取的。1.域名结构早期的因特网使用了非等级的名字空间,但随着因特网上的用户数急剧增加时,用非等级的名字空间来管理一个很大的名字集合是非常困难的。因此就出现了层次树状结构的命名方法,他的特点是:(1)任何一个连接在因特网上的主机或路由器,都有一个唯一的层次结构的名字,即域名。(2)域名的结构由标号序列组成,各标号之间用点隔开:….三级域名.二级域名.顶级域名各标号分别代表不同级别的域名。(3)其中顶级域名分为A.国家顶级域名nTLD:如:.cn表示中国,.us表示美国,.uk表示英国,等等。B.通用顶级域名gTLD:最早的顶级域名是:.com(公司和企业).net(网络服务机构).org(非赢利性组织).edu(美国专用的教育机构().gov(美国专用的政府部门).mil(美国专用的军事部门).int(国际组织)C.基础结构域名(infrastructuredomain):这种顶级域名只有一个,即arpa,用于反向域名解析,因此又称为反向域名。我们可以用一张图来解释他的结构:2.服务器设置DNS服务器是按区划分的,在每个区中设置相应的权限服务器,用来保存该区中的所有主机的域名到IP地址的映射。根据服务器所起的作用,分为以下四种类型:(1)根域名服务器根域名服务器是最重要的域名服务器。所有的根域名服务器都知道所有的顶级域名服务器的域名和IP地址。不管是哪一个本地域名服务器,若要对因特网上任何一个域名进行解析,只要自己无法解析,就首先求助于根域名服务器。(2)顶级域名服务器这些域名服务器负责管理在该顶级域名服务器注册的所有二级域名。当收到DNS查询请求时,就给出相应的回答(可能是最后的结果,也可能是下一步应当找的域名服务器的IP地址)。(3)权限域名服务器这就是前面已经讲过的负责一个区的域名服务器。当一个权限域名服务器还不能给出最后的查询回答时,就会告诉发出查询请求的DNS客户,下一步应当找哪一个权限域名服务器。(4)本地域名服务器本地域名服务器对域名系统非常重要。当一个主机发出DNS查询请求时,这个查询请求报文就发送给本地域名服务器。每一个因特网服务提供者ISP,或一个大学,甚至一个大学里的系,都可以拥有一个本地域名服务器,这种域名服务器有时也称为默认域名服务器。二、工作原理从原理上说,当主机需要解析一个域名是,就需要与域名服务器通信以获得域名对应的IP地址。但实际上,大多数的名字都是在本地进行解析的,仅有少量的解析需要在因特网上进行。而我们所关注的是这部分在网上进行的解析。主机向本地域名服务器的查询一般都是采用递归查询。如果主机所询问的本地域名服务器不知道被查询域名的IP地址,那么本地域名服务器就以DNS客户的身份,向其他根域名服务器继续发出查询请求报文。本地域名服务器向根域名服务器的查询通常是采用迭代查询。当根域名服务器收到本地域名服务器的迭代查询请求报文时,要么给出所要查询的IP地址,要么告诉本地域名服务器:“你下一步应当向哪一个域名服务器进行查询”。然后让本地域名服务器进行后续的查询。具体过程我们可以用下图来了解:递归查询方式迭代查询方式三、报文格式我们先用一张图来了解DNS报文的格式:下面详述各部分的内容:标识(2字节):这个字段网上的解释是:“由客户程序设置并有服务器返回结果。”原来这个字段可以看作是DNS报文的ID,对于相关联的请求报文和应答报文,这个字段是相同的,由此可以区分DNS应答报文是哪个请求报文的响应。标志(2字节):这部分非常重要,需要逐比特分析:QR(1比特):查询/响应的标志位,1为响应,0为查询。opcode(4比特):定义查询或响应的类型(若为0则表示是标准的,若为1则是反向的,若为2则是服务器状态请求)。AA(1比特):授权回答的标志位。该位在响应报文中有效,1表示名字服务器是权限服务器(关于权限服务器以后再讨论)TC(1比特):截断标志位。1表示响应已超过512字节并已被截断(依稀好像记得哪里提过这个截断和UDP有关,先记着)RD(1比特):该位为1表示客户端希望得到递归回答(递归以后再讨论)RA(1比特):只能在响应报文中置为1,表示可以得到递归响应。zero(3比特):不说也知道都是0了,保留字段。rcode(4比特):返回码,表示响应的差错状态,通常为0和3,各取值含义如下:0无差错1格式差错2问题在域名服务器上3域参照问题4查询类型不支持5在管理上被禁止6--15保留标志段说完了,下面是问题数、资源记录数、授权资源记录数和额外资源记录数,这四个字段都是两字节,分别对应下面的查询问题、回答、授权和额外信息部分的数量。一般问题数都为1,DNS查询报文中,资源记录数、授权资源记录数和额外资源记录数都为0.该说正文部分了。查询问题部分格式如下:查询名部分长度不定,一般为要查询的域名(也会有IP的时候,即反向查询)。此部分由一个或者多个标示符序列组成,每个标示符以首字节数的计数值来说明该标示符长度,每个名字以0结束。计数字节数必须是0~63之间。该字段无需填充字节。还是借个例子来说明更直观些,查询名为gemini.tuc.noao.edu的话,查询名字段如下:查询类型(2字节):通常查询类型为A(由名字获得IP地址)或者PTR(获得IP地址对应的域名),类型列表如下:类型助记符说明1AIPv4地址。2NS名字服务器。5CNAME规范名称。定义主机的正式名字的别名。6SOA开始授权。标记一个区的开始。11WKS熟知服务。定义主机提供的网络服务。12PTR指针。把IP地址转化为域名。13HINFO主机信息。给出主机使用的硬件和操作系统的表述。15MX邮件交换。把邮件改变路由送到邮件服务器。28AAAAIPv6地址。252AXFR传送整个区的请求。255ANY对所有记录的请求。查询类(2字节):通常为1,指Internet数据。前面说过,回答字段,授权字段和附加信息字段均采用资源记录RR(ResourceRecord)的相同格式。该格式如下:域名字段(不定长或2字节):记录中资源数据对应的名字,它的格式和查询名字段格式相同。当报文中域名重复出现时,就需要使用2字节的偏移指针来替换。例如,在资源记录中,域名通常是查询问题部分的域名的重复,就需要用指针指向查询问题部分的域名。关于指针怎么用,TCP/IP详解里面有,即2字节的指针,最签名的两个高位是11,用于识别指针。其他14位从报文开始处计数(从0开始),指出该报文中的相应字节数。注意,DNS报文的第一个字节是字节0,第二个报文是字节1。一般响应报文中,资源部分的域名都是指针C00C(1100000000001100),刚好指向请求部分的域名。类型(2字节)、类(2字节):含义与查询问题部分的类型和类相同。生存时间(4字节):该字段表示资源记录的生命周期(以秒为单位),一般用于当地址解析程序取出资源记录后决定保存及使用缓存数据的时间。资源数据长度(2字节):表示资源数据的长度(以字节为单位,如果资源数据为IP则为0004)资源数据:该字段是可变长字段,表示按查询段要求返回的相关资源记录的数据。值得声明的是,上图所给的报文格式中,并不是所有DNS报文都有以上各个部分的。四、报文分析现在我们以具体的数据报为例进行分析。以下是我在访问“58同城”网时用wireshark所抓的DNS数据报。(一)查询报文我们以12173号报文为例来了解DNS数据报的内容。打开“DomainNameSystem”,我们可以看到以下的信息:上图显示的就是一个DNS请求报文,其中包括首部和数据两部分。在首部中,我们可以看到:标识:6f3e。这是该DNS报文的ID,由客户程序设置并有服务器返回结果由客户程序设置并有服务器返回结果。标志:0100。拓展成二进制是:QROPCODAATCRDRA(ZERO)RCODE对应报文0000001000000代表含义查询报文标准查询非授权回答响应超过512字节默认迭代查询(与请求报文无关)(保留字段)无差错问题数:1。表示只有一个问题。资源记录数:0。请求报文中置为0。授权资源记录数:0。请求报文中置为0。额外资源记录数:0。请求报文中置为0。之后是查询问题部分:查询名相应报文02786102353803636f6d含义Xa.58.com查询类型查询类相应报文00010001含义查询IPV4地址(他的助记符是A)表示internet数据(二)回答报文以下是发送报文对应的回答报文(图中的12176号报文):打开报文,看到内部的详细内容:回答报文的格式与请求报文的格式相似,但多了部分内容,这里就不再一一赘述了。五.附件说明本文所涉及的DNS报文均在相同文件夹下的DNSPackage.pcapng中,在使用时,需要安装wireshark软件。为了看到图中对应的内容,应现在输入过滤语句“dns”,之后,就能看到所抓的DNS报文了。