Linux下的网络函数gethostbyname/gethostbyaddr会访问DNS吗?
2011-08-01 11:32
337 查看
这两天一直在复习Linux下的C编程,除了项目的需要外,还在为找工作做准备。每次复习的时候,都有新的体会,以前看着这2个函数,觉得会用就行了,也没有深入地去了解它们的工作原理。昨天再次看到,有了新的想法,既然这两个函数能够转换 IP 和域名,那么,它们就会去访问DNS服务器吗?如果真的要去访问,网络不通的情况下,它们又怎么办呢?带着这些疑问,我在网上查了一下,并根据提示,做了一下试验,简单总结了一下:
gethostbyname(域名->IP)、gethostbyaddr(IP->域名)在解析的时候,系统默认会先到 /etc/hosts 文件中去寻找匹配信息,然后再到DNS服务器去解析,这个顺序是可以交换的,只要修改 /etc/host.conf 里的 host(本机) 和 bind(DNS服务器) 的顺序即可,我们做个试验:
在DNS服务器配置正常的情况下,gethostbyname的参数为“www.baidu.com”能正常解析,禁掉DNS就不能正常工作了。但是如果把它和 IP 的映射对添加到 /etc/hosts 文件中,则函数又能正常工作了。例如我们在 /etc/hosts 文件里添加这样一组映射:
12.34.56.78 www.baidu.com
则在执行这两个函数的时候,就会返回映射对对应的信息。
gethostbyname(域名->IP)、gethostbyaddr(IP->域名)在解析的时候,系统默认会先到 /etc/hosts 文件中去寻找匹配信息,然后再到DNS服务器去解析,这个顺序是可以交换的,只要修改 /etc/host.conf 里的 host(本机) 和 bind(DNS服务器) 的顺序即可,我们做个试验:
在DNS服务器配置正常的情况下,gethostbyname的参数为“www.baidu.com”能正常解析,禁掉DNS就不能正常工作了。但是如果把它和 IP 的映射对添加到 /etc/hosts 文件中,则函数又能正常工作了。例如我们在 /etc/hosts 文件里添加这样一组映射:
12.34.56.78 www.baidu.com
则在执行这两个函数的时候,就会返回映射对对应的信息。
相关文章推荐
- (转载)Linux网络编程-使用gethostbyaddr,通过ip地址,得到该ip地址的主机的信息
- 主机名与网络名查询gethostbyname,gethostbyaddr 与 高级名字与地址转换————getaddrinfo()函数详解 .
- socket网络编程之二:gethostbyname()和gethostbyaddr()用法
- gethostbyaddr函数获取主机名
- 名字与地址转换的函数,gethostbyname()、gethostbyaddr()函数
- Linux网络编程IPv4和IPv6的inet_addr、inet_aton、inet_pton等函数小结
- gethostbyname & gethostbyaddr使用方法
- Linux下两个网络函数inet_addr和inet_network (2008-09-01 01:42)
- Linux下获得主机与域名-gethostbyname和gethostbyaddr
- Linux下获得主机与域名-gethostbyname和gethostbyaddr
- Linux网络编程[DNS解析原理,了解相关DNS解析的函数]
- linux网络编程5:gethostbyname&&向固定地址发起请求得到返回页面字符
- linux中gethostbyname和gethostbyaddr的使用
- gethostbyaddr由IP地址取得网络数据
- linux 通过Ip获取主机名等信息gethostbyaddr()等。
- C++实现gethostbyaddr()函数
- 名字与地址(端口)转换——gethostbyname/gethostbyaddr(getservbyname/getservbyport)
- 主机名与网络名查询gethostbyname,gethostbyaddr
- gethostbyname()和gethostbyaddr()函数说明
- perl函数说明(gethostbyaddr)