淘宝客网站需要多大主机,郑州市住建局官网,做网站后台服务器什么最好,网站建设与维护的认识目录
1--域名系统
2--域名与 IP 地址的转换
2-1--利用域名来获取 IP 地址
2-2--利用 IP 地址获取域名
3--代码实例
3-1--gethostbyname()
3-2--gethostbyaddr() 1--域名系统 域名系统#xff08;Domain Name System#xff0c;DNS#xff09;是对 IP 地址和域名进行相…目录
1--域名系统
2--域名与 IP 地址的转换
2-1--利用域名来获取 IP 地址
2-2--利用 IP 地址获取域名
3--代码实例
3-1--gethostbyname()
3-2--gethostbyaddr() 1--域名系统 域名系统Domain Name SystemDNS是对 IP 地址和域名进行相互转换的系统其核心是 DNS 服务器 一般来说IP 地址比较难记且经常变化而域名容易记且易表述并不会轻易改变域名Naver 网站的 IP 地址是222.122.195.5 而其域名为 www.naver.com 域名是赋予服务器端的虚拟地址并非实际地址因此需要通过 DNS 服务器将虚拟的域名地址转换为实际的 IP 地址 通常计算机会向内置的默认 DNS 服务器请求获得域名对应的 IP 地址若默认 DNS 服务器无法解析则默认 DNS 服务器会不断向上级 DNS 服务器询问直至获得域名对应的 IP 地址 程序中使用域名的必要性 ① IP 地址比域名发生变更的概率要高因此一般不会利用 IP 地址来编写程序 ② 域名一般不会变更通过域名编写程序在程序中根据域名来获取 IP 地址再通过转换的 IP 地址接入相应的服务器就比直接使用 IP 地址显得更为高效 2--域名与 IP 地址的转换
2-1--利用域名来获取 IP 地址
#include netdb.h
struct hostent* gethostbyname(const char* hostname);
// 成功时返回 hostent 结构体地址失败时返回 NULL 指针// hosttent结构体的定义如下
struct hostent{char* h_name;char** h_aliases;int h_addrtype;int h_length;char** h_addr_list;
}在上述 hostent 结构体中h_name 表示官方域名h_aliases 表示其它域名信息因为多个域名可以访问同一主页同一个 IP 也可以绑定多个域名h_addrtype 表示地址族信息例如 IPv4则对应为 AF_INET; h_length 表示 IP 地址的长度IPv4 则为 4IPv6 则为 16h_addr_list 表示已整数形式保存的 IP 地址 2-2--利用 IP 地址获取域名
#include netdb.h
struct hostent* gethostbyaddr(const char* addr, socklen_t len, int family);
// 成功时返回 hostent 结构体变量地址值失败时返回 NULL 指针
// addr 表示函数 IP 地址信息的 in_addr 结构体指针为了同时传递 IPv4 地址之外的其他信息该变量的类型声明为 char 指针
// len 表示向第一个参数传递的地址信息的字节数IPv4 为 4IPv6 为 16
// family 表示传递的地址族信息IPv4 为 AF_INETIPv6 为 AF_INET6
3--代码实例
3-1--gethostbyname()
// gcc gethostbyname.c -o gethostbyname
// ./gethostbyname www.baidu.com#include stdio.h
#include stdlib.h
#include string.h
#include unistd.h
#include arpa/inet.h
#include netdb.hvoid error_handling(char *message){fputs(message, stderr);fputc(\n, stderr);exit(1);
}int main(int argc, char *argv[]){int i;struct hostent *host;if(argc ! 2){printf(Usage : %s port\n, argv[0]);exit(1);}host gethostbyname(argv[1]);if(!host){error_handling(gethost... error);}printf(Official name: %s \n, host-h_name);for(i 0; host-h_aliases[i]; i){printf(Aliases %d: %s \n, i1, host-h_aliases[i]);}printf(Address type: %s \n, (host-h_addrtype AF_INET)?AF_INET:AF_INET6);for(i 0; host-h_addr_list[i]; i){printf(IP addr %d: %s \n, i1, inet_ntoa(*(struct in_addr*)host-h_addr_list[i]));}return 0;
} 3-2--gethostbyaddr()
// gcc gethostbyaddr.c -o gethostbyaddr
// ./gethostbyaddr 199.59.148.206#include stdio.h
#include stdlib.h
#include string.h
#include unistd.h
#include arpa/inet.h
#include netdb.hvoid error_handling(char *message){fputs(message, stderr);fputc(\n, stderr);exit(1);
}int main(int argc, char *argv[]){int i;struct hostent *host;struct sockaddr_in addr;if(argc ! 2){printf(Usage : %s port\n, argv[0]);exit(1);}memset(addr, 0, sizeof(addr));addr.sin_addr.s_addr inet_addr(argv[1]);host gethostbyaddr((char*) addr.sin_addr, 4, AF_INET);if(!host){error_handling(gethost... error);}printf(Official name: %s \n, host-h_name);for(i 0; host-h_aliases[i]; i){printf(Aliases %d: %s \n, i1, host-h_aliases[i]);}printf(Address type: %s \n, (host-h_addrtype AF_INET)?AF_INET:AF_INET6);for(i 0; host-h_addr_list[i]; i){printf(IP addr %d: %s \n, i1, inet_ntoa(*(struct in_addr*)host-h_addr_list[i]));}return 0;
}