收藏 分享(赏)

网络程序设计_DNS协议模拟实现.doc

上传人:精品资料 文档编号:10802101 上传时间:2020-01-10 格式:DOC 页数:16 大小:130.42KB
下载 相关 举报
网络程序设计_DNS协议模拟实现.doc_第1页
第1页 / 共16页
网络程序设计_DNS协议模拟实现.doc_第2页
第2页 / 共16页
网络程序设计_DNS协议模拟实现.doc_第3页
第3页 / 共16页
网络程序设计_DNS协议模拟实现.doc_第4页
第4页 / 共16页
网络程序设计_DNS协议模拟实现.doc_第5页
第5页 / 共16页
点击查看更多>>
资源描述

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 查询(DNS query) - 4 -6、 数据包 DNS 响应(DN

2、S Response) - 5 -三、DNS 协议模拟实现 - 6 -1、内容 - 6 -2、数据结构说明 - 8 -3、算法流程图 - 8 -4、程序 - 9 -5、运行截图 - 10 -网络程序设计- 1 -一、DNS 概述1、简介DNS 是计算机域名系统或域名解析服务器(Domain Name System 或Domain Name Service) 的缩写,它是由解析器以及域名服务器组成的。域名服务器是指保存有该网络中所有主机的域名和对应 IP 地址,并具有将域名转换为IP 地址,并具有将域名转换为 IP 地址功能的服务器的服务器。其中域名必须对应一个 IP 地址,而 IP 地址不一定

3、有域名。将域名映射为 IP 地址的过程就称为“域名解析”。在 Internet 上域名与 IP 地址之间是一对一(或者多对一)的,域名和 IP 地址之间的转换过程称为域名解析,域名解析需要由专门的域名解析服务器来完成,DNS 就是进行域名解析的服务器。DNS 命名用于 Internet 等TCP/IP 网络中,通过用户友好的名称查找计算机和服务。域名的最终指向是IP。DNS 是因特网的一项核心服务,作为可以将域名和 IP 地址相互映射的一个分布式数据库,能够使人更方便的访问互联网,而不用去记住能够被机器直接读取的 IP 数串。2、发展DNS 最早于 1983 年由 保罗莫卡派乔斯(Paul M

4、ockapetris)发明;原始的技术规范在 882 号因特网标准草案(RFC 882)中发布。1987 年发布的第 1034和 1035 号草案修正了 DNS 技术规范,并废除了之前的第 882 和 883 号草案。在此之后对因特网标准草案的修改基本上没有涉及到 DNS 技术规范部分的改动。3、DNS 域名结构通常 Internet 主机域名的一般结构为:主机名.三级域名.二级域名.顶级域名。 Internet 的顶级域名由 Internet 网络协会域名注册查询负责网络地址分配的委员会进行登记和管理,它还为 Internet 的每一台主机分配唯一的 IP 地址。全世界现有三个大的网络信息中

5、心: 位于美国的 Inter-NIC,负责美国及其他地区; 位于荷兰的 RIPE-NIC,负责欧洲地区;位于日本的 APNIC ,负责亚太地区。4、DNS 解析器解析器,或另一台 DNS 服务器递归代表的情况下,域名解析器,协商使用递归服务,使用查询头位。解析通常需要遍历多个名称服务器,找到所需要的信息。然而,一些解析器的功能更简单地只用一个名称服务器进行通信。这些简单的解析器依赖于一个递归名称服务器(称为“存根解析器” ),为他们寻找信息的执行工作。网络程序设计- 2 -二、DNS 协议抓包分析1、 DNS 解析过程1.1 当客户机提出查询请求时,首先在本地计算机的缓存中查找,如果在本地无法

6、查询信息,则将查询请求发给 DNS 服务器1.2 首先客户机将域名查询请求发送到本地 DNS 服务器,当本地 DNS 服务器接到查询后,首先在该服务器管理的区域的记录中查找,如果找到该记录,则进行此记录进行解析,如果没有区域信息可以满足查询要求,服务器在本地缓存中查找1.3 如果本地服务器不能在本地找到客户机查询的信息,将客户机请求发送到根域名 DNS 服务器1.4 根域名服务器负责解析客户机请求的根域名部分,它将包含下一级域名信息的 DNS 服务器地址地址返回给客户机的 DNS 服务器地址1.5 客户机的 DNS 服务器利用根域名服务器解析的地址访问下一级 DNS 服务器,得到再下一级域名的

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

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

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

