Чому "ping" не може вирішити ім'я, коли "nslookup" працює нормально?


138

На своїй робочій станції Windows XP я можу знайти машину, до якої потрібно підключитися, у DNS nslookup:

nslookup wolfman
Server: dns.company.com
Address: 192.168.1.38

Name: wolfman.company.com
Address: 192.168.1.178

Але, коли я намагаюся підключитися до цієї машини, я отримую помилку про те, що машина не може бути знайдена (тобто не можна шукати в DNS):

C:\> ping wolfman
Ping request could not find host wolfman. Please check the name and try again.

Я можу підключитися, якщо безпосередньо використовую IP-адресу:

C:\> ping 192.168.1.178

Pinging 192.168.1.178 with 32 bytes of data:

Reply from 192.168.1.178: bytes=32 time=41ms TTL=126
Reply from 192.168.1.178: bytes=32 time=41ms TTL=126
Reply from 192.168.1.178: bytes=32 time=44ms TTL=126
Reply from 192.168.1.178: bytes=32 time=38ms TTL=126

Я міг би обходити це, додаючи запис до свого hostsфайлу, але я б швидше з'ясував, чому це відбувається. Проблема є тимчасовою, більшу частину дня я можу підключитися до машини просто чудово.

Як це можливо?

ETA: Я залишив це для стислості, але його попросили:

C:\> ping wolfman.company.com
Ping request could not find host wolfman.company.com. Please check the name and try again.

ETA: Інші програми отримують ті ж результати. Я лише спробував ping спростити. telnet не може підключитися, додатки Cygwin друкують повідомлення "невідомого вовчого хоста".

Оновлення: Використовуючи дротик, я виявив, що моя робоча станція не робить пошук DNS. Це просто повідомлення про помилку "Не вдалося знайти хоста".


Ви можете додати стандартний суфікс DNS для .company.com.
billc.cn

@ billc.cn У мене вже є суфікс DNS.
skiphoppy

Я думаю, що відбувається - ping не шукає FQDN хоста, на відміну від того, nslookupякий використовує search domainпараметр пропозиції DHCP (або що ви вказали для статичної конфігурації IP). Підтвердьте це, зробивши те, що сказав @SLaks, і пінг-код FQDN хоста :)
jackweirdy

1
Можливий дублікат: superuser.com/questions/220471/…
Der Hochstapler

Що відбувається, коли ти біжиш ping -4 wolfman?
Der Hochstapler

Відповіді:


101

Я вважаю, що nslookup відкриває підключення winsock на порту DNS і видає запит, тоді як ping використовує службу клієнта DNS. Ви можете спробувати зупинити цю послугу і побачити, чи це має значення.

Деякі команди, які повторно ініціалізують різні стани мережі:

Скидання записів WINSOCK до стандартних налаштувань: netsh winsock reset catalog
Скидання TCP / IP стека до встановлених налаштувань: Скидання netsh int ip reset reset.log
кеша DNS-резолюції: ipconfig /flushdns
Поновлення реєстрації DNS-клієнта та оновлення оренди DHCP: ipconfig /registerdns
Таблиця маршрутизації Flush: route /f (потрібна перезавантаження)


1
Я б сказав, що Active Directory, ймовірно, активний, але я не знаю, як перевірити.
skiphoppy

11
Я вимкнув службу клієнта DNS, і проблема, схоже, пішла! Ще не впевнений, чи це була сміття. Проблема не повернулася, коли я перезапустив службу.
skiphoppy

6
Іноді просто зупинка та перезапуск служби усуває проблеми DNS (не запитуйте мене чому). Питання в тому, як довго це триватиме. Деяким нещасливим людям потрібно повторювати це знову і знову.
harrymc

1
sfc / scannow у випадку, якщо системні файли служби обслуговування клієнтів dns є непомітними? Я також бачив деяких людей із подібними проблемами, спричиненими вірусом.
Джон Клоське

1
Те, чого мені не вистачало у цій відповіді, було ipconfig /registerdns(я детально пояснив у своїй відповіді нижче)
Мік Халсбенд

31

Спробуйте пінг з ім'ям хоста, а потім крапкою. Тож замість ping wolfmanвикористанняping wolfman.

Це повинно вирішити вас без необхідності вирішувати обхідні файли хостів тощо.


вау, це працювало і для мене. Я здогадуюсь, що щось очікує доменне ім’я, яке не налаштовано
user1190

Гаразд, це працює ... чому?
Даніель Б.

3
будь-які пропозиції, чому це працює і як скоріше використовувати локальні назви, не маючи крапкових крапок?
Руберойд

