DNS实验报告.doc

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
DNS实验报告

北京邮电大学 计算机网络课程设计 实验报告 课程设计题目:DNS中继服务器实验报告 班级:2009211315班 小组人员:李根 曾若峰 宫志明 系统概述 运行环境:windows XP 编译: Microsoft visual C++ 6.0 使用方法: 使用ipconfig/all,记下当前DNS服务器,例如为 使用下页的配置界面,将DNS设置为(本地主机) 运行你的dnsrelay程序(在你的程序中把外部dns服务器设为前面记下的) 正常使用ping,ftp,IE等,名字解析工作正常 系统的功能设计 设计一个DNS服务器程序,读入“域名-IP地址”对照表,当客户端查询域名对应的IP地址时,用域名检索该对照表,三种检索结果: 检索结果为ip地址,则向客户端返回“域名不存在”的报错消息(不良网站拦截功能) 检索结果为普通IP地址,则向客户返回这个地址(服务器功能) 表中未检到该域名,则向因特网DNS服务器发出查询,并将结果返给客户端(中继功能) 考虑多个计算机上的客户端会同时查询,需要进行消息ID的转换 模块划分 DNS服务器主模块包含三个子模块,分别如下: 命令行参数处理模块:该模块用来处理通过命令行提示符来启动这个DNS服务器时所输入的命令行参数,管理员通过设置不同的参数可以使DNS服务器显示不同程度的提示和调试信息。所以这模块主要是依照输入的参数设置标志数据,以控制最后的各种信息的输出。 本地解析模块:本模块是在本DNS服务器本地保存的曾经解析过的或者需要屏蔽额域名和其对应IP信息文件中查找从应用程序来的请求解析的域名,在这个文件中查到需要的域名后取出对应的IP地址,并构造DNS应答数据包返回给发送此DNS域名解析请求的应用程序。 外部DNS服务器解析模块:当本地解析失败时,本DNS服务器会调用外部DNS服务器解析模块。此模块将应用程序发送的DNS请求报文转发给外部DNS服务器,然后接收外部服务器返回的应答信息,并根据这个信息给予应用程序相应的DNS应答。 三个模块与主模块的关系图如下,主模块调用这三个并列的模块,而本地解析模块调用文件查找子模块: 软件流程图 主要数据结构 int GetTable(char *tablePath) //函数:获取域名解析表 void GetUrl(char *recvbuf, int recvnum) //函数:获取DNS请求中的域名 int IsFind(char* url, int num) //函数:判断是否在表中找到DNS请求中的域名 unsigned short RegisterNewID (unsigned short oID, SOCKADDR_IN temp, BOOL ifdone) //函数:将请求ID转换为新的ID,并将信息写入ID转换表中 void DisplayInfo(unsigned short newID, int find) //函数:打印 时间 newID 功能 域名 IP 测试用例以及运行结果 测试本地解析功能 请求一个本地DNS对照表中已有的某一记录,如: 在本地DNS对照表中找到记录,将相应的IP地址返回给用户: 程序上: 测试中继功能: 请求一个本地DNS对照表中没有的记录,如。本地DNS没有找到相应记录,向外部web服务器转发请求,并接收相应的应答报文并转发给用户: ‘ 程序上: 测试ipv6功能: 程序: 测试拦截功能: 请求一个不良网站,如: 被拦截。 程序上: 调试中遇到并解决的问题 使用socket连接的时候,刚开始只用了一个socket作为所有发送和接收的接口。在实际调试的过程中发现一个不能满足软件需求的实现,所以用一个socket负责发送数据报,另一个socket负责接收数据报。 回应报文中域名是使用偏移指针的方式实现的,这是由于在域名段写入需要请求的域名时会与问题报文中的域名字段重复从而造成不必要的浪费,用偏移指针的方式既可以防止重复,也可以节省空间。 使用sendto函数时,一开始使用的是sizeof(sendbuf)来确定发送的数据报大小,但是实际操作中发现发送消息时只需要发送有用的部分,如果使用原来的方法会造成发送数据的冗余,需要精确确定发送数据的有效位数。 在编程过程中,对于指针的掌握不当造成了多次错误,例如在对于不同的标志位要转换成不同长度的指针进行赋值。 对于请求包的域名还原问题,需要注意数组下标与实际位数的区别。 本机会自动在其尾部追加“”来形成新的域名,导致在本地解析工作中无法

文档评论(0)

juhui05 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档