记录一些容易混淆的知识点, 包含但不限于Java
百度这么叼, 也会有域名无法访问的时候?
最近就碰上这个事情了, 调用百度的 Http API, 结果报了个 UnknownHostException 异常。
java.net.UnknownHostException: api.baidu.com: unknown error
at java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method) ~[na:1.8.0_101]
at java.net.InetAddress$2.lookupAllHostAddr(InetAddress.java:928) ~[na:1.8.0_101]
at java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1323) ~[na:1.8.0_101]
at java.net.InetAddress.getAllByName0(InetAddress.java:1276) ~[na:1.8.0_101]
at java.net.InetAddress.getAllByName(InetAddress.java:1192) ~[na:1.8.0_101]
at java.net.InetAddress.getAllByName(InetAddress.java:1126) ~[na:1.8.0_101]
at org.apache.http.impl.conn.SystemDefaultDnsResolver.resolve(SystemDefaultDnsResolver.java:45) ~[httpclient-4.5.6.jar!/:4.5.6]
at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:112) ~[httpclient-4.5.6.jar!/:4.5.6]
at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:373) ~[httpclient-4.5.6.jar!/:4.5.6]
at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:394) ~[httpclient-4.5.6.jar!/:4.5.6]
at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:237) ~[httpclient-4.5.6.jar!/:4.5.6]
at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:185) ~[httpclient-4.5.6.jar!/:4.5.6]
at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:89) ~[httpclient-4.5.6.jar!/:4.5.6]
at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110) ~[httpclient-4.5.6.jar!/:4.5.6]
at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:185) ~[httpclient-4.5.6.jar!/:4.5.6]
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:72) ~[httpclient-4.5.6.jar!/:4.5.6]
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:221) ~[httpclient-4.5.6.jar!/:4.5.6]
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:165) ~[httpclient-4.5.6.jar!/:4.5.6]
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:140) ~[httpclient-4.5.6.jar!/:4.5.6]
以为是百度域名又解析失败了, 很是兴高采烈了一下, 你百度也有今天啊, 赶紧提个邮……
等等, 感觉有蹊跷, 要不再确认一下?
# 三连走你!
curl baidu.com
ping baidu.com
ping www.baidu.com
没动静……
再试试别的域名? ping qq.com
…
……
…………
Nothing…………
网管! 我又没欠网费为什么不让我连外网!
找来运维, 看他熟练的打出来一行命令:ping www.baidu.com
没反应……
接着:cat /etc/resolv.conf
# Generated by NetworkManager
# No nameservers found; try putting DNS servers into your
# ifcfg files in /etc/sysconfig/network-scripts like so:
#
# DNS1=xxx.xxx.xxx.xxx
# DNS2=xxx.xxx.xxx.xxx
# DOMAIN=lab.foo.com bar.foo.com
nameserver 202.96.134.133
nameserver 8.8.8.8
nameserver 114.114.114.114
沉思半晌, 运维连上另一台机器,
cat
了同一个位置的同一个文件:
# Generated by NetworkManager
search nswyfb159.com
nameserver 202.96.134.133
nameserver 8.8.8.8
熟练的把两个 nameserver
复制粘贴到原来那个不能访问外网的机器的 resolv.conf
下,
再 ping
PING baidu.com (123.125.114.144) 56(84) bytes of data.
64 bytes from 123.125.114.144: icmp_seq=1 ttl=49 time=38.3 ms
64 bytes from 123.125.114.144: icmp_seq=2 ttl=49 time=38.5 ms
64 bytes from 123.125.114.144: icmp_seq=3 ttl=49 time=38.7 ms
解决了0_o
这是个什么神奇海螺!
虚心向运维老大哥请教 resolv.conf
的作用, 以及它和 hosts
的区别。
# resolv.conf
# 记录 DNS 服务器
# hosts
# 记录域名和 ip 的对应关系
tips: 如果在公司却无法访问公司内网域名, 也可以在这里添加对应的 DNS