我正在尝试使用 wget 获取不存在的(无法解析的主机名)页面。我预计它会失败,但事实并非如此。
以下是文字记录
[mark@cn ~]$ cat /etc/resolv.conf ; 谷歌公众 名称服务器 8.8.8.8 名称服务器 8.8.4.4 [mark@cn ~]$ 主机不存在.example.com 未找到主机 nonexistent.example.com:3(NXDOMAIN) [mark@cn ~]$ wget -O - http://nonexistent.example.com/ --2010-09-05 22:12:09-- http://nonexistent.example.com/ 正在解析不存在的.example.com...205.178.189.131 连接到 nonexistent.example.com|205.178.189.131|:80... 已连接。 HTTP 请求已发送,正在等待响应...301 永久移动 地址:http://127.0.0.1 [关注] --2010-09-05 22:12:09-- http://127.0.0.1/ 连接到 127.0.0.1:80...已连接。 HTTP 请求已发送,正在等待响应...200 OK 长度:524 [text/html] 保存至:`STDOUT' 0% [ ] 0 --.-开尔文/秒 (我的本地 Apache 提供的一些 HTML) 100%[=======================================>] 524 --.-K/s,以 0 秒为单位 2010-09-05 22:12:09 (62.5 MB/s) - `-' 已保存 [524/524]
为什么会发生这种情况?有什么想法吗?
操作系统:Centos 5.5 x86_64 网络:cloudnext 专用虚拟服务器
我之所以问这个问题,是因为我在 Python 代码中尝试过同样的操作,并且发生了类似的事情。有些事情很可疑,但我不太清楚是什么。
答案1
resolv.conf
您是否可能遗漏了列出搜索域的部分?
如果至少有一个搜索域具有通配符条目(或服务器 FQDN 域),那么wget
真正解析的是nonexistent.example.com.your.domain.com.
。这可能会导致配置为在收到未知 VHost 的查询时将客户端重定向到本地主机的 Web 服务器。
我认为解决此问题的正确方法是不使用通配符域,或者至少不要将其用作搜索域。如果实际上您的服务器的 FQDN 位于通配符域中,您可以通过将以下内容放入以下内容来解决这个问题resolv.conf
:
options ndots:1
search .
答案2
我怀疑这是因为 Google DNS 几乎对所有请求都返回了答案。OpenDNS 也类似... 其理念是,他们可以将未知主机请求重定向到其他地方进行更正(*咳嗽)并获得广告收入(*咳嗽)。
如果将 DNS 服务器更改为其他服务器会发生什么情况?例如 4.2.2.2?
-M
答案3
我遇到了一个非常相似的症状,其中 wget 会将地址解析为 127.0.0.1。尽管同一网络上的其他计算机正确解析了该地址,但还是发生了这种情况,因此它似乎是本地化的。出现问题的计算机使用 cntlm 进行代理处理,但事实证明 cntlm 进程当时没有运行。启动 cntlm 进程后,wget 正常运行并解析到正确的地址。