这两天一直在复习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
则在执行这两个函数的时候,就会返回映射对对应的信息。