Получение имен компьютеров из моей сети

Мне было интересно, есть ли способ получить все имена компьютеров, которые отображаются в моих сетевых местах, используя 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.

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