powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Получить список серверов в локальной сети
21 сообщений из 21, страница 1 из 1
Получить список серверов в локальной сети
    #39521949
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть старое приложение, в нем для выборки списка серверов в сети, компьютеров в домене используется вызов

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
[DllImport("Netapi32", CharSet=CharSet.Unicode)]
        private static extern int NetServerEnum( 
            string servername,      // must be null
            int level,              // 100 or 101
            out IntPtr bufptr,      // pointer to buffer receiving data
            int prefmaxlen,         // max length of returned data
            out int entriesread,    // num entries read
            out int totalentries,   // total servers + workstations
            uint servertype,        // server type filter
            [MarshalAs(UnmanagedType.LPWStr)]
            string domain,          // domain to enumerate
            IntPtr resume_handle );



На некоторых компьютерах работает, все ок. Но на части компьютеров под тем же юзером, в том же домене получаю ошибки типа:

Error 121: "The semaphore timeout period has expired" (ERROR_SEM_TIMEOUT).
Error 1231: "The remote network is not reachable by the transport" (ERROR_NETWORK_UNREACHABLE)


Допускаю, что на части машин был отключен с перепугу SMB
Но как понять - каковы требования для системы, чтобы этот вызов работал?
И еще: чем можно заменить в c# более неприхотливым?

.
...
Рейтинг: 0 / 0
Получить список серверов в локальной сети
    #39522050
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Ролг ХупинИ еще: чем можно заменить в c# более неприхотливым?
Для админства есть PowerShell и WinRM
...
Рейтинг: 0 / 0
Получить список серверов в локальной сети
    #39522196
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2Ролг ХупинИ еще: чем можно заменить в c# более неприхотливым?
Для админства есть PowerShell и WinRM

мне надо в c# приложении, юзер выбирает серверы, машины в диалоге.
...
Рейтинг: 0 / 0
Получить список серверов в локальной сети
    #39522497
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Ролг Хупин,

А вам надо именно в сети или все же в домене? В домене проще
...
Рейтинг: 0 / 0
Получить список серверов в локальной сети
    #39522501
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Интересуют вообще все сервера или контроллеры домена?
...
Рейтинг: 0 / 0
Получить список серверов в локальной сети
    #39522612
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2Ролг Хупин,

А вам надо именно в сети или все же в домене? В домене проще

Я не знаю какая будет сеть у юзера, поэтому надо уметь разные выбирать.
Для меня и рекомендовано юзеру - сеть с доменом, но реально всякое может быть.

Первым делом я пытаюсь выбрать

SV_TYPE_DOMAIN_CTRL = 0x00000008,
...
Рейтинг: 0 / 0
Получить список серверов в локальной сети
    #39522644
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Через NETBIOS, а точнее через обозрватель компьютеров, который вроде еще поддерживается.
там всё примитивно и выбор серверов невелик, но там они квалифицируются по типу, MSSQL, PDC, WINS и прочее, работает не очень быстро и не очень стабильно :) как я понимаю, когда открывается комбик для поля сервера в обычном соединении в каком нибудь ssms он берёт их именно от туда.
Цель то какая?
...
Рейтинг: 0 / 0
Получить список серверов в локальной сети
    #39522663
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Ролг Хупин,

Если есть домен.

Самое простое, если надо только контроллеры домена.

1. Определить домен. Предполагается что все же прога запускается с машины которая в этом домене.
2. Определить IP-адреса контроллеров домена

Код: c#
1.
string[] controllers  = Dns.GetHostAddresses(Environment.UserDomainName).Select(s=>(Dns.GetHostEntry(s)).HostName).ToArray();



Все сервера в домене. Выбор из АД машин с осью "сервер".

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
DirectoryEntry rootEntry =
                new DirectoryEntry(String.Format(@"LDAP://{0}", Environment.UserDomainName));
            string strFilter =@"(&(objectCategory=computer)(operatingSystem=*server*))";
            DirectorySearcher DirSearch = new DirectorySearcher(rootEntry, strFilter);
            DirSearch.PageSize = 10;
            List<string> servers = new List<string>();
            Regex reg = new Regex(@"^.+CN=([^,]+),");
            SearchResultCollection searchResults = DirSearch.FindAll();
            foreach (SearchResult sr in searchResults)
            {
                Match m = reg.Match(sr.Path); 
                servers.Add(m.Groups[1].ToString());
            } 
