Назад | Перейти на главную страницу

Как netstat получает имя хоста с IP-адреса, когда nslookup и nblookup каждый раз терпят неудачу?

В Windows Server 2003, когда я запускаю netstat без флагов это занимает гораздо больше времени, чем netstat -n чтобы вернуть результаты. Я понимаю, что это потому, что он должен выполнять обратный поиск по IP-адресу, чтобы получить соответствующее имя хоста.

В результатах есть строки, которые netstat, кажется, перестают отображать и которые занимают больше времени, чем обычно. Насколько я могу судить, это все адреса, для которых на наших локальных DNS-серверах нет сопоставления IP-адреса и имени хоста. Ничего страшного. nslookup и nblookup также не могут найти имена хостов для рассматриваемых IP-адресов, соглашаясь с тем, что это будет частью медлительности, связанной с этими записями.

Однако в результатах netstat эти записи показывают правильное имя хоста. Как такое возможно? Как netstat может определить имя хоста для подключений без обратного DNS или обратного WINS (Что-то подобное существует) записи?

Я попытался очистить локальный кеш DNS и все равно получил те же результаты. Изменить: есть пересылать записи DNS для рассматриваемых имен хостов. Возможно ли, что базовое соединение каким-то образом способно «удержать» исходное имя, используемое для создания соединений?

Очевидно, nblookup не работает с обратным поиском IP -> имени хоста. Я начал собирать пакеты с помощью MS Network Monitor, чтобы посмотреть, как netstat разрешает имя, и узнал что-то новое. Очевидно, он вернется к поиску NetBIOS, если DNS не удастся.

Еще одна важная вещь, на которую следует обратить внимание, я столкнулся с проблемой при устранении этой проблемы, потому что моя локальная машина - это Windows 7. Другой метод, который использует Windows 7, называется LLMNR. Итак, если DNS не работает, он попытается выполнить LLMNR поиск. LLMNR недоступен в Windows Server 2003.

Порядок разрешения:

  1. DNS
    а. Кэш резолвера (файл хостов + кэшированные запросы DNS) (ipconfig / displaydns)
    б. Запрос DNS-сервера (ipconfig / все чтобы увидеть DNS-серверы, которые будут опрошены, nslookup попытаться выполнить запросы)
  2. LLMNR (Windows Vista / 7/8, Server 2008)
    а. Кэш LLMNR
    б. LLMNR многоадресный запрос
  3. NetBIOS (Порядок и методы зависят от типа узла NetBIOS - найдите тип по: ipconfig / all | findstr "Тип узла"
    а. WINS-серверы (узел h, узел m, узел p)
    б. Файл LMHosts
    c. Трансляция (узел h, узел m, узел b)

Вот фантастическое видео на YouTube о различных методах разрешения: https://www.youtube.com/watch?v=gzqjeds8gDg и есть отличная статья MSDN TechNet о разрешении имен, ищите "Link-Local Multicast Name Resolution: The Cable Guy".

Для обратного просмотра NetBIOS: nbtstat -A [IP-адрес]