Я полагаю, вы неправильно понимаете цель файла hosts.txt
.
Если все, что вас волнует, это TL; DR (слишком долго; не читал), прокрутите вниз до конца ответа. Далее следует объяснение того, что происходит, чтобы помочь вам понять, почему вы получаете результаты, которые вы получаете.
hosts.txt
(обычно это /etc/hosts
в Unix-подобных системах) обеспечивает сопоставление между именем хоста и IP-адресом. Преобразователь имен системы обычно настраивается так, чтобы он предпочитал записи hosts.txt
DNS, так что hosts.txt
можно использовать в качестве переопределения DNS. Это особенно полезно в тех случаях, когда локальные имена не существуют в DNS, но у вас просто недостаточно хостов в сети, чтобы гарантировать настройку локального полномочного полномочного DNS-сервера со всеми вытекающими отсюда последствиями.
Однако современный веб-браузер опирается на нечто большее, чем просто сопоставление имени с IP-адресом.
Типичный процесс выглядит примерно так:
- Пользователь вводит URL-адрес в поле адреса браузера или иным образом запускает веб-запрос
- Браузер ищет имя хоста по URL-адресу, IP-адресу и подключается к этому IP-адресу.
- Браузер настраивает сеанс HTTPS, если URL-адрес является
https://
URL
- Браузер прерывается, если представленный сертификат не совпадает с именем хоста в URL
- Браузер говорит удаленному веб-серверу указать ему путь
/something/whatever
из имени хоста из URL
- Удаленный веб-сервер отвечает запрошенным ресурсом или, как правило, ошибкой, если запрос не может быть выполнен по какой-либо причине
- Браузер интерпретирует и отображает или воздействует на данные, полученные от удаленного веб-сервера
- Если полученные данные являются перенаправлением, то процесс начинается с шага 1 вместо этого URL.
Редактируя hosts.txt
вы изменяете только то, что происходит в шаге 2 выше. Просмотр веб-страниц намного сложнее, чем просто поиск по имени!
Также обратите внимание, что веб-браузеры иногда реализуют свои собственные функции поиска имен вместо разгрузки на распознаватель, предоставляемый операционной системой. В таком случае даже шаг 2 не обязательно даст вам результат, который вы хотите получить, потому что он вполне может следовать обычному пути делегирования имени из корня DNS, поэтому вы получите тот же ответ, что и в противном случае; в этом случае с hosts.txt
никогда не консультируются!
Примечательно, что браузер по-прежнему ожидает сертификат для конкретного имени хоста в URL-адресе на шаге 3; и он сообщит удаленному веб-серверу имя хоста, которое вы указали на шаге 4.
Так как веб-серверы Google вряд ли будут настроены для обслуживания www.yahoo.com
, будь то через HTTP или HTTPS, это происходит не позднее, чем между шагами 4 и 5 (удаленный веб-сервер не может предоставить запрошенный ресурс).
У меня нет хорошего объяснения того, почему вы получаете тайм-аут, а не ответ об ошибке веб-сервера, но причина сбоя в значительной степени зависит от удаленного сервера, поэтому я подозреваю, что он вполне может не отвечать вообще, когда вас спрашивают о хозяин, о котором он просто не знает.
И, конечно же, если вы просто экспериментируете, нет необходимости использовать Yahoo или Google. Скорее, есть IP-адреса в Интернете и имена хостов, специально выделенные для примера и целей документации, которые хороши для этого. Например, вы можете использовать 192.0.2.100
для IP-адреса и test.example.com
для имени хоста, поскольку ни один из них не принадлежит никому конкретно. Это или RFC 1918 пробел (с 10.0.0.0 по 10.255.255.255, с 172.16.0.0 по 172.31.255.255 или с 192.168.0.0 по 192.168.255.255), но вам все равно нужно соответствующее доменное имя, для которого зарезервированы хорошие.
TL; DR:
Если вы хотите убедиться, что ваша запись hosts.txt
делает то, что должна, откройте командную строку и введите команду ping -n 1 www.yahoo.com
(в вашем случае). Он должен ответить с IP-адресом, который вы настроили. -n 1
вызывает отправку только одного эхо-запроса, потому что все, что нас действительно интересует, это результаты поиска по имени.
Я бы предпочел nslookup www.yahoo.com
, но, очевидно, в Windows nslookup
тоже не смотрит на hosts.txt
. (В Linux это обычно происходит, потому что он запрашивает системный преобразователь, а системный преобразователь обычно настроен для обращения к файлу hosts; если вам нужен чистый DNS-поиск в Linux, вы обычно используете вместо этого host
или dig
.)