Почему происходит перенаправление файлов hosts?

10

Я пытаюсь перенаправить google.com на свой локальный компьютер для развлечения и изучения этого файла / etc / hosts на моем Mac.

127.0.0.1 www.google.com

Однако www.google.com по-прежнему отображается на главной странице Google, когда я захожу в Chrome на моем Mac. Зачем?

По сути, это все, что я сделал:

  1. Введите sudo vim /etc/hostsв терминале.
  2. Вводится 127.0.0.1 www.google.comв файл hosts.
  3. Сохранено и выход Vim.
Дэвид Фокс
источник

Ответы:

9

hostsФайл не работает таким образом. Вы можете использовать его только для сопоставления имен хостов с IP-адресами, а не с localhost.

Для вашего случая вы бы использовали 127.0.0.1 www.google.com, то есть сопоставьте www.google.com с 127.0.0.1.

Если вы хотите отобразить несколько имен хостов на один IP, просто добавьте эти имена в одну строку, например 127.0.0.1 www.a.com www.b.com.

Ренан
источник
1
Спасибо. Я просто изменил файл / etc / hosts на моем Mac на 127.0.0.1 www.google.com. Однако google.com по-прежнему ведет на главную страницу Google. Нужно ли что-нибудь обновить? Должен ли я перезагрузить компьютер?
Дэвид Фокс
Тебе не нужно это делать. Попробуйте добавить 127.0.0.1 google.com(без www) после этой строки и проверьте, работает ли она.
Ренан
127.0.0.1 google.comтоже не работает. Я не уверен, что происходит ... Я знаю, что /etc/hostsэто мягкая ссылка /private/etc/hostsна Mac, но я не думаю, что это помогает вообще.
Дэвид Фокс
1
Техническость: hostsсопоставляет имена хостов с IP-адресами, а не наоборот.
Деннис
1
@ Денис, это то, что я собирался сказать, но опять же, это действительно работает в обоих направлениях, когда вы думаете об этом, потому что это создает связь между двумя элементами.
Synetech
7

Веб-браузер - не лучший способ проверить hostsправильность синтаксиса. Попробуйте выполнить

ping www.google.com

и убедитесь, что он пингуется 127.0.0.1.

Причина, по которой Chrome игнорирует ваш hostsфайл, кешируется:

Если Chrome уже запрашивал IP-адрес в последнее время (определение в последнее время, скорее всего, зависит от времени жизни (TTL), возвращаемого DNS-сервером), он пропустит hostsфайл, поскольку он уже знает правильный IP-адрес. Это сделано для ускорения просмотра веб-страниц.

Чтобы Chrome уважал новую запись, сделайте следующее:

  1. Отредактируйте /etc/hostsкак описано @Renan.

  2. Перейти к chrome://chrome/settings/clearBrowserData.

  3. Выберите since the beginning of time.

  4. Проверьте Empty the cache, но снимите все остальное.

  5. Нажмите Clear browsing dataи дождитесь окончания.

  6. Перезапустите Chrome.

Chrome должен уважать ваш hostsфайл сейчас.

Деннис
источник
2
Я узнал это давным-давно с IE6. Если бы я внес изменения в файл HOSTS, пока IE был еще открыт, мне пришлось бы специально закрыть его и запустить снова, чтобы он принял изменения. Это касается большинства программ. Однако некоторые программы (например, версии Chrome за последний год или два) фактически периодически перечитывают файл HOSTS, поэтому, если вы вносите изменения, просто подождите минуту или две, а затем обновите (не нужно очищать кэш). (Эта политика перечитывания иногда бывает полезна, но в действительности она довольно плохая, поскольку она расточительна и особенно плоха, если файл HOSTS большой.)
Synetech
@Synetech: Chrome hostsмгновенно регистрирует изменения , если запись не является именем хоста, которое уже кэшировано. Я предполагаю, что это проверяет, hostsтолько если TTL прошел. С большими веб-сайтами это может занять некоторое время.
Деннис
Я не знаю специфики того, как разные версии перечитывают файл HOSTS, но вы можете использовать Filemon / ProcMon, чтобы увидеть его в действии; chrome.exeбудет время от времени читать весь файл.
Synetech
2
Существует менее жестокий способ очистки DNS-кэша Chrome. Superuser.com/questions/203674/…
hakunin
@hakunin: аккуратно. На Chromium 25.0.1364.160 Ubuntu 12.04 это даже больше не нужно. Я зарегистрировался net-internals/#dns, и кэш хоста автоматически очищается при /etc/hostsизменении.
Деннис
1

Мой ответ - комбинация вышеупомянутого, потому что я соединяюсь со своим офисом через Fortinet SSL VPN для Ubuntu 16.04.

Первое, что мне нужно было сделать, это вызвать консоль терминала и выполнить следующую команду:

sudo nano /etc/resolvconf/resolv.conf.d/base

Я добавил следующий пример:

searchdomain domain.local
nameserver xxx.xxx.xxx.xxx
nameserver xxx.xxx.xxx.xxx

Затем я сохранил файл нажатием CTRL-Oи закрыл нано нажатием CTRL-X.

Затем я сделал следующее, и это сработало отлично:

Чтобы Chrome уважал новую запись, сделайте следующее:

Отредактируйте /etc/hostsкак описано @Renan.

  1. Перейти к chrome://chrome/settings/clearBrowserData.
  2. Выбирай с начала времен.
  3. Установите флажок Очистить кеш, но снимите все остальное.
  4. Нажмите Очистить данные просмотра и дождитесь его завершения.
  5. Перезапустите Chrome.

Теперь Chrome должен уважать ваш файл hosts.

user712460
источник