Заметки о Windows и других программных продуктах Microsoft...

Тайна файла hosts

Тайна файла hosts

Есть в операционной системе такой таинственный файлик hosts. Даже люди далекие от сетевых технологий наверняка слышали про него. На первый взгляд это обычный текстовый файл. Располагается он в папке C:\Windows\System32\drivers\etc. Кстати, этот файл не является эксклюзивным для Windows, он есть и в ОС Unix\Linux и в MacOS.

Вот так примерно выглядит содержимое файла hosts по умолчанию:

# Copyright (c) 1993-2009 Microsoft Corp.
#
# This is a sample HOSTS file used by Microsoft TCP/IP for Windows.
#
# This file contains the mappings of IP addresses to host names. Each
# entry should be kept on an individual line. The IP address should
# be placed in the first column followed by the corresponding host name.
# The IP address and the host name should be separated by at least one
# space.
#
# Additionally, comments (such as these) may be inserted on individual
# lines or following the machine name denoted by a '#' symbol.
#
# For example:
#
# 102.54.94.97 rhino.acme.com # source server
# 38.25.63.10 x.acme.com # x client host
#
# localhost name resolution is handled within DNS itself.
# 127.0.0.1 localhost
# ::1 localhost

Как видите, внутри находится описание и пара примеров. Из описания следует, что  файл содержит сопоставления IP-адресов с именами хостов. Каждая запись храниться в отдельной строке. Формат записи таков —  первым идет IP-адрес, за ним через пробел имя хоста. С помощью решетки (#) к записи можно добавлять комментарии. Например:

102.54.94.97 rhino.acme.com # source server

Если не вдаваться в подробности, то файл hosts указывает, по какому IP-адресу надо обращаться к хосту.  Данные из hosts имеют приоритет над данными, полученными с DNS-серверов, при этом сам файл полностью контролируется администратором компьютера, что позволяет администратору переопределять IP-адреса любых сетевых ресурсов.

Как работает разрешение имен

Для того, чтобы понять, что такое файл hosts, вкратце разберем принцип разрешения имен. Итак, у каждого ресурса в сети имеется свой IP-адрес, что то типа 192.168.0.1. Но пользователи (как правило) обращаются к сетевым ресурсам по их именам (напр. google.com), поэтому необходим механизм преобразования имени хоста в IP-адрес. На данный момент этот механизм реализован с помощью сервиса доменных имен (Domain Name Service, DNS).

Когда пользователь пытается получить доступ к хосту по его имени, клиент обращается к DNS серверу и получает IP-адрес, соответствующий указанному имени.

порядок разрешения имен

 

Для примера воспользуемся утилитой ping. Вот так выглядит разрешение имени в адрес на практике.

разрешение имени в адрес

 

В Windows в качестве клиента DNS используется системная служба Dnscache. Как видно из ее названия, основной задачей этой службы является кэширование DNS-имен. Каждый раз при запросе к DNS-серверу  полученный результат сохраняется в кэше DNS, где хранится в течение своего времени жизни (Time To Live, TTL). Это позволяет ускорить процесс разрешения имен, поскольку нужное имя можно взять из кеша без необходимости каждый раз обращаться к DNS-серверу .

служба DNS-клиента в Windows

 

Таким образом, Windows пытается разрешить имена в следующем порядке:

• Сначала проверяет, не совпадает ли имя с локальным именем хоста;
• Затем смотрит в кэш DNS;
• И только если в кэше соответствие не найдено, отправляет запрос к серверу DNS.

Посмотреть содержимое кэша DNS можно в командной строке с помощью команды ipconfig /displaydns, например:

содержимое кэша DNS

 

Казалось бы, при чем здесь файл hosts? А при том, что его содержимое сразу считывается в кэш DNS и постоянно обновляется. Именно поэтому данные из файла hosts всегда имеют приоритет над данными, полученными с DNS-серверов. Для примера изменим добавив в hosts адрес www.google.com:

изменения в hosts

 

И еще раз проверим содержимое кэша. Как видите, теперь в нем находится адрес из файла hosts.

содержимое кэша DNS после изменений в hosts

История файла hosts

Файл hosts пришел к нам из далекого прошлого 🙂 из тех времен, когда компьютеры были очень большими, а глобальной сети Интернет не было и в помине.

Одной из первых компьютерных сетей была ARPANET, созданная по заказу американского военного агентства DARPA в 1969 году.

В семидесятых годах сеть ARPANET включала в себя всего несколько сотен узлов. А всю информацию по узлам, в том числе и необходимую для разрешения имен и адресов, содержал один единственный файл HOSTS.TXT. За файл отвечал Сетевой информационный центр Стэнфордского исследовательского института (Stanford Research Institute`s Network Information Center, SRI-NIC).

В тот период времени единственным источником, распространявшим файл, являлся узел SRI-NIC. Администраторы ARPANET просто посылали изменения электронной почтой в NIC и периодически синхронизировали свои файлы HOSTS.TXT с копией на узле SRI-NIC с помощью протокола FTP. Присылаемые ими изменения добавлялись в файл HOSTS.TXT один или два раза в неделю.

По мере роста сети эта схема становилась все менее работоспособной. Пропорционально количеству узлов в ARPANET увеличивался размер файла и рос объем работ, связанный с обновлением файла на узлах. При появлении каждого нового узла в сети необходимо было не только добавить строчку в HOSTS.TXT, но и синхронизировать эти изменения между SRI-NIC и всеми узлами сети.

И в 1984 году на замену файлу HOSTS.TXT пришла система доменных имен DNS. Однако сам файл hosts остался в операционных системах, в качестве дополнительного инструмента для работы с сетью.

Перенаправление файла hosts

По умолчанию в операционных системах Windows файл hosts располагается в папке С:\windows\system32\drivers\etc. Но при необходимости этот путь можно изменить. Значение пути, по которому располагается актуальный файл hosts, хранится в параметре реестра DataBasePath, находящемся в разделе HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters.

путь к файлу hosts в реестре

 

Кстати, этим свойством файла hosts очень любят пользоваться различные зловредные программы (вирусы, трояны и прочая нечисть). Они подменяют путь в реестре, а потом по новому пути подкладывают свой файл hosts, ведущий на подложные адреса. При этом оригинальный файл остается на своем месте и внешне все выглядит правильно. Так вот,  по умолчанию значение параметра всегда %SystemRoot%\System32\drivers\etс и если вы увидите там что то другое, то стоит начать беспокоиться .

Восстановление файла hosts

Что случится, если файл hosts будет поврежден или удален? Да в принципе ничего страшного. Как я уже говорил, он является всего лишь вспомогательным инструментом и без него операционная система вполне сможет обойтись. Определить наличие проблем с файлом можно по событию с EventID 1012 в журнале событий операционной системы, в котором буде сообщение о невозможности прочитать файл.

ошибка чтения файла hosts

 

Но восстановить файл hosts после повреждения, удаления или несанкционированного редактирования все же стоит, хотя бы для порядка. Сделать это довольно просто, достаточно создать в Блокноте обычный текстовый файл добавить в него текст, приведенный в начале статьи. Файл сохранить с именем hosts и без расширения и положить в родную папку С:\windows\system32\drivers\etc. Напоминаю, что для работы с файлом нужны права локального администратора на компьютере.

И еще нюанс — блокнот по умолчанию сохраняет файлы с расширением txt, а проводник по умолчанию не показывает расширения файлов.  Поэтому во избежании ошибки включите в проводнике опцию показывать расширения файлов.

восстановление файла hosts

 

Вот в принципе и все, что я хотел рассказать о файле hosts. Как видите, не такой уж он и таинственный 🙂

 
 
Комментарии

Пока нет комментариев.

Ответить