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



        

    В тех случаях, когда возможностей .NET не хватает,  используются  возможности ОС.    Так, для получения списка компьютеров сети используется функция GetServerEnum() из библиотеки netapi32.dll. Объявление функции GetServerEnum() выглядит следующим образом:

 

[DllImport("netapi32.dll", EntryPoint = "NetServerEnum")]

public static extern NERR NetServerEnum(    [MarshalAs(UnmanagedType.LPWStr)]

string ServerName, int Level, out IntPtr BufPtr, int PrefMaxLen, ref int EntriesRead, ref int TotalEntries, SV_101_TYPES ServerType, [MarshalAs(UnmanagedType.LPWStr)] string Domain, int ResumeHandle);

где

ServerName – Имя сервера. Зарезервировано. Данный параметр должен быть установлен, как null.

Level – Тип запроса. Может принимать одно из следующих значений:

· 100 – возвращает информацию об имени и платформе удаленного компьютера. Данная информация будет содержаться в структуре данных SERVER_INFO_100.

· 101 – возвращает имя сервера, тип и дополнительные сведения. Данная информация будет содержаться в структуре данных SERVER_INFO_101.

BufPtr – Указатель на буфер, который будет содержать полученные данные.

PrefMaxLen – должен содержать максимальную длину возвращаемых данных в байтах. Если не ставить ограничение,  то данному параметру нужно присвоить значение «-1».

 EntriesRead – указатель на переменную, в которую запишется количество общих ресурсов, доступных на данный момент.

TotalEntries    – Зарезервировано. Не используется.

ServerType – тип сервера. В качестве данного параметра вводится зарезервированная константа. Например, SV_TYPE_SQLSERVER – SQL-сервер, SV_TYPE_ALL – все компьютеры сети и т.п. (Подробнее смотрите MSDN).

Domain – имя домена. Если первичный домен не определен, данный параметр следует установить в null.

ResumeHandle – Зарезервировано. Должно равняться 0.

 

Функции  Windows API описываются так же, как и абстрактные методы – не нужно писать тело метода, так как оно уже описано во внешнем хранилище.

В квадратных скобках перед объявлением метода с помощью метаданных требуется дать компилятору информацию о том, где искать реализацию данного метода. Это делается в специальном атрибуте DllImport. Так как атрибут DllImport описан в пространстве имен System.Runtime.InteropServices, его необходимо добавить в начало модуля во избежание проблем с компиляцией. Для корректной работы функции GetServerEnum() требуется объявить также ряд дополнительных констант из библиотеки netapi32.dll.

 

    Пример работы с функцией GetServerEnum() приведены в подразделе 3.2.

 

Доступ к удаленному компьютеру с помощью технологии WMI

    Для сбора информации на удалённых компьютерах с помощью технологии WMI в большинстве случаев дополнительной настройки удаленных компьютеров в корпоративных сетях не требуется (при наличии домена и прав администратора). Однако, в целях безопасности, доступ к WMI может быть по умолчанию ограничен на части компьютеров. Если не получается считать информацию с компьютеров по WMI, то требуется провести настройки прав доступа и политики безопасности.

Домашние версии ОС Windows не предназначены для работы в корпоративной сети и не поддерживают удалённое выполнение запросов WMI.

Если компьютер включен в сеть и имеются права администратора, то, как правило, возникают следующие типовые ошибки:

1. Ошибка соединения. Причина возникновения ошибки чаще всего заключается в отсутствии настроек, разрешающих удаленное соединение. Службы, через которые работает WMI, не запущены либо попытки соединения по WMI блокируются межсетевым экраном (firewall). Для устранения ошибки необходимо провести предварительные проверки и настроить межсетевой экран.

2. Ошибка доступа. Данная ошибка возникает при отсутствии прав на запуск DCOM, а также при неправильно введенной учетной записи. Для устранения ошибки требуется настроить DCOM.

3. WMI поврежден. Иногда случается так, что после установки одного из обновлений Windows. WMI перестает работать на сервере или рабочей станции. Если данные не собираются на каком-то компьютере даже локально (при наличии прав администратора), то, скорее всего, WMI поврежден. Необходимо восстановить WMI на компьютере, где он не работает.

 

Примеры программирования

 


Дата добавления: 2018-08-06; просмотров: 257; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!