Зачем заглядывать в кэш
Когда компьютер получает ответ DNS, он запоминает его на время, указанное в самой записи. Дальше обращения к тому же имени обслуживаются локально, без нового запроса к серверу. Это ускоряет работу, но порождает вопросы: какой адрес система помнит сейчас, не устарела ли запись, почему после смены адреса сайта компьютер всё ещё идёт по-старому.
Просмотр кэша отвечает на эти вопросы без догадок. Вы видите, какое имя разрешалось, в какой адрес, и сколько секунд запись ещё будет считаться действующей. Очистка кэша — отдельное действие, которое описано на странице про ipconfig /flushdns; здесь речь только о чтении.
Две команды для одной цели
В cmd используется ipconfig /displaydns. Вывод длинный: для каждой записи печатается несколько строк, и найти нужное имя глазами бывает неудобно. Лучше перенаправить результат в файл или отфильтровать, например командой ipconfig /displaydns | findstr /i имя.
В PowerShell то же даёт Get-DnsClientCache. Результат — таблица, в которой удобно искать. Фильтр по имени выглядит как Get-DnsClientCache -Name имя. Если нужен только определённый тип записей, используйте Where-Object по полю Type. Результат можно сохранить командой Export-Csv, если нужно изучить его позже или показать специалисту.
Оба способа читают один и тот же кэш системы, а не разные хранилища. Выбор зависит лишь от того, в какой оболочке вам удобнее работать.
Поля записи и их смысл
Вот что обычно содержится в выводе Get-DnsClientCache.
| Поле | Значение |
|---|---|
| Entry / Name | Имя, которое разрешалось |
| Type | Тип: A, AAAA, CNAME и другие |
| Status | Состояние записи, например успешный ответ |
| TimeToLive | Сколько секунд запись ещё хранится |
| Data | Содержимое: адрес или другое имя |
Тип A хранит адрес IPv4, AAAA — адрес IPv6, CNAME — указатель на другое имя. Если в одном имени цепочка из CNAME и A, вы увидите несколько строк, где первая указывает на следующую. Это не ошибка.
Как использовать просмотр кэша при поиске проблем
Несколько типовых сценариев:
- Сайт переехал на новый адрес, а у вас открывается старый. Найдите имя в кэше и сверьте адрес с тем, что выдаёт Resolve-DnsName. Если адреса различаются, запись в кэше устарела.
- Имя не открывается, хотя у соседей всё в порядке. Поищите в кэше запись с неуспешным статусом: она может держаться некоторое время и мешать повторным попыткам.
- Подозрение на изменения в файле hosts. Записи из файла hosts тоже могут появляться в кэше, поэтому имя, указывающее на неожиданный адрес, стоит проверить в самом файле.
- Нужно понять, какие имена вообще запрашивает программа. Просмотр кэша после запуска покажет часть из них, хотя это неполная картина.
Для сравнения живого ответа с кэшем всегда запрашивайте имя напрямую через Resolve-DnsName или nslookup.
Чего кэш не покажет и пример чтения записей
Кэш хранит только то, что успел запомнить: записи с коротким временем жизни исчезают быстро, а после перезагрузки или очистки он пустеет. Поэтому отсутствие имени в списке не доказывает, что запроса не было. Кроме того, браузеры ведут собственные кэши имён, независимые от системного. Сброс системного кэша не всегда очищает браузерный.
Служба, хранящая кэш, называется DNS-клиентской. Если она отключена или работает нештатно, команда может вернуть пустой результат или ошибку. Это нестандартное состояние, и на обычном компьютере с ним сталкиваются редко.
Не воспринимайте список как журнал посещений: он не хранит историю, а лишь временные ответы. Тем не менее на общем компьютере его содержимое отражает недавно запрошенные имена, поэтому очищать его перед передачей техники другому человеку разумно.
Предположим, вы выполнили Get-DnsClientCache -Name example.org и увидели две строки. В первой тип CNAME, а в поле Data указано другое имя. Во второй тип A, а в поле Data — числовой адрес. Это значит, что запрошенное имя было псевдонимом, который в итоге привёл к адресу. Значение TimeToLive показывает, сколько секунд запись ещё будет считаться действующей.
Сравните этот адрес с результатом Resolve-DnsName -Name example.org. Если они совпадают, кэш в порядке. Если нет, вы увидели устаревшую запись. Сам домен example.org здесь служебный пример, подставьте нужное вам имя.
Не пугайтесь большого числа записей: система запоминает ответы по всем именам, к которым обращались программы, включая фоновые службы.
Связь с файлом hosts и безопасностью и итоговая последовательность проверки
Записи из файла hosts попадают в кэш, поэтому просмотр кэша помогает заметить неожиданные привязки имён. Если банковский или почтовый сайт указывает на странный адрес, проверьте файл hosts и убедитесь, что он не изменён вредоносной программой. Обычно в нём преимущественно комментарии.
Если вы обнаружили подозрительные записи, не пытайтесь разбираться на ходу: выполните проверку защитным ПО, смените пароли с чистого устройства и сверьтесь с материалами о безопасности. Одно лишь наличие записи в кэше не доказывает заражения, но повод для внимательной проверки есть.
Очистку кэша после просмотра выполняйте только когда она нужна для решения задачи, а не из привычки.
Для проверки нужного имени достаточно трёх шагов. Сначала посмотрите запись командой Get-DnsClientCache -Name имя, если она есть. Затем запросите то же имя напрямую через Resolve-DnsName и сравните адреса. Если адреса различаются, выполните Clear-DnsClientCache и повторите запрос. Если после очистки значение стало верным, дело было в устаревшей записи, а не в сервере DNS или самом сайте. Если расхождение осталось, проблема глубже: проверьте файл hosts и настройки DNS на адаптере.
Просмотр кэша стоит сочетать с другими проверками, а не использовать отдельно. Если имя не открывается, посмотрите, есть ли оно в кэше, затем обратитесь к DNS-серверу напрямую, затем проверьте доступность самого адреса. Так вы разделите три возможные причины: устаревший кэш, ошибку DNS и недоступный сервер. Этот порядок экономит время и не требует очистки кэша заранее.