Почему Safari игнорирует мой файл /etc/hosts?

Я добавил несколько доменов для блокировки ( 127.0.0.1 mydomain.com) в свой /etc/hostsфайл, и по какой-то причине Safari их игнорирует.

Я пытался:

  • отключение расширений Safari,
  • очистка кеша ( sudo dscacheutil -flushcache),
  • перезапуск Safari и Mac в целом.

Chrome учитывает /etc/hostsизменения, а Safari — нет. Во вложении образец моего /etc/hostsфайла.

Я использую Safari 6.0.4 с Mountain Lion 10.8.3.

Есть идеи?

##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting.  Do not change this entry.
##
127.0.0.1       localhost
255.255.255.255 broadcasthost
::1             localhost
fe80::1%lo0     localhost
127.0.0.1       facebook.com
Когда я сохранил текст в блоке кода как /etc/hosts, он заблокировал Facebook в Safari. Используют ли ваши /etc/hosts окончания строк CR, или вы пытались переместить другие записи над записями IPv6 ?

Ответы (14)

У меня была немного другая версия той же проблемы, и я подумал, что упомяну, что сработало для меня.

Я разрабатываю сайты. Для этого у меня есть полная копия каждого сайта, работающего в моей локальной сети. Когда я хочу работать локально, я всегда просто добавляю запись для «example.com» в свой локальный файл /etc/hosts, и это всегда переопределяет DNS, позволяя мне получить доступ к локальной копии веб-сайта в любой браузер, включая Safari и Firefox. Я могу работать, не затрагивая фактически работающий сайт, а затем загружать изменения, когда они будут завершены.

Однако недавно эта техника перестала работать как для Safari, так и для Firefox, но не для Chrome, поэтому какое-то время я был ограничен использованием Chrome для локальной разработки. Я поискал в Google и попробовал все предложенные исправления — CR в конце файла hosts, только одна запись в строке, различные изменения конфигурации Firefox с использованием «about: config» и т. д. Ничего не сработало.

Затем я попробовал эту простую вещь: помимо того, что я поместил версию адреса IPV4 в файл /etc/hosts, я также поместил версию IPV6.

До:

10.0.1.23       example.com

После:

10.0.1.23       example.com
0:0:0:0:0:FFFF:0A00:0117        example.com

Как только я добавил запись IPV6, и Firefox, и Safari начали обращаться к правильному (локальному) серверу.

Существуют различные веб-сайты, которые переводят адреса IPV4 в IPV6; просто выполните поиск в Google по запросу «ipv4 to ipv6».

Не могли бы вы проверить, что последний символ вашего /etc/hostsявляется новой строкой? Например, откройте его с помощью vi.
Последний символ моего файла /etc/hosts — «\n», или шестнадцатеричный 0A.
Это правильный ответ. Чтобы предотвратить Safari, вам понадобятся записи IPv4 и IPv6 . Протестировано в MacOS 10.12.
ipaddressguide.com/ipv4-to-ipv6 - Оба добавляют 2 строки + удаляют очень длинные строки - разделите их - работает!

Я потратил довольно много времени на OS X El Captain 10.11.4, чтобы заблокировать сайты с помощью файла /etc/hosts вместо использования родительского контроля в настройках системы. В конце концов это просто работало так:

127.0.0.1 www.website.com
127.0.0.1 website.com

Я пробовал много вариантов, но всегда сопоставлялся с 0.0.0.0 ( 0.0.0.0 website.com). Это никогда не работало ни в одном варианте.

