网络程序设计_DNS协议模拟实现_第1页
网络程序设计_DNS协议模拟实现_第2页
免费预览已结束,剩余11页可下载查看

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、网络程序设计课程设计报告书题目:DNS协议模拟实现学号:02123010姓名:石星宇指导教师:崔艳鹏目录一、DNS概述-1-1、简介-1-2、发展-1-3、DNS域名结构-1-4、DNS解析器-1-二、DNS协议抓包分析-2-1、DNS解析过程-2-2、DNS协议报文结构-2-3、DNS查询报文中每个查询问题的格式-3-4、DNS响应报文中的资源记录格式-4-5、据包DNS查询(DNSquery)-4-6、数据包DNS响应(DNSResponse)-5-三、DNS协议模拟实现-6-1、内谷-6-2、数据结构说明-6-3、算法流程图-7-4、程序-7-5、运行截图、DNS概述1、简介DNS是计算

2、机域名系统或域名解析服务器(DomainNameSystem或DomainNameService)的缩写,它是由解析器以及域名服务器组成的。域名服务器是指保存有该网络中所有主机的域名和对应IP地址,并具有将域名转换为IP地址,并具有将域名转换为IP地址功能的服务器的服务器。其中域名必须对应一个IP地址,而IP地址不一定有域名。将域名映射为IP地址的过程就称为域名解析”在Internet上域名与IP地址之间是一对一(或者多对一)的,域名和IP地址之间的转换过程称为域名解析,域名解析需要由专门的域名解析服务器来完成,DNS就是进行域名解析的服务器。DNS命名用于Internet等TCP/IP网络中

3、,通过用户友好的名称查找计算机和服务。域名的最终指向是IP。DNS是因特网的一项核心服务,作为可以将域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。2、发展DNS最早于1983年由保罗莫卡派乔斯(PaulMockapetris)发明;原始的技术规范在882号因特网标准草案(RFC882)中发布。1987年发布的第1034和1035号草案修正了DNS技术规范,并废除了之前的第882和883号草案。在此之后对因特网标准草案的修改基本上没有涉及到DNS技术规范部分的改动。3、DNS域名结构通常Internet主机域名的一般结构为:主机名

4、.三级域名.二级域名.顶级域名。Internet的顶级域名由Internet网络协会域名注册查询负责网络地址分配的委员会进行登记和管理,它还为Internet的每一台主机分配唯一的IP地址。全世界现有三个大的网络信息中心:位于美国的Inter-NIC,负责美国及其他地区;位于荷兰的RIPE-NIC,负责欧洲地区;位于日本的APNIC,负责亚太地区。4、DNS解析器解析器,或另一台DNS服务器递归代表的情况下,域名解析器,协商使用递归服务,使用查询头位。解析通常需要遍历多个名称服务器,找到所需要的信息。然而,一些解析器的功能更简单地只用一个名称服务器进行通信。这些简单的解析器依赖于一个递归名称服

