Разрешить имя NetBIOS в Windows 7
По этой ссылке NetBIOS больше не поддерживается, начиная с Windwos Vista. Конечно же, я больше не вижу ни одного имени NetBIOS в свойствах сети.
Однако, когда я пишу коды на моем Windows 7, я все еще сталкиваюсь с именами NetBIOS во многих местах. Например
- Я все еще могу использовать "MYDOMAIN\Harvey" для входа в систему на моем компьютере, где я считаю, что MYDOMAIN - это имя NetBIOS.
- Переменные среды COMPUTERNAME и USERDOMAIN по-прежнему являются именами NetBIOS. Я ожидаю увидеть здесь DNS-имена
- Мои имена экземпляров SQL Server, поступающие из моей SQL Server Management Studio, все еще похожи на MYMACHINE\Instance1.
Я предполагаю, что Microsoft все еще поддерживает некоторые части для обратной совместимости. Я хочу понять, как Windows 7 собирается преобразовать имя NetBIOS в IP-адрес. Я нашел эту статью, объясняющую, как работает разрешение имен NetBIOS, но я боюсь, что это больше не так в Windows 7. По крайней мере, у меня нет сервера WINS.
Мой последний вопрос: как мне сделать разрешение имен NetBIOS программным способом, предпочтительно в C#. Я в порядке, чтобы использовать PInvoke.
UDAPTE
Тридус был прав. Я могу использовать System.Net.Dns.GetHostAddresses("имя хоста") для разрешения имени NetBIOS. Я использовал отражатель, чтобы увидеть, что происходит под капотом. Он вызывает gethostbyname() из ws2_32.dll
Здесь объясняется, что gethostbyname() будет выполнять разрешение имен NetBIOS.
- Проверьте имя локального хоста на соответствие имени.
- Проверьте файл Hosts на соответствие записи имени.
- Если DNS-сервер настроен, запросите его.
- Если совпадение не найдено, попытайтесь разрешить имя NetBIOS.
О тайне NetBIOS, не поддерживаемой в этой ссылке, я думаю, это просто означает, что API не поддерживается. Люди в ServerFault считают, что NetBIOS все еще поддерживается в Windows 7.
1 ответ
Сам NetBIOS как старый протокол может не поддерживаться, но SMB/CIFS все еще есть, и поэтому \ hostname для общего доступа к файлам и тому подобное все еще работает.
Что касается того, как определить имя, я смог сделать это:
System.Net.Dns.GetHostAddresses ("имя хоста")
Я нахожусь в домене, поэтому он может просто добавить DNS-суффикс и выполнить поиск DNS, но это сработало для меня. Попробуйте.:)