10、的,对于应答报文,回答数至少是 1,剩余两项可以使 0 或非 03、 DNS 查询报文中每个查询问题的格式0 16 31查询名查询类型 查询类查询名:要查找的名字查询类:通常值为 1,表示是互联网的地址,也就是 IP 协议族的地址查询类型:有很多种查询类型,一般最常用的查询类型是 A 类型(表示查找域名对应的 IP 地址)和 PTR 类型(表示查找 IP 地址对应的域名)查询名为要查找的名字,它由一个或者多个标示符序列组成,每个标示符已首字符字节数的计数值来说明该表示符长度,每个名字以 0 结束,计数字节数必须是 063 之间,该字段无需填充字节,如:gemine.tuc.noao.edu网络

11、程序设计- 5 -4、 DNS 响应报文中的资源记录格式数域名:记录中资源数据对应的名字,它的格式和查询名字段格式相同类型:类型说明 RR 的类型码,类通常为 1,指 Internet 数据生存时间:客户程序保存该资源记录的秒数资源数据长度:说明后面资源数据的数量,该数据的格式依赖于类型字段的值,对于类 1(A 记录)记录数据室 4 字节的 IP 地址资源数据:服务器端返回给客户端的记录数据5、 据包 DNS 查询(DNS query)网络程序设计- 6 -6、 数据包 DNS 响应(DNS Response )网络程序设计- 7 -三、DNS 协议模拟实现1、内容设计一个简单的 Winsoc

12、k 网络程序,模拟 UDP 数据报,加深对 DNS 作用的理解。按照以下步骤完成练习:1、启动 Visual C+,进入集成开发环境;2、建立一个“Win32 Console Application“ 类型的工程,工程名自拟;3、在该工程下,新建一个源程序文件,即选择“C+ SourceFile“,文件名自拟;4、输入源程序5、编译,连接并运行程序6、观察程序运行的结果,体会程序中几个重要函数的作用2、数据结构说明WSADATA wsaData;/初始化 windows sockets API/char hostname256; /获得本主机名/网络程序设计- 8 -int res; /错误处

13、理sockaddr_in sa; /打印主机每一个网卡的 IP 地址/char hostaddr50; /服务器 IP 地址3、算法流程图运行程序显示本主机名用户输入 IP 地址,显示主机名用户输入 IP 地址,显示主机名程序结束4、程序#include#include#include #pragma comment(lib,“ws2_32.lib“)int main()网络程序设计- 9 -WORD wVersionRequested=MAKEWORD(1,1);WSADATA wsaData;/初始化 windows sockets API/if(WSAStartup(wVersionRe

14、quested,return -1;char hostname256;/获得本主机名/int res=gethostname(hostname,sizeof(hostname);if(res!=0)/错误处理/printf(“Error:%un“,WSAGetLastError();return -1;printf(“本主机名为:%sn“,hostname); /打印本主机名字 /printf(“请输入一个主机域名:“); /输入一个主机的域名/scanf(“%s“,hostname);/利用主机名获得主机的地址/hostent* pHostent=gethostbyname(hostname

15、);if(pHostent=NULL)/错误处理/printf(“Error:%un“,WSAGetLastError();return -1;/解析返回的主机地址信息:别名、地址类型、地址长度,并打印/hostentprintf(“name=%snaliase=%snaddrtype=%dnlength=%dn“,he.h_name,he.h_aliases,he.h_addrtype,he.h_length);sockaddr_in sa;/打印主机每一个网卡的 IP 地址/网络程序设计- 10 -for (int nAdapter=0; he.h_addr_listnAdapter; n

16、Adapter+)memcpy(printf(“Address:%sn“,inet_ntoa(sa.sin_addr);/显示 lP 地址/printf(“n“);unsigned long addr;char hostaddr50;printf(“请输人服务器 IP 地址:“); /输入一个服务器的 IP 地址/scanf(“%s“,hostaddr);addr=inet_addr(hostaddr); /将 lP 地址转化为网络字节序/pHostent=gethostbyaddr(char *)/利用 IP 地址获得主机名人/if(pHostent=NULL)/错误处理/printf(“Error:%un“,WSAGetLastError();return -1;hostentprintf(“主机名为;%snaliases=%snaddrtype=%dnlength=%dn“,he.h_name,he.h_aliases,he.h_addrtype,he.h_length); /打印返回的主机信息/WSACleanup(); /结束 windows sockets API/return 0;5、运行截图1、运行程序,输入主机域名网络程序设计- 11 -结果如下网络程序设计- 12 -2、 、输入 IP 地址实现 IP 地址与主机名的转换,结果如下:网络程序设计- 13 -

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报