Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / WinForms, .Net Framework Новый топик    Ответить
 Получить список серверов в локальной сети  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 1594
Есть старое приложение, в нем для выборки списка серверов в сети, компьютеров в домене используется вызов

[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# более неприхотливым?

.
15 сен 17, 16:07    [20799341]     Ответить | Цитировать Сообщить модератору
 Re: Получить список серверов в локальной сети  [new]
Cat2
Member

Откуда: Petroskoi, Karjala
Сообщений: 142404
Ролг Хупин
И еще: чем можно заменить в c# более неприхотливым?

Для админства есть PowerShell и WinRM
15 сен 17, 19:33    [20799854]     Ответить | Цитировать Сообщить модератору
 Re: Получить список серверов в локальной сети  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 1594
Cat2
Ролг Хупин
И еще: чем можно заменить в c# более неприхотливым?

Для админства есть PowerShell и WinRM


мне надо в c# приложении, юзер выбирает серверы, машины в диалоге.
16 сен 17, 14:28    [20800646]     Ответить | Цитировать Сообщить модератору
 Re: Получить список серверов в локальной сети  [new]
Cat2
Member

Откуда: Petroskoi, Karjala
Сообщений: 142404
Ролг Хупин,

А вам надо именно в сети или все же в домене? В домене проще
17 сен 17, 21:16    [20801977]     Ответить | Цитировать Сообщить модератору
 Re: Получить список серверов в локальной сети  [new]
Cat2
Member

Откуда: Petroskoi, Karjala
Сообщений: 142404
Интересуют вообще все сервера или контроллеры домена?
17 сен 17, 21:29    [20801999]     Ответить | Цитировать Сообщить модератору
 Re: Получить список серверов в локальной сети  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 1594
Cat2
Ролг Хупин,

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


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

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

SV_TYPE_DOMAIN_CTRL = 0x00000008,
18 сен 17, 10:14    [20802624]     Ответить | Цитировать Сообщить модератору
 Re: Получить список серверов в локальной сети  [new]
Roman Mejtes
Member

Откуда: г. Пермь
Сообщений: 2408
Через NETBIOS, а точнее через обозрватель компьютеров, который вроде еще поддерживается.
там всё примитивно и выбор серверов невелик, но там они квалифицируются по типу, MSSQL, PDC, WINS и прочее, работает не очень быстро и не очень стабильно :) как я понимаю, когда открывается комбик для поля сервера в обычном соединении в каком нибудь ssms он берёт их именно от туда.
Цель то какая?
18 сен 17, 11:28    [20802847]     Ответить | Цитировать Сообщить модератору
 Re: Получить список серверов в локальной сети  [new]
Cat2
Member

Откуда: Petroskoi, Karjala
Сообщений: 142404
Ролг Хупин,

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

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

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

string[] controllers  = Dns.GetHostAddresses(Environment.UserDomainName).Select(s=>(Dns.GetHostEntry(s)).HostName).ToArray();


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

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());
            } 
18 сен 17, 12:07    [20802990]     Ответить | Цитировать Сообщить модератору
 Re: Получить список серверов в локальной сети  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 1594
Roman Mejtes
Через NETBIOS, а точнее через обозрватель компьютеров, который вроде еще поддерживается.
там всё примитивно и выбор серверов невелик, но там они квалифицируются по типу, MSSQL, PDC, WINS и прочее, работает не очень быстро и не очень стабильно :) как я понимаю, когда открывается комбик для поля сервера в обычном соединении в каком нибудь ssms он берёт их именно от туда.
Цель то какая?


дать юзеру возможность типа той, которая в том же SSMS - выгрести юзеров, группы, назначить их в конце концов для SQL Server базы, дать датабазе роли и т.д.
18 сен 17, 16:37    [20804075]     Ответить | Цитировать Сообщить модератору
 Re: Получить список серверов в локальной сети  [new]
Cat2
Member

Откуда: Petroskoi, Karjala
Сообщений: 142404
Ролг Хупин
Roman Mejtes
Через NETBIOS, а точнее через обозрватель компьютеров, который вроде еще поддерживается.
там всё примитивно и выбор серверов невелик, но там они квалифицируются по типу, MSSQL, PDC, WINS и прочее, работает не очень быстро и не очень стабильно :) как я понимаю, когда открывается комбик для поля сервера в обычном соединении в каком нибудь ssms он берёт их именно от туда.
Цель то какая?


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

А зачем это юзеру надо?
19 сен 17, 07:33    [20804875]     Ответить | Цитировать Сообщить модератору
 Re: Получить список серверов в локальной сети  [new]
Cat2
Member

Откуда: Petroskoi, Karjala
Сообщений: 142404
Ролг Хупин
выгрести юзеров, группы, назначить их

