网络编程_名字和IP地址转换.ppt

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

名字和IP地址转换 域名系统:DNS DNS中的条目称为资源记录,常用的有以下几类: A:记录将主机名映射为32位的IPv4地址; AAAA:记录将主机名映射成128的IPv6地址; MX:指定一主机作为邮件交换器; CNMAE:指定服务器的规范名字;常见的用法是为常用服务(如ftp和www)指定一个CNMAE记录。 名字解析过程 应用程序代码 解析器 代码 解析器配置文件 函数 调用 函数 返回 本地名字 服务器 其他名字 服务器 UDP请求 UDP应答 应用进程 域名解析函数-gethostbyname #include netdb.h struct hostent *gethostbyname(const char *hostname) 返回:非空指针-成功;空指针-出错,同时设置h_error 该函数既可解析IPv4地址,也可解析IPv6地址; 该函数既可接收域名,也可接收点分十进制参数 当hostname为点分十进制时,函数并不执行网络查询,而是直接将其拷贝到结果字段中。 此函数返回的非空指针指向下面的hostent结构 结构hostent struct hostent { char *h_name; /* official (canonical) name of host */ char **h__aliases; /* pointer to array of pointers to alias names */ int h_addrtype; /* host address type: AF_INET or AF_INET6 */ int h_length; /* length of address :4 or 16 */ char **h_addr_list; /* ptr to array of ptrs with IPv4 or IPv6 address */ }; #define h_addr h_addr_list[0] /* first address in list */ gethostbyname 返回的信息 h_name h_aliases h_addrtype h_length h_addr_list hostent{ } 正式主机名 \0 别名1 \0 别名2 \0 IP地址1 IP地址2 IP地址3 NULL NULL AF_INET in_addr{ } in_addr{ } in_addr{ } main(int argc, const char **argv) { ulong_t addr; struct hostent *hp; char **p; if (argc != 2) { printf(usage: %s host_name\n, argv[0]); exit (1); } hp = gethostbyname(argv[1]); if (hp == NULL) { printf(host information for %s not found\n, argv[1]); exit (1); } for (p = hp-h_addr_list; *p != NULL; p++) { struct in_addr in; char **q; memcpy(in.s_addr, *p, sizeof (in.s_addr)); printf(%s\t%s, inet_ntoa(in), hp-h_name); for (q = hp-h_aliases; *q != 0; q++) printf( %s\n, *q); } exit (0);} 反向域名解析函数-gethostbyaddr #include netdb.h struct hostent *gethostbyaddr(const char *addr, size_t len, int family); 返回:非空指针-成功;空指针-出错,同时设置h_error 该函数取一个二进制的IP地址,并试图找到相应的主机名; 参数addr不是char *类型,而实际上是一个真正指向IPv4或IPv6地址结构in_addr或in6_addr,因此当输入是点分十进制串时,需先调用

文档评论(0)

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

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

1亿VIP精品文档

相关文档