Получение имен компьютеров из моей сети
Мне было интересно, есть ли способ получить все имена компьютеров, которые отображаются в моих сетевых местах, используя C#.
3 ответа
Вы захотите использовать API-интерфейс NetServerEnum(). Я не верю, что в базовых библиотеках.NET есть управляемая оболочка для этого, но мне удалось найти это с помощью быстрого поиска в Google: http://www.codeproject.com/Articles/16113/Retreiving-a-list-of-network-computer-names-using, использующих
ПРИМЕЧАНИЕ. Я не проверял и не тщательно проверял код кода проекта, но он должен быть достаточным отправным пунктом для того, что вам нужно, если есть какие-либо проблемы.
РЕДАКТИРОВАТЬ: не используйте DirectoryServices, если вы не уверены в доменной среде. Класс System.DirectoryServices - это оболочка ADSI, которая не работает без Active Directory для запроса.NETServerEnum() работает в рабочих группах и доменах, но не гарантирует наиболее надежные данные (не все машины могут отображаться). Он опирается на службу браузера компьютера.
Лучшим решением, вероятно, будет класс, который объединяет обе возможности и объединяет результаты: /
Это работает, но это занимает некоторое время.:/
public List<String> ListNetworkComputers()
{
List<String> _ComputerNames = new List<String>();
String _ComputerSchema = "Computer";
System.DirectoryServices.DirectoryEntry _WinNTDirectoryEntries = new System.DirectoryServices.DirectoryEntry("WinNT:");
foreach (System.DirectoryServices.DirectoryEntry _AvailDomains in _WinNTDirectoryEntries.Children) {
foreach (System.DirectoryServices.DirectoryEntry _PCNameEntry in _AvailDomains.Children) {
if (_PCNameEntry.SchemaClassName.ToLower().Contains(_ComputerSchema.ToLower())) {
_ComputerNames.Add(_PCNameEntry.Name);
}
}
}
return _ComputerNames;
}
В зависимости от разрешения пользователя, приложение может или не может получить эту информацию.
Попробуйте использовать ActiveDirectory. Это должно дать вам точную информацию о локальной сети.
Используйте System.DirectoryServices.