Дякую - це працювало для мене, але я також знав би, чому це працює
Франк Фу

2
@Ruberoid Будь ласка, дивіться мою відповідь, як це зробити автоматично.
Фредерік Олунд

17

Спробуйте ipconfig /displaydnsі шукайте вовка. Якщо він кешований як "ім'я не існує" (можливо, через попередній невдалий пошук), ви можете очистити кеш ipconfig /flushdns.

nslookup не використовує кеш, а запитує безпосередньо DNS-сервер.


Я спробував: це не кешоване. І очищення кеша також не виправить проблему.
skiphoppy

Чи можете ви розмістити вихід nslookup -all? Чи є в novcсписку?
craig65535

13

Спробуйте додати .до цього з'єднання суфікси DNS. Тобто перейдіть до:

  1. Статус Ethernet
  2. Клацніть Властивості
  3. Internet Protocol Version 4
  4. Клацніть Властивості
  5. Клацніть Додатково
  6. Додайте ці достатності DNS (по порядку)
  7. Додайте .як суфікс.

Ці ж кроки проілюстровані на наступному скріншоті:

Це має змусити ping wolfmanпрацювати.

Пояснення

nslookup wolfman(пошук сервера імен: wolfman) надсилає ім'я хоста ( wolfman) до DNS (система доменних імен) для отримання відповідної IP-адреси. Це єдина мета nslookupкоманди. Це вже працює, тому ми перевірили, що DNS працює і що wolfmanдійсно відповідає IP-адресі.

На відміну від цього, ping wolfmanпотрібно зробити дві речі:

  1. Отримайте IP, якому відповідає ім'я хоста ( wolfman).
  2. Відправляйте пакети в IP та слухайте відповідь

У Windows (навіть останніх версіях, таких як Windows 10) перший крок може легко провалитися. Для зворотної сумісності Windows підтримує різні методи вирішення імені хоста (файл хостів, DNS, NetBIOS / WINS, файл LMHOST).

На жаль, схоже, що pingкоманда Windows не завжди намагається шукати DNS. Я не знаю конкретних умов, які викликають таку поведінку.

На щастя, ми можемо змусити Windows здійснити пошук DNS, використовуючи FQDN (повноцінне доменне ім’я). На практиці, ми робимо це з допомогою суфікса в .точку на ім'я хоста: wolfman.. Спробуйте ping wolfman.і перевірте, чи працює він.

Останній крок - змусити Windows додавати цю крапку самостійно. Я вже показав, як це зробити на початку цієї відповіді.


Просто хочу сказати, що це виявилося фактором, який досяг успіху на машині, над якою я працював. Дурне, хоча здається. І не тільки для ping, але й для інших додатків. Я не впевнений, що ви пояснюєте те, що намагалися, коли це цілком правильно (але ви визнаєте, що ви не впевнені в цьому). Але великий плюс для згадки про те, що цей збій можна легко діагностувати, намагаючись пінг із доменним іменем із доданим вручну точковим суфіксом.
gwideman

Це не має сенсу. Ви вважаєте, що "команда ping Windows не завжди намагається шукати DNS", але потім рекомендуєте змінити, як виконуються пошук DNS для вирішення цього питання? Звісно ж імовірним , що пінг буде виконує пошук DNS (ів) , але робить їх неправильно, і саме тому це виправлення працює.
Twisty Impersonator

@TwistyImpersonator Я розумію ваше непорозуміння. Справа в тому, що Windows спробує декілька методів вирішення імені хоста, якщо його буде надано, wolfmanі пошук DNS (очевидно) не є першочерговим пріоритетом серед зазначених методів. Тепер, якщо ви використовуєте wolfman.замість цього, Windows надасть пріоритет пошуку DNS перед іншими методами, оскільки wolfman.це FQDN, який (очевидно) вимагає пошуку DNS.
Фредерік Олунд

Тому я думаю, що ви говорите, якби пінг дійшов до того, щоб здійснити пошук DNS в процесі його нормального пошуку, він би спрацював. Однак, ping повинен закінчити спробу DNS, якщо інші методи пошуку не повертають відповідь, це означає, що причина ping не вдається самостійно, тому що інший метод, який він намагається, перш ніж DNS повертає відповідь. Це пояснення не відповідає факту того, що ping не зможе знайти хоста.
Twisty Impersonator

