欢迎来到天天文库
浏览记录
ID:14127417
大小:50.50 KB
页数:6页
时间:2018-07-26
《实验2 主机域名和ip地址的解析》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、实验二、主机(域)名和IP地址解析实验目的及要求:掌握主机(域)名和IP地址相互转换的工作原理,学会使用Winsock提供的相关函数编制程序。实验方法:1.阅读文档,熟悉主机(域)名和IP地址解析工作原理;2.参考本实验后附录的关键功能的程序示例,使用VisualC++输入编辑、编译、运行与调试解析程序;3.在命令行状态下测试本机主机名和IP地址是否解析正确,测试附录中表里所列信息是否正确,并记录一些常用门户网站的域名及对应的IP地址。实验内容:(1)写出编写的VisualC++域名和地址解析源程序如
2、下:(2)运行、测试域名地址解析程序,记录测试结果,分析遇到的问题与解决的办法。(3)记录5个常用门户网站的域名及对应的IP地址。编程背景材料:1.基本概念(1)主机(域)名->IP地址解析Winsock应用程序如要通过TCP/IP网络和另一台主机通信时,必须知道那个主机的IP地址。依用户看来,IP地址是不容易记的。在指定机器时,许多人更愿意利用一个易记的、友好的主机名而不是IP地址。Winsock提供了两个支持函数,它们有助于用户把一个主机名解析成IP地址。Windows套接字API函数gethos
3、tbyname()和WSAAsynGetHostByName()从主机数据库中取回与指定的主机名对应的主机信息。两个函数均返回一个HOSTENT结构,在winsock2.h里该HOSTENT结构的格式声明如下:structhostent{charFAR*h_name;/*officialnameofhost*/charFAR*FAR*h_aliases;/*aliaslist*/shorth_addrtype;/*hostaddresstype*/shorth_length;/*lengthofadd
4、ress*/charFAR*FAR*h_addr_list;/*listofaddresses*/#defineh_addrh_addr_list[0]/*address,forbackwardcompat*/};并由此定义了指向该结构的指针LPHOSTENT:typedefstructhostentFAR*LPHOSTENT;h_name字段是正式的主机名。如果解析名字时使用域名系统DNS,它就是使域名服务器返回响应的“全限定域名”(FQDN)。如果解析名字时按本机系统目录中的hosts文件来解析,
5、主机名就是该文件中对应IP地址行后跟的第一个主机名。h_aliases字段是一个由若干个主机别名组成的空中止字符串数组。h_addrtype表示即将返回的地址家族类型。h_length字段则对h_addr_list字段中的每一个地址的字节长度进行定义。h_addr_list字段是一个由若干个主机IP地址组成的空中止数组(因为可以为一台主机分配若干个IP地址),这个数组中的每个地址都是按网络字节顺序返回的。一般情况下,应用程序都采用该数组中的第一个IP地址。但是,如果返回的地址不止一个,应用程序就会相应
6、地选择一个最恰当的,而不是一直都用第一个地址。可以使用inet_ntoa()函数将网络字节顺序的地址转换到以‘.’分隔的十进制字符串形式。=====================================================================说明(1):“主机字节顺序”与“网络字节顺序”如将四字节的IP地址“1.2.3.4”(MSB=1,LSB=4)写成一个unsignedlong型的长字时,字节顺序的排法有两种:一种是IntelX86主机内存中的排法,叫“主机字节顺
7、序”,最低有效字节LSB在前,最高有效字节MSB在后,字节顺序为0x04,0x03,0x02,0x01;另一种是“网络字节顺序”,这是互联网联网标准指定使用的多字节顺序排法,它规定,最高有效字节MSB在前,最低有效字节LSB在后,因此,上例的字节顺序排成0x01,0x02,0x03,0x04.在网络套接字程序编写时,涉及到主机中的多字节数据,该数据内各字节排列一般用“主机字节顺序”,凡涉及到网络发送、接收的数据结构中,其多字节数据中各字节排列一般用“网络字节顺序”,这在我们编写网络套接字程序时是要时时
8、当心的。下面两个API函数将一个数从“主机字节顺序”转换成“网络字节顺序”:u_longhtonl(u_longhostlong);u_shorthtons(u_shorthostshort);下面两个API函数将一个数从“网络字节顺序”转换成“主机字节顺序”:u_longntohl(u_longnetlong);u_shortntohs(u_shortnetshort);说明(2):inet_ntoa()函数与inet_addr()函数inet_nto
此文档下载收益归作者所有