Я полагаю, вы неправильно понимаете цель файла 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 .)