@TwistyImpersonator "Отже, я думаю, ви говорите, якби пінг дійшов до того, щоб здійснити пошук DNS під час його нормального робочого процесу пошуку, він буде працювати": Так. "Однак, ping повинен закінчити спробу DNS, якщо інші методи пошуку не повертають відповідь, це означає, що причина ping не вдається самостійно, тому що інший метод, який він намагається, перш ніж DNS повертає відповідь": Мабуть, ні. Можливо, пінг просто здається, спробувавши пару методів. Можливо, пінг відмовляється після таймауту. Можливо, ping ніколи не пробує пошук DNS, оскільки він вважає, що ім'я хоста не схоже на DNS.
Фредерік Олунд

11

nslookup працює при використанні інших команд при вирішенні імен / ip-адрес у Windows.

Нормальний метод дозволу на Windows , виглядає наступним чином :

  1. Клієнт перевіряє, чи є ім'я запиту власним.
  2. Потім клієнт здійснює пошук локального файлу хостів, списку IP-адреси та імен, що зберігаються на локальному комп'ютері.
  3. Сервери доменних імен (DNS) запитуються.
  4. Якщо ім’я все ще не вирішено, послідовність роздільної здатності імені NetBIOS використовується як резервна копія. Цей порядок можна змінити, налаштувавши тип вузла NetBIOS клієнта.

nslookupз іншого боку використовується для тестування серверів доменних імен.


3
Чи є налаштування, які можуть перемістити запит NetBIOS вище в цьому списку? У мене є відчуття, що пошук NetBIOS якимось чином задіяний, але оскільки запит DNS, безумовно, працює, я не можу зрозуміти, як він коли-небудь дістанеться до цього кроку, якщо послідовність, описана вище, незмінна.
skiphoppy

8

Я боровся з подібною проблемою і спробував рішення, запропоноване @harrymc. Я виявив, що в кінцевому підсумку, здається, (принаймні дещо) працює на форумі мікрософт-технологій ( nslookup працює, але більше нічого немає DNS на автономному ПК Win7 )

Ось цитата:

... спробуйте скористатися командою нижче для очищення та скидання кешу роздільної здатності клієнта для тесту.

ipconfig / flushdns

ipconfig / registerdns

Будь ласка, зверніться до посилання нижче для отримання більш детальної інформації. http://jefferyland.wordpress.com/2011/07/28/quick-review-of-flushdns-registerdns-and-dns-queries/

Тому в основному те, чого мені не вистачало ipconfig /registerdns


1
Оригінальна відповідь @harrymc тепер відображає відсутню /registerdnsкоманду
Мік Халсбенд

Я граю в цю проблему на Win10 близько року. Коли мій ноутбук прокидається, він не може знайти жодних серверів corp, але зовнішні сайти, такі як microsoft.com, працюють. Здається, це відбувається при зміні Wi-Fi мереж (домашня / VPN на офісні). flushdns вирішує проблему іноді, але не завжди. Сьогодні я спробував registerdns і це негайно виправило проблему. Завтра спробую додати. до кінця імені (але ping вже не вдається з FQDN для внутрішніх серверів). Це дуже засмучує. І на завершення - якщо я зачекаю деякий час, проблема вирішиться сама.
ripvlan

6

Просто сьогодні у нас було те саме питання , але рішення було іншим . Тому я подумав, що додам це для довідки, оскільки це був найкращий результат пошуку.

  • Проблема : pingім'я хоста не вирішиться, але nslookupможе. (Спостерігається на двох різних хостах Windows Server 2012 R2.)
  • Причина : (Для кожного хоста) У хості підключено більше одного NIC і налаштовано кілька шлюзів за замовчуванням .
  • Рішення : (Для кожного хоста) Видаліть шлюз за замовчуванням з конфігурації всіх NIC, окрім одного, тож залишається лише один шлюз за замовчуванням .

ах це зробив це для мене. Ідеально.
IAmTheSquidward

Короткий і простий
Франк Фу

5

Може бути, wolfman.company.com вказаний у C: \ Windows \ system32 \ driver \ etc \ hosts?

nslookup обходить цей файл і завжди запитує DNS, тоді як ping та інші інструменти насамперед шукають у файлі "hosts", потім у DNS.


Гарна думка! Але я перевірив, і жодна з машин, з якими я бачив цю проблему, не вказана в хостах.
skiphoppy

5

