В дальнейшем мы учитываем только ipv4. Ища способ заблокировать определенный веб-сайт без какого-либо плагина для браузера, я обнаружил этот вопрос: Блокировка веб-сайтов с помощью / etc / hosts . Согласно принятому ответу, простое добавление
0.0.0.0 <domain>
к /etc/hosts
может заблокировать доступ к домену <domain>
. И это сработало как шарм. Но почему это так работает?
Эксперименты
Предположим, веб-сайт X.com
загружает некоторые скрипты из Y.com
, и я добавил 0.0.0.0 Y.com
в /etc/hosts
, чтобы заблокировать скрипты для быть загруженным.
Когда я напрямую набираю Y.com
или 0.0.0.0
в адресной строке браузера, он становится маршрутизируемым и ведет меня на мой локальный веб-сайт localhost:8080
.
Однако, когда я получаю доступ к X.com
, Y.com
полностью блокируется. Под "полностью" я подразумеваю, что к Y.com
невозможно получить доступ не из-за тайм-аута , ни Not Found , ни Forbidden ; насколько я проверяю Network Monitor в Firefox, браузер даже не пытается получить доступ к Y.com
в первую очередь † 1 , что подразумевает, что значение 0.0.0.0
здесь отличается от первый результат выше.
† 1: Или, возможно, он действительно пытается получить доступ к Y.com
, но немедленно возвращает без результата. Если это так, я не понимаю, почему он возвращается мгновенно, не дожидаясь (десятков) секунд для тайм-аута.
Вопросы
В этом случае, кто интерпретирует 0.0.0.0
? Браузер?
Почему косвенная ссылка на 0.0.0.0
(эксперимент 2) означает «это должно быть заблокировано», а прямой доступ к 0.0.0.0
(эксперимент 1) означает «это должен быть подключен к локальному веб-сайту "?
0.0.0.0 - Википедия дает мне подсказку, но не объясняет в в каком контексте выбрано определенное значение.
Среды :
Firefox 77.0.1 на Arch Linux
Моя догадка
После публикации этого вопроса я провел несколько тестов, чтобы найти один факт:
Хотя во многих сообщениях в блогах и ответах на этом веб-сайте говорится, что 0.0.0.0 <domain>
можно использовать для блокировки <domain>
, на самом деле он не блокирует домен. Собственно говоря, это зависит от обстоятельств. Как и обычная запись в /etc/hosts
, 0.0.0.0 <domain>
просто преобразует доступ к <domain>
в доступ к 0.0.0.0
.
Потому что
0.0.0.0
то же самое, что localhost
в этом контексте † 2
, а доступ к 0.0.0.0
происходит мгновенно † 3
, , если вы не используете веб-сервер на хосте , 0.0.0.0 <domain>
эффективно блокирует доступ к <domain>
.
Когда вы используете веб-сервер,
Доступ к <domain>/<file>
эффективно блокируется, если localhost/<file>
не существует. Обратите внимание, однако, поскольку доступ к веб-серверу осуществляется и он возвращает 404, многочисленные обращения к <domain>/<file>
могут замедлить работу вашего компьютера.
Если localhost/<file>
действительно существует, наблюдается неожиданный результат. Если вам повезет, это просто нарушит макет веб-сайта. Но в целом это может быть очень опасно.
Итак, как я предполагаю, 0.0.0.0 <domain>
- не более чем обходной путь; он работает в ограниченных условиях.
† 2: Я пока не понимаю, почему. Предполагаемая причина: Что делает Chrome / server, когда я использую 0.0.0.0 вместо localhost в браузере?
† 3: Например , ping -c 1 0.0.0.0
возвращается через мгновение. Не знаю почему. (Возможно, просто потому, что доступ к локальному интерфейсу очень быстрый?)