В отличие от некоторых предложений в Интернете, эти были бесполезны:

  • Не было необходимости в блокировке IPv6, например fe80::1%lo0 www.website.comили::1 website.com
  • В этом не было необходимости dscacheutil -flushcache, но просто сделайте это на всякий случай.
  • Неважно, вставляете ли вы его в начало или конец файла hosts.
  • Похоже, браузеры отреагировали по-разному: Chrome и Safari заблокировали его сразу же после сохранения правильного hostsфайла, Firefox некоторое время продолжал его игнорировать (неясно, было ли достаточно перезапуска).
    • Попробуйте использовать New Private Windowили перезапустить браузер для проверки.
  • Не добавлять http://или https://в начале адреса
  • Никаких других команд не требовалось.
  • Не отключайте (= закомментируйте, добавив #в начале) строки, которые уже есть в файле hosts.

Полезные проверки

  • Проверьте, распознает ли система ваше перенаправление dscacheutil -q host -a name website.com— должно отобразиться:

    name: website.com
    ip_address: 127.0.0.1
    
  • Проверьте правильность синтаксиса hostsфайла: cat -vet /etc/hosts. Это показывает невидимые символы:

    • Строки должны заканчиваться$
    • Между 127.0.0.1и website.comдолжен быть только пробел или табуляция, которая отображается как ^I.
  • Обратите внимание, что для некоторых сайтов, таких как facebook, например, вам может потребоваться заблокировать много адресов .
  • Я думаю, что hostsфайл должен заканчиваться новой строкой.

У меня была такая же проблема, и она была вызвана наличием очень длинных строк в моем файле hosts (несколько хостов сопоставлены с одним и тем же IP-адресом, указанным в одной строке). Я исправил это, разделив это на несколько строк.

правильно с предыдущим!

У меня была аналогичная проблема. Каждая часть программного обеспечения на моем Mac соблюдала мою запись в файле /etc/hosts, когда мой файл hosts был символически связан (псевдоним) с другим файлом, кроме Safari. Если ваш файл hosts является символической ссылкой, Safari игнорирует его.

Мое решение состояло в том, чтобы сделать /etc/hosts жесткой ссылкой. К счастью, файл hosts, который я постоянно обновляю, находится в той же файловой системе. Если это не так, вы borked.

Плохое сафари... плохое.

Я подумывал о смене карьеры, пока не нашел это. Подумал, что я был бы очень умным и сохранил бы все мои dotfiles (и другие файлы конфигурации) в репозитории git, а затем создал бы символические ссылки. Сегодня уже несколько часов дергаю то, что осталось от моих волос.
Спасибо, вы сэкономили мне часы разочарования! Невероятное сафари!

Единственное , что у меня работает (10.12.1 "Сьерра") :

127.0.0.1   example.com
127.0.0.1   www.example.com
fe80::1%lo0 example.com
fe80::1%lo0 www.example.com
Это правильный ответ. Вы должны добавить domain.comи www.domain.comв файл хоста. Safari может добавить www.в ваш запрос и не будет соответствовать domain.com.

Попробуйте поставить один или два возврата каретки после последней записи.

...
127.0.0.1       facebook.com

^ Carriage Return
к сожалению это не помогло.
Вы должны иметь новую строку ( не возврат каретки) в конце каждой строки, включая последнюю.
Если только он не использует Mac OS 9. :o
Этот трюк для меня. Спасибо.

Работал для меня на Йосемити:

  1. Перейдите в «Системные настройки» > «Сеть» > «Дополнительно» > «Прокси».
  2. Установите флажок «Автоматическое обнаружение прокси», нажмите «ОК» и «Применить» (у меня больше ничего не отмечено)
  3. Введите в Терминале: dscacheutil -flushcache

Это очищает dnscache в Yosemite. Теперь Safari и Chrome должны уважать ваш файл hosts.

Я хотел попробовать это, но я подключаюсь к своему iPhone, а опция «Дополнительно»> «Прокси» недоступна.

В некоторых случаях необходимо добавить в /etc/hostsфайл адрес обратной связи как для IPv4, так и для IPv6.

Скажем, мы уже добавили запись блокировки для IPv4-адреса website.com:

127.0.0.1 website.com

Если dscacheutil -q host -a name website.comвозвращает адреса для обеих версий протокола:

name: website.com
ipv6_address: rand:omin:vali:dipv:6addr:ess5

name: website.com
ip_address: 127.0.0.1

затем нам нужно добавить еще одну строку в файл hosts:

::1 website.com

Начиная с бета-версии macOS Monterey 12.0 (21A5506j), Safari игнорировал мой /etc/hostsфайл, когда у меня была включена функция iCloud Private Relay. Решение состоит в том, чтобы полностью отключить частную ретрансляцию в меню «Настройки» > «Сеть» > «Использовать частную ретрансляцию iCloud».

Хороший звонок. У меня есть «Настройки»> «Сеть»> «Ограничить отслеживание IP-адресов», чтобы (также) отключить частную ретрансляцию iCloud.
OMG, это спасло мне жизнь :) спасибо чувак

У меня было неправильное окончание строки. У него должен быть LF, у меня был CR.

У меня тоже была эта проблема, но решение действительно простое. Предположим, вы создаете псевдоним в файле хоста для своей машины с именем localhost2.

Эта запись в файле хоста должна выглядеть так: 127.0.0.1 localhost2.

Когда вы вводите «localhost2» в строке URL-адреса сафари, вы заметите в раскрывающемся списке, что параметр по умолчанию — поиск в Google, вы должны выбрать параметр «Перейти на сайт localhost2».

Убедитесь, что ваш /etc/hosts имеет именно эти атрибуты. Я копировал, модифицировал и заменял файл, используя свой собственный идентификатор пользователя, все остальные программы продолжали работать, кроме сафари...

$ ls -l /etc/hosts
-rw-r--r--  1 root  wheel  1004 Sep 24 16:03 /etc/hosts

Для https-адреса example.com мне пришлось включить адреса IPv4 и IPv6 как для example.com, так и для www.example.com, прежде чем это сработало. Как это:

##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting.  Do not change this entry.
##
127.0.0.1       localhost
127.0.0.1       example.com
::1     example.com
127.0.0.1       www.example.com
::1     www.example.com
255.255.255.255 broadcasthost
::1             localhost

Согласно этому блогу http://thecoredump.org/2011/09/editing-the-hosts-file-in-mac-os-x-lion/

Вы должны поместить запись в начало файла хоста. Очень неортодоксально. Хотя личного опыта в этом нет.

Они ошибаются. Имеет значение только синтаксис, а не расположение. И все дополнительные записи всегда должны соответствовать значениям по умолчанию.
Они, вероятно, говорят, чтобы поставить его в начале, чтобы избежать распространенной ловушки людей, редактирующих файл hosts: они забывают поставить новую строку в конце последней строки. Без этой новой строки последняя строка будет проигнорирована. Если вы добавите запись на передний план, трудно забыть новую строку.
Не уверен, почему, но это работает для меня. Я использую йосемит.