У мене була така ж проблема в системі Windows 2012R2 (= 8.1), і я спробував усі вищевказані пропозиції, але жодна з них не виправила б це:
- Працював пінг з повноцінного імені.
- Пінгінг некваліфікованого імені не робив.
- Обидві працювали над кількома іншими системами, які мали однакову ОС і, мабуть, однакову конфігурацію.
- Усі необхідні рядки пошуку суфіксів були там.
(Зверніть увагу, що деякі із запропонованих виправлень, як-от вирішення запитів на багато міток, очевидно, не мають значення, оскільки некваліфіковане ім'я має лише одну частину.)

Потім я помітив, що цільова система, яку я намагався пінг, НЕ мала IPv6-адреси. Тож я спробував "ping -4 unqulified_name " та бінго! це спрацювало.
Так чомусь лише в цій системі ping намагався вирішити некваліфіковане ім'я-> IPv6-адресу, а не некваліфіковане ім'я-> IPv4.
Для мене виправлення полягало в тому, щоб повністю відключити IPv6, оскільки він мені зовсім не потрібен. Але мені дуже цікаво знайти більш щадний спосіб сказати ping (або, мабуть, службі клієнтів DNS), щоб спробувати вирішити як IPv4, так і IPv6 адреси.


2

Додавання запису у файл c:/windows/system32/drivers/etc/hostsможе виправити це.


Це виправить це, але він не вирішить його питання на цій машині, але це не допоможе йому на інших машинах. Пам'ятайте хости> DNS Resolver> DNS-сервер> ім'я NetBIOS.
Чувак

2

Я намагався з'ясувати, чому на одному комп’ютері win 7 я можу використовувати ping serverякий працює, а на іншому він не може вирішити server. Однак обидва могли пінг, server.lanякий я не зовсім зрозумів.

Виявляється, я заплутався з деякими налаштуваннями (суфіксами DNS), щоб не потрібно використовувати FQDN під час використання робочої VPN. Мені довелося додати свої локальні .lanдо цих суфіксів, щоб обидва комп'ютери діяли однаково.

Перейдіть до Панелі управління> Мережа та Інтернет> Мережеві з'єднання та клацніть правою кнопкою миші на підключенні до мережі та натисніть Властивості. Клацніть Інтернет-протокол версії 4 та натисніть кнопку Властивості. Потім натисніть кнопку Додатково ... у цьому новому вікні. Перейдіть на вкладку DNS, тут я додав суфікс DNS для своєї роботи, але також потрібний для мого звичайного домашнього з'єднання.

Розширені налаштування TCP / IP


Я наткнувся на подібну ситуацію на сервері зі статичною IP-адресою. Перший запис у "Додавання цих суфіксів DNS" був порожнім, а "Суфікс DNS для цього з'єднання" порожнім. На інших серверах, де він працював, був такий самий порожній "Додати ці DNS-суфікси", але заповнений "суфікс DNS для цього з'єднання".
Тім Льюїс

2

Я також натрапив на це питання. "Найпростіший" спосіб виправити це для мене - просто додати "a" .до кінця імені хоста. Однак це досить дратує. У більшості мереж цього не потрібно. Я б краще не казав усім іншим в мережі робити це, коли їм потрібно отримати доступ до того ж ресурсу.

Я розглядав пропозицію Фредеріка Ааллунда як можливе рішення і зауважив, що вони пропонують перейти з типової опції "Додати первинний та підключення конкретних суфіксів DNS". Це змусило мене подумати, можливо, моя мережа просто трохи не налаштована.

Переглядаючи мої налаштування DD-WRT, "Домен LAN" залишився не встановленим. Якщо встановити, що довільна рядок, здається, вирішила цю проблему для всіх клієнтів моєї мережі, не маючи спеціальної конфігурації на кожній машині, я хотів вирішення! :)


1

я стикався з цим, коли ми переходили на Windows 7 з Windows XP, проблема була пов'язана з проблемою Windows 7 Multi Label DNS Query.

Дозволити додавання суфікса DNS до некваліфікованих запитів імен з кількома мітками - див.

http://computerstepbystep.com/allow_dns_suffix_appending_to_unqualified_multi_label_name_queries.html

Сподіваюся, це допомагає


2
Ласкаво просимо до Супер Користувача! Хоча це теоретично може відповісти на питання, бажано було б сюди включити істотні частини відповіді та надати посилання для довідки.
Канадський Люк

1

Якщо на mac os x це може бути проблема кешу DNS:

Вивантажте кеш

sudo killall -HUP mDNSResponder
sudo dscacheutil -flushcache

ОП запитує про Windows XP, а питання тегом Windows.
PL

Можливо, це корисно для інших. Я залишу його, відповідь була тут вже більше 3 років. Навіщо видаляти зараз?
Крістіан

1

Я це підбираю, тому що це мене непокоїло минулого року, і, можливо, я знайшов рішення.

Для мене здавалося, що деяка система dns-кешування в клієнті Windows несправна. На це впливає Windows 7 і 8.1 ... більше не можна сказати про Windows XP. ping не вирішує ім'я. важлива не частина icmp, а частина, що вирішує назву). nslookup призначений для запиту сервера імен і робить саме це, і не має ієрархії, яка вирішує імена.

