为什么 wget 在获取无法解析的页面时会重定向到本地主机?

为什么 wget 在获取无法解析的页面时会重定向到本地主机?

我正在尝试使用 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 正常运行并解析到正确的地址。

相关内容