IPHostEntry - необходимо заставить его возвращать FQDN HostName из другого домена

Я создал функцию, которая прекрасно работает в том же домене.
Он может принимать имя типа "Win7-Alpha" и возвращать "Win7-Alpha.Alpha.ca" при использовании в домене "Alpha.ca".

public static string TryGetServerFQDN(string ServerName)
{
    string ServerFQDN = ServerName;
    if (!string.IsNullOrEmpty(ServerName))
    {
        IPHostEntry serverIPEntry = null;
        try
        {
            serverIPEntry = Dns.GetHostEntry(ServerName);
        }
        catch
        {
        }

        if (serverIPEntry != null && !string.IsNullOrEmpty(serverIPEntry.HostName))
        {
            ServerFQDN = serverIPEntry.HostName;
        }
    }
    return ServerFQDN;
}

Однако, если я попробую то же самое на домене "Beta.ca", он вернет только "Win7-Alpha". Он может разрешить IPv4-адрес, если он передан вместо этого, но, опять же, он возвращает только "Win7-Alpha".... Я не хочу просто "Win7-Alpha", я хочу полное доменное имя!

На Beta.ca DNS я вижу полное доменное имя, которое я хочу, так почему оно мне не дает?

DNS на Beta.ca

1 ответ

Похоже, что Microsoft сделала несколько очень сомнительных методов кодирования. Из того, что я могу сказать, Windows не даст вам имя FQDN из другого домена, но вы можете настроить список суффиксов DNS, который будет принудительно запрашивать имя с суффиксами домена. Похоже, это заставляет Windows искать запись, которая соответствует полному доменному имени (даже если это можно сделать только с помощью имени хоста). Разница заключается в том, что когда он возвращает IP-адрес и имя, которое он использовал, используемым именем было полное доменное имя, созданное им из указанного вами списка.

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

На самой машине

  1. Нажмите Пуск
  2. Поиск "Центр управления сетями и общим доступом"
  3. Нажмите "Изменить настройки адаптера"
  4. Для каждого адаптера щелкните его правой кнопкой мыши и выберите "Свойства".
  5. Выберите либо Протокол Интернета версии 6 (TCP/IPv6), либо Протокол Интернета версии 4 (TCP/IPv4).
  6. Нажмите кнопку "Свойства"
  7. Нажмите кнопку "Дополнительно..."
  8. Нажмите вкладку DNS
  9. Выберите опцию "Добавить эти суффиксы DNS (по порядку)"
  10. Нажмите "Добавить..." и добавьте домен, на котором вы находитесь в первую очередь.
  11. Повторите, нажмите "Добавить..." и добавьте каждый домен, от которого вам может потребоваться полное доменное имя.
  12. Опять же, убедитесь, что в верхней части списка находится домен, на котором находится этот компьютер.
  13. Нажмите кнопку ОК в окне "Дополнительные параметры TCP / IP".
  14. Нажмите OK в окне свойств интернет-протокола.
  15. Нажмите "Закрыть" или "ОК" в окне свойств адаптера.
  16. Попробуйте пропинговать компьютер по имени в другом домене, вы должны увидеть возвращенное полное доменное имя.
  17. Вы также можете пропинговать IPv4 через "ping -4 COMPUTERNAME"
  18. Если он не работает:
    • Откройте cmd.exe в качестве администратора
    • ipconfig / flushdns
    • ipconfig / registerdns

Или используя групповую политику

  1. Запустите управление групповой политикой с достаточными учетными данными администратора домена / леса.
  2. Выберите, какую политику вы хотите изменить. В этом примере Политика домена по умолчанию
  3. Щелкните правой кнопкой мыши и выберите "Изменить".
  4. Перейдите вниз к [Конфигурация компьютера> Политики> Административные шаблоны> Сеть> DNS-клиент]
  5. Откройте "Список поиска DNS-суффиксов"
  6. Выберите "Включить"
  7. В текстовом поле DNS-суффиксы введите DNS-суффиксы, разделенные запятыми. Ex. Мы находимся на домене Beta.ca, поэтому набираем Beta.ca,Alpha.ca
  8. Нажмите OK или Применить, затем закройте Windows
  9. Если вам нужно применить политику к машине как можно скорее, на машине вы можете открыть cmd.exe и набрать gpupdate / force

Лично я считаю, что это настолько невероятно глупо, что DNS может соответствовать IP-адресу или имени хоста ИЗ ДРУГОГО ДОМЕНА.... он находит запись, но не возвращает вам полное доменное имя записи, КОТОРОЕ ОН ЯВЛЯЕТСЯ ЗНАТЬ, КОГДА ВЫ СМОТРИТЕ НА ЗАПИСИ ОНА, похоже, там и есть!... но у вас его не будет, если вы не жестко закодируете список DNS-суффиксов, а затем получаете полное доменное имя, которое затем заставляет код работать должным образом. Очень плохая производительность на самом деле!

//Once you add Alpha.ca to the DNS Suffix List on the machine running this code....
//This will now correctly return Win7-Alpha.Alpha.ca
Dns.GetHostEntry("Win7-Alpha").HostName;

DNS-суффикс присутствует для создания полного доменного имени

Другие вопросы по тегам