5、务器(称为存根解析器”,为他们寻找信息的执行工作。、DNS协议抓包分析1、DNS解析过程1.1当客户机提出查询请求时,首先在本地计算机的缓存中查找,如果在本地无法查询信息,则将查询请求发给DNS服务器1.2首先客户机将域名查询请求发送到本地DNS服务器,当本地DNS服务器接到查询后,首先在该服务器管理的区域的记录中查找,如果找到该记录,则进行此记录进行解析,如果没有区域信息可以满足查询要求,服务器在本地缓存中查找1.3如果本地服务器不能在本地找到客户机查询的信息,将客户机请求发送到根域名DNS服务器1.4根域名服务器负责解析客户机请求的根域名部分,它将包含下一级域名信息的DNS服务器地址地址返

6、回给客户机的DNS服务器地址1.5客户机的DNS服务器利用根域名服务器解析的地址访问下一级DNS服务器,得到再下一级域名的DNS服务器地址1.6按照上述递归方法逐级接近查询目标,最后在有目标域名的DNS服务器上找到相应IP地址信息1.7客户机的本地DNS服务器将递归查询结构返回客户机1.8客户机利用从本地DNS服务器查询得到的IP访问目标主机,就完成了一个解析过程1.9同时客户机本地DNS服务器更新其缓存表,客户机也更新期缓存表,方便以后查询2、DNS协议报文结构该报文是由12字节的首部和4个长度可变的字节组成标识字段:占用两个字节,由客户程序设置,并由服务器返回结果标志字段:该字段占两个字节

7、长,被细分成8个字段:QROpcode(4)AA(1)TC(1)RD(1)RA(1)Zero(3)RcodeQR:1bits字段,0表示查询报文,1表示响应报文Opcode:4bits字段,通常值为0(标准查询),其他值为1(反向查询)和2(服务器状态请求)AA:1bits标志表示授权回答(authoritiveanswer),该名字服务器是授权于该领域的TC:1bits字段,表示可截(truncated),使用UDP时,它表示当应答的总长度超过512字节时,只返回前512个字节RD:1bits字段,表示期望递归,该比特能在一个查询中设置,并在一个响应中返回,这个标志告诉名字服务器必须处理这个

8、查询,也称为一个递归查询,如果该位为0,且被请求的名字服务器没有一个授权回答,它就返回一个能解答该查询的其他名字服务器列表,这称为迭代查询(期望递归)RA:1bits字段,表示可用递归,如果名字服务器支持递归查询,则在响应中将该bit置为1(可用递归)zero:必须为0rcode:是一个4bit的返回码字段,通常值为0(没有差错)和3(名字差错),名字差错只有从一个授权名字服务器上返回,它表示在查询中指定的域名不存在。随后的4个bit字段说明最后4个变长字段中包含的条目数,对于查询报文,问题数通常是1,其他三项为0,类似的,对于应答报文,回答数至少是1,剩余两项可以使0或非03、DNS查询报文

9、中每个查询问题的格式01631查询名查询类型查询类查询名:要查找的名字查询类:通常值为1,表示是互联网的地址,也就是IP协议族的地址查询类型:有很多种查询类型,一般最常用的查询类型是A类型(表示查找域名对应的IP地址)和PTR类型(表示查找IP地址对应的域名)查询名为要查找的名字,它由一个或者多个标示符序列组成,每个标示符已首字符字节数的计数值来说明该表示符长度,每个名字以0结束,计数字节数必须是063之间,该字段无需填充字节,如:|6!tD13|tUe4nOAa|Jdu0计散tt计数t计数4、DNS响应报文中的资源记录格式数域名:记录中资源数据对应的名字

10、,它的格式和查询名字段格式相同类型:类型说明RR的类型码,类通常为1,指Internet数据生存时间:客户程序保存该资源记录的秒数资源数据长度:说明后面资源数据的数量,该数据的格式依赖于类型字段的值,对于类1(A记录)记录数据室4字节的IP地址资源数据:服务器端返回给客户端的记录数据5、据包DNS查询(DNSquery)0000001956ee19bf0017a41ab2e008004500,VnE.0010003bedc600DO8011e3C3ac15Of04ac1500200104003500272fbd3辛3a01QQ00015.'/:»003000000000000

11、00377777706676f6fS76cWWW.googlQ04Q650263Ge0000010001exn.说明前面三段分别为以太网包头,ip包头和UDP包头.从0020?后面开始为MIS数据包3e3a为标识字段0100为标志字段,该字段设宣了TC表示该报文是可截断的*0001查询报文数量为仁000000000000表示回答,搜枫和颔外信息都沟0377777706676fSf676c6502636e00表示查询的吝字为沁_quoQlE.com0001类型,1表示适询0001为类,1表Interne®£.6、数据包DNS响应(DNSResponse00000017a4la

12、b2e0001956Ge19bf08004500Vn.E,0010007848at00007d118b9eac1501f9ac15XH0020Of04003504a9006475db3e3a81800001.5.du»:_.0030000300QO00000377777706676f6f67cwww.googl0040650263Ge0000010001CO0c0005000100e+cn005000054200110263e016C06678f6f676C.B.-Xnl.googl00606503E36d00cO.+_00700004Cbd02165CO2b000100010000

13、005f+_00800004Cbd02164!d说阴=前面三段分别为以太网包头,ip包头和UDP包头口3®3a为标识字段3180为标志字段其中设MTQR=%RD=RA=10001间題数1*0003回答数3,其余两个为0377777706676f6f676c6502S3e00表示查询的容字googlecom0001为类型1表示殖询0001为类,1表示Internet据“接下来为回答报文,C00C为域老指针0005表示CNAME(规范名称)0001类,表示为Internet据00000542生存时|g0011数据长度02S36e016c06676f6f676c6503636f6d00为敎

14、据cn然后接下来两段为另外两个回答.最后的較据为IP地址.三、DNS协议模拟实现1、内容设计一个简单的Winsock网络程序,模拟UDP数据报,加深对DNS作用的理解。按照以下步骤完成练习:1、启动VisualC+,进入集成开发环境;2、建立一个“Win32ConsoleApplication类型的工程,工程名自拟;3、在该工程下,新建一个源程序文件,即选择“C+SourceFile"文件名自拟;4、输入源程序5、编译,连接并运行程序6观察程序运行的结果,体会程序中几个重要函数的作用2、数据结构说明WSADATAwsaData;/初始化windowssocketsAPI/charho

15、stname256;获得本主机名/intres;错误处理sockaddr_insa;打印主机每一个网卡的IP地址/charhostaddr50;服务器IP地址3、算法流程图4、程序#includevwinsock.h>#include<stdio.h>#includevstring.h>#pragmacomment(lib,"ws2_32.lib")intmain()WORDwVersionRequested=MAKEWORD(1,1);WSADATAwsaData;/初始化windowssocketsAPI/if(WSAStartup(wVersi

16、onRequested,&wsaData)printf("WSAStartupfailed%sn",WSAGetLastError();return-1;charhostname256;/获得本主机名/intres=gethostname(hostname,sizeof(hostname);if(res!=0)/错误处理/printf("Error:%un",WSAGetLastError();return-1;printf("本主机名为:%sn",hostname);/打印本主机名字/printf("请输入一个主机

17、域名:");输入一个主机的域名/scanf("%s",hostname);/利用主机名获得主机的地址/hostent*pHostent=gethostbyname(hostname);if(pHostent=NULL)错误处理/printf("Error:%un",WSAGetLastError();return-1;解析返回的主机地址信息:别名、地址类型、地址长度,并打印/hostent&he=*pHostent;printf("name=%snaliase=%snaddrtype=%dnlength=%dn",h

18、e.h_name,he.h_aliases,he.h_addrtype,he.h_length);sockaddr_insa;/打印主机每一个网卡的IP地址/for(intnAdapter=0;he.h_addr_listnAdapter;nAdapter+)memcpy(&sa.sin_addr.s_addr,he.h_addr_listnAdapter,he.h_length);printf("Address:%sn",inet_ntoa(sa.sin_addr);/显示lP地址/printf("n");unsignedlongaddr;charhostaddr50;printf("请输人服务器IP地址:");/输入一个服务器的IP地址/scanf("%s",hostaddr);addr=inet_addr(hostaddr);/将lP地址转化为网络字节序/pHostent=gethostbyaddr(char*)&addr,4,AF_INET);/利用I

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论