Перезапуск служби dnscache допомагав щоразу. Але оскільки я відключив IPv6 на всіх клієнтських інтерфейсах, проблема більше не виникала.

Ура!


Вимкнення IPv6 може не бути життєздатним рішенням для всіх (і в кращому випадку це звучить анекдотично). Все інше, що ви говорите, схоже, було сказано вже в цій темі (наприклад, коментар harrymc "Іноді просто зупинка та перезапуск служби виправляє проблеми з DNS", два роки тому).
G-Man

1

Я можу помилитися з цього приводу, оскільки це засноване на моїх давно забутих днях набору ресурсів NT4.

Як тариф, я можу згадати, що PING використовує Netbios / WINS та DNS (у такому порядку, принаймні, якщо ви не вказуєте FQDN).

WINS минув багато років тому, але у вас все ще можуть бути включені Netbios у вашому інтерфейсі, і PING, отже, може використовувати netbios, які можуть не дати вам жодного результату. Особливо, якщо трафік кудись проходить маршрутизатор.

Просто відключіть Netbios і Ping використовуватиме DNS як першочерговий пріоритет і додасть зареєстрований DNS Surffic на інтерфейс до вашого імені хоста.


0

Я щойно мав цю проблему, і знайшов щось досить своєрідне, і встиг її виправити Лол

В основному, якщо у вашому файлі хостів є записи, які є такими ж, як IP, до якого намагається вирішити ваш ping, це не вдасться.

Наприклад, якщо у вашому DNS у вас є запис для www.example.com - 10.0.0.20, але тоді у вас є запис у файлі хостів вашого клієнта, 10.0.0.20 somethingelse.com, ви не зможете просканувати www .example.com

Дивний да


0

У моєму випадку, що вирішило цю проблему, було додати домен хоста, який я намагався ping, до параметра групової політики під назвою "Список пошуку суфіксів DNS" .

Коротше кажучи, така процедура: відкрийте gpedit.mscта перейдіть до Computer Configuration -> Administrative Templates -> Network -> DNS Client > DNS Suffix Search List, встановіть його на "Увімкнено" та додайте доменне ім'я до списку (список порожній за замовчуванням).

Більш детальний опис цих кроків можна знайти тут


0

У мене була така ж проблема, і, виявляється, інша машина мала ту саму IP-адресу, і це спричиняло її.

Змінено IP назад на DHCP, і все працювало нормально.


nslookup працював, оскільки йому не потрібно спілкуватися з іншим хостом. Ping дійсно потребує спілкування і очевидно ламається.
ndemou

@ndemou: Це пояснення не має сенсу. Так, завдання ping намагається спілкуватися з іншим хостом, але перший крок у цьому процесі - отримати IP-адресу іншого хоста. Якщо він  отримує IP-адресу другого хоста, він говорить вам про це; якщо він потім не може спілкуватися з іншим хостом, він врешті-решт повідомляє про "100% втрати". Але, у питанні, ping не вдається навіть отримати адресу. (Спробуйте  ping bbbbbbb.comі  ping bbbbbb.comдля порівняння.)
Скотт

Ви праві @Scott. Я редагував відповідь Клауса, і читаючи його опис проблеми, я забув, що ця проблема, пов’язана з ping, полягає в тому, що вона не вирішується. Не можу бути впевнений, але я б сказав, що Клаус просто не отримував відповідей.
ndemou

0

Жодне з рішень тут не працювало для мене. Що для мене працювало, було підключення до vpn моєї роботи за допомогою OpenVPN. Потім після відключення все продовжувало працювати.

Я вважаю, що проблема стосувалася вимкнення живлення, поки мій комп'ютер був підключений до openVPN. Єдиний спосіб я зрозумів це за допомогою WireShark. Я помітив, що цільові IP-адреси для всіх запитів збираються на IP-адреси у внутрішній мережі моєї роботи.


-1

ping використовує протокол ICMP, зокрема "Ехо-запит" та "Ехо-відповідь".

багато мереж відключають утиліти ICMP з метою запобігання атак або основного сканування в мережі. Я знайшов багато придбаних вами маршрутизаторів із налаштуваннями відключення ping та подібними утилітами, включеними за замовчуванням.

Ви можете дізнатися більше про ICMP тут:

http://en.wikipedia.org/wiki/Internet_Control_Message_Protocol


8
Так, але перед тим, як використовувати ICMP, домен повинен бути вирішений на IP-адресу як зазвичай. Тож тут справа не в цьому.
Майкл
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.