...
Рейтинг: 0 / 0
Получить список серверов в локальной сети
    #39522838
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman MejtesЧерез NETBIOS, а точнее через обозрватель компьютеров, который вроде еще поддерживается.
там всё примитивно и выбор серверов невелик, но там они квалифицируются по типу, MSSQL, PDC, WINS и прочее, работает не очень быстро и не очень стабильно :) как я понимаю, когда открывается комбик для поля сервера в обычном соединении в каком нибудь ssms он берёт их именно от туда.
Цель то какая?

дать юзеру возможность типа той, которая в том же SSMS - выгрести юзеров, группы, назначить их в конце концов для SQL Server базы, дать датабазе роли и т.д.
...
Рейтинг: 0 / 0
Получить список серверов в локальной сети
    #39523009
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Ролг ХупинRoman MejtesЧерез NETBIOS, а точнее через обозрватель компьютеров, который вроде еще поддерживается.
там всё примитивно и выбор серверов невелик, но там они квалифицируются по типу, MSSQL, PDC, WINS и прочее, работает не очень быстро и не очень стабильно :) как я понимаю, когда открывается комбик для поля сервера в обычном соединении в каком нибудь ssms он берёт их именно от туда.
Цель то какая?

дать юзеру возможность типа той, которая в том же SSMS - выгрести юзеров, группы, назначить их в конце концов для SQL Server базы, дать датабазе роли и т.д.
А зачем это юзеру надо?
...
Рейтинг: 0 / 0
Получить список серверов в локальной сети
    #39523017
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Ролг Хупинвыгрести юзеров, группы, назначить их
Это все в AD , а не на серверах
...
Рейтинг: 0 / 0
Получить список серверов в локальной сети
    #39523040
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2Ролг Хупинпропущено...


дать юзеру возможность типа той, которая в том же SSMS - выгрести юзеров, группы, назначить их в конце концов для SQL Server базы, дать датабазе роли и т.д.
А зачем это юзеру надо?

Он назначает юзерам и группам датабазе роли в упрощенном ГУИ
...
Рейтинг: 0 / 0
Получить список серверов в локальной сети
    #39523082
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Ролг Хупин,

Тем более ему не нужны никакие сервера, все данные о группах и пользователях хранятся в Active Directory.
И программа ваша не нужна, так как если там админ умеет создать группы в домене, то освоит и бесплатную SSMS
...
Рейтинг: 0 / 0
Получить список серверов в локальной сети
    #39523631
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2Ролг Хупин,

Тем более ему не нужны никакие сервера, все данные о группах и пользователях хранятся в Active Directory.
И программа ваша не нужна, так как если там админ умеет создать группы в домене, то освоит и бесплатную SSMS

Всё так, но:
Не всегда есть АД, не всегда есть админ, поэтому юзеру бывает полезно иметь упрощенный интерфейс.
...
Рейтинг: 0 / 0
Получить список серверов в локальной сети
    #39524043
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Ролг ХупинCat2Ролг Хупин,

Тем более ему не нужны никакие сервера, все данные о группах и пользователях хранятся в Active Directory.
И программа ваша не нужна, так как если там админ умеет создать группы в домене, то освоит и бесплатную SSMS

Всё так, но:
Не всегда есть АД, не всегда есть админ, поэтому юзеру бывает полезно иметь упрощенный интерфейс.
Не смешите.Если MS SQL, то это Windows. Если Windows, то это AD. Если у заказчика нет AD , то никаких нахрен севреров знать не надо
...
Рейтинг: 0 / 0
Получить список серверов в локальной сети
    #39524172
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2Не смешите.Если MS SQL, то это Windows.
Не всегда так .
...
Рейтинг: 0 / 0
Получить список серверов в локальной сети
    #39524257
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2Ролг Хупинпропущено...


Всё так, но:
Не всегда есть АД, не всегда есть админ, поэтому юзеру бывает полезно иметь упрощенный интерфейс.
Не смешите.

Если MS SQL, то это Windows.
Если Windows, то это AD.

Если у заказчика нет AD , то никаких нахрен севреров знать не надо

1. данунах
2. данунах
...
Рейтинг: 0 / 0
Получить список серверов в локальной сети
    #39524276
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А) MS-SQL 2016 есть под Линукс
Б) AD (LDAP-каталог), а значит он может находится в любой ОС. На той же Samba можно поднять под линуксом виндовый домент с LDAP каталогом (AD). То есть нет ни какой прямой или обратной связи. LDAP может быть под любой ОС, а под виндой не обязательно будет LDAP
В) инфрастуктура домена может быть довольно сложно, включать в себя множестве доменов в лесу, в каждом домене может быть несколько контроллеров домена (PDC, SDC) и т.д.
По этому искать сервера в сети, чтоб найти там PDC\LDAP\MSSQL сервер, это неправильный путь.

