upgraded-journey

记录一些容易混淆的知识点, 包含但不限于Java


Project maintained by DouglasZillah Hosted on GitHub Pages — Theme by mattgraham

访问百度域名UnknownHost

百度这么叼, 也会有域名无法访问的时候?

最近就碰上这个事情了, 调用百度的 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