- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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,因此当输入是点分十进制串时,需先调用
您可能关注的文档
最近下载
- 指南中国斑秃诊疗指南.pdf VIP
- 党建工作问题自查清单100例.docx VIP
- 清远市佛冈县医疗卫生共同体招聘事业单位人员考试真题2024.docx VIP
- 消防维修合同协议书范本.docx VIP
- 学生用品的安全通用要求(GB21027-2020).docx VIP
- 2025年全国中级养老护理员职业技能A证考试题库(含答案) .pdf VIP
- 实验室装修工程验收方案(3篇).docx VIP
- 芯片设计 CMOS模拟集成电路设计与仿真实例基于Cadence IC 617 课件全套 李潇然 第1--9章 CMOS模拟集成电路设计流程简介、ADE仿真概述--- 模-数转换器.pptx
- 规培医师年度总结报告.pptx VIP
- 2023年清远市清城区医疗卫生共同体总医院招聘事业单位工作人员考试真题及答案.pdf VIP
文档评论(0)