Имхо, самый правильный пусть в данном случае, это когда пользователь должен сам определить набор серверов и квалифицировать его, а программа уже должна этот список обрабатывать. Надеятся на автоматику очень ненадеждно в таком случае.
Если брать сетевое окружение (обозреватель компьютеров), то он к примеру не гарантирует наличие компьютера в сети. Компьютер может быть выключен 10 минут назад, но исчезнет он только через ~15 минут и списка на "Мастере Обозревателе" (сервере на котором хранятся эти списки)
...
Рейтинг: 0 / 0
Получить список серверов в локальной сети
    #39524290
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman MejtesА) MS-SQL 2016 есть под Линукс
Б) AD (LDAP-каталог), а значит он может находится в любой ОС. На той же Samba можно поднять под линуксом виндовый домент с LDAP каталогом (AD). То есть нет ни какой прямой или обратной связи. LDAP может быть под любой ОС, а под виндой не обязательно будет LDAP
В) инфрастуктура домена может быть довольно сложно, включать в себя множестве доменов в лесу, в каждом домене может быть несколько контроллеров домена (PDC, SDC) и т.д.
По этому искать сервера в сети, чтоб найти там PDC\LDAP\MSSQL сервер, это неправильный путь.

Имхо, самый правильный пусть в данном случае, это когда пользователь должен сам определить набор серверов и квалифицировать его, а программа уже должна этот список обрабатывать. Надеятся на автоматику очень ненадеждно в таком случае.
Если брать сетевое окружение (обозреватель компьютеров), то он к примеру не гарантирует наличие компьютера в сети. Компьютер может быть выключен 10 минут назад, но исчезнет он только через ~15 минут и списка на "Мастере Обозревателе" (сервере на котором хранятся эти списки)

"SQL 2017 есть под Линукс"
...
Рейтинг: 0 / 0
Получить список серверов в локальной сети
    #39524523
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Ролг Хупин1. данунах
2. данунах


Чему радуетесь-то?
Вы между прочим вопрос задали в ветке по C#. Вы на нем собрались программу для линукса писать?
Флаг Вам в руки, барабан на шею и бубен в зубы. Правда можете написать, "что "уже есть net для Linux". Это резко повысит ваши шансы написать что-то работоспособное.

Roman MejtesА) MS-SQL 2016 есть под Линукс
Б) AD (LDAP-каталог), а значит он может находится в любой ОС.
А) И все линуксоиды массово его начали ставить.
Б) Вы удивитесь, но я в курсе. Только вот изначально ТС сомневался что у него вообще будет сеть с доменом, но собирался использовать группы.
В) PDC в виндовых доменах очень просто находятся. Я даже строчку кода в начале привел. Только вот для обсуждаемой задачи никаких серверов искать не надо.
...
Рейтинг: 0 / 0
Получить список серверов в локальной сети
    #39524737
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2Ролг Хупин1. данунах
2. данунах


Чему радуетесь-то?
Вы между прочим вопрос задали в ветке по C#. Вы на нем собрались программу для линукса писать?
Флаг Вам в руки, барабан на шею и бубен в зубы. Правда можете написать, "что "уже есть net для Linux". Это резко повысит ваши шансы написать что-то работоспособное.

Roman MejtesА) MS-SQL 2016 есть под Линукс
Б) AD (LDAP-каталог), а значит он может находится в любой ОС.
А) И все линуксоиды массово его начали ставить.
Б) Вы удивитесь, но я в курсе. Только вот изначально ТС сомневался что у него вообще будет сеть с доменом, но собирался использовать группы.
В) PDC в виндовых доменах очень просто находятся. Я даже строчку кода в начале привел. Только вот для обсуждаемой задачи никаких серверов искать не надо.

Я не собираюсь писать на c# приложение для линукса, с чего вы взяли? Если сервер стоит на линуксе - это еще не значит, что клиенты будут там же.
По пункту Б - вы немного лукавите, вы не можете быть в курсе того, что SQL Server 2016 есть под линукс.
SQL Server 2017 есть, а 2016 нет.
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Получить список серверов в локальной сети
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]