Назад | Перейти на главную страницу

Почему wget перенаправляется на localhost при получении неразрешимой страницы?

Я пытаюсь получить несуществующую страницу (неразрешимое имя хоста) с помощью wget. Я ожидаю, что это не удастся, но это не так.

Вот стенограмма

[mark@cn ~]$ cat /etc/resolv.conf
; google public
nameserver 8.8.8.8
nameserver 8.8.4.4

[mark@cn ~]$ host nonexistent.example.com
Host nonexistent.example.com not found: 3(NXDOMAIN)
[mark@cn ~]$ wget -O - http://nonexistent.example.com/
--2010-09-05 22:12:09--  http://nonexistent.example.com/
Resolving nonexistent.example.com... 205.178.189.131
Connecting to nonexistent.example.com|205.178.189.131|:80... connected.
HTTP request sent, awaiting response... 301 Moved Permanently
Location: http://127.0.0.1 [following]
--2010-09-05 22:12:09--  http://127.0.0.1/
Connecting to 127.0.0.1:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 524 [text/html]
Saving to: `STDOUT'

 0% [                                       ] 0           --.-K/s              
(some HTML that my local Apache serves)
100%[======================================>] 524         --.-K/s   in 0s

2010-09-05 22:12:09 (62.5 MB/s) - `-' saved [524/524]

Почему это происходит? Любые идеи?

ОС: Centos 5.5 x86_64 Сеть: выделенные виртуальные серверы cloudnext

Я спрашиваю, потому что я пробовал то же самое в коде Python, и происходит нечто подобное. Что-то происходит подозрительно, и я не могу понять, что именно.

Вы, возможно, упустили часть своего resolv.conf где указаны ваши поисковые домены?

Если хотя бы в одном из ваших поисковых доменов есть записи с подстановочными знаками (или домен FQDN вашего сервера), то что wget действительно решает, это nonexistent.example.com.your.domain.com.. Это, вероятно, приводит к веб-серверу, который настроен для перенаправления клиента на localhost, если он получает запрос на неизвестный VHost.

На мой взгляд, правильный способ исправить это - не использовать домены с подстановочными знаками или, по крайней мере, не использовать их в качестве доменов поиска. Если на самом деле полное доменное имя вашего сервера находится в домене с подстановочными знаками, вы можете обойти проблему, поместив это в свой resolv.conf:

options ndots:1
search .

Я столкнулся с очень похожим симптомом, когда wget разрешал адреса до 127.0.0.1. Это произошло, несмотря на то, что другие машины в той же сети правильно разрешили адрес, поэтому он выглядел локализованным. Машина, на которой возникла проблема, использовала cntlm для обработки прокси, но оказалось, что процесс cntlm в то время не работал. После запуска процесса cntlm wget функционировал должным образом и разрешил правильный адрес.

Я подозреваю, что это потому, что Google DNS возвращает ответ практически на все запросы. OpenDNS тоже похож ... идея в том, что они могут перенаправлять запросы неизвестного хоста в другое место для исправления (* кашляет) и дохода от рекламы (* кашляет).

Что произойдет, если вы измените DNS-серверы на что-то другое? Нравится 4.2.2.2?

-M