Это все в AD , а не на серверах
19 сен 17, 08:20    [20804892]     Ответить | Цитировать Сообщить модератору
 Re: Получить список серверов в локальной сети  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 1594
Cat2
Ролг Хупин
пропущено...


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

А зачем это юзеру надо?


Он назначает юзерам и группам датабазе роли в упрощенном ГУИ
19 сен 17, 09:13    [20804954]     Ответить | Цитировать Сообщить модератору
 Re: Получить список серверов в локальной сети  [new]
Cat2
Member

Откуда: Petroskoi, Karjala
Сообщений: 142404
Ролг Хупин,

Тем более ему не нужны никакие сервера, все данные о группах и пользователях хранятся в Active Directory.
И программа ваша не нужна, так как если там админ умеет создать группы в домене, то освоит и бесплатную SSMS
19 сен 17, 10:00    [20805061]     Ответить | Цитировать Сообщить модератору
 Re: Получить список серверов в локальной сети  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 1594
Cat2
Ролг Хупин,

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


Всё так, но:
Не всегда есть АД, не всегда есть админ, поэтому юзеру бывает полезно иметь упрощенный интерфейс.
20 сен 17, 10:38    [20808140]     Ответить | Цитировать Сообщить модератору
 Re: Получить список серверов в локальной сети  [new]
Cat2
Member

Откуда: Petroskoi, Karjala
Сообщений: 142404
Ролг Хупин
Cat2
Ролг Хупин,

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


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

Не смешите.Если MS SQL, то это Windows. Если Windows, то это AD. Если у заказчика нет AD , то никаких нахрен севреров знать не надо
20 сен 17, 22:11    [20810438]     Ответить | Цитировать Сообщить модератору
 Re: Получить список серверов в локальной сети  [new]
ЕвгенийВ
Member

Откуда: Москва
Сообщений: 4377
Cat2
Не смешите.Если MS SQL, то это Windows.

Не всегда так.
21 сен 17, 10:27    [20811136]     Ответить | Цитировать Сообщить модератору
 Re: Получить список серверов в локальной сети  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 1594
Cat2
Ролг Хупин
пропущено...


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

Не смешите.

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

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


1. данунах
2. данунах

21 сен 17, 11:44    [20811608]     Ответить | Цитировать Сообщить модератору
 Re: Получить список серверов в локальной сети  [new]
Roman Mejtes
Member

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

Имхо, самый правильный пусть в данном случае, это когда пользователь должен сам определить набор серверов и квалифицировать его, а программа уже должна этот список обрабатывать. Надеятся на автоматику очень ненадеждно в таком случае.
Если брать сетевое окружение (обозреватель компьютеров), то он к примеру не гарантирует наличие компьютера в сети. Компьютер может быть выключен 10 минут назад, но исчезнет он только через ~15 минут и списка на "Мастере Обозревателе" (сервере на котором хранятся эти списки)
21 сен 17, 12:01    [20811693]     Ответить | Цитировать Сообщить модератору
 Re: Получить список серверов в локальной сети  [new]
Ролг Хупин
Member

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

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


"SQL 2017 есть под Линукс"
21 сен 17, 12:20    [20811770]     Ответить | Цитировать Сообщить модератору
 Re: Получить список серверов в локальной сети  [new]
Cat2
Member

Откуда: Petroskoi, Karjala
Сообщений: 142404
Ролг Хупин
1. данунах
2. данунах


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

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

А) И все линуксоиды массово его начали ставить.
Б) Вы удивитесь, но я в курсе. Только вот изначально ТС сомневался что у него вообще будет сеть с доменом, но собирался использовать группы.
В) PDC в виндовых доменах очень просто находятся. Я даже строчку кода в начале привел. Только вот для обсуждаемой задачи никаких серверов искать не надо.
21 сен 17, 20:27    [20813621]     Ответить | Цитировать Сообщить модератору
 Re: Получить список серверов в локальной сети  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 1594
Cat2
Ролг Хупин
1. данунах
2. данунах


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

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

А) И все линуксоиды массово его начали ставить.
Б) Вы удивитесь, но я в курсе. Только вот изначально ТС сомневался что у него вообще будет сеть с доменом, но собирался использовать группы.
В) PDC в виндовых доменах очень просто находятся. Я даже строчку кода в начале привел. Только вот для обсуждаемой задачи никаких серверов искать не надо.


Я не собираюсь писать на c# приложение для линукса, с чего вы взяли? Если сервер стоит на линуксе - это еще не значит, что клиенты будут там же.
По пункту Б - вы немного лукавите, вы не можете быть в курсе того, что SQL Server 2016 есть под линукс.
SQL Server 2017 есть, а 2016 нет.
22 сен 17, 11:31    [20815067]     Ответить | Цитировать Сообщить модератору
Все форумы / WinForms, .Net Framework Ответить