Современные информационные технологии/3. Программное обеспечение

Буйлук И.А.

Белорусский Национальный Технический Университет

Способы получения информации о компьютерах в локальной сети  с использованием .NET Framework

 

При программировании сетевых приложений часто возникают вопросы получения полного списка доступных удаленных компьютеров с информацией об их программных и аппаратных компонентах. Данную задачу видится целесообразным разбить на этап получения списка удаленных компьютеров и этап получения информации об конкретной рабочей станции. Каждый из этих этапов может быть решен несколькими способами, которые рассмотрены ниже.

Наиболее простым способом получить список удаленных компьютеров, доступных в локальной вычислительной сети, является использование сканирования по заданному диапазону IP-адресов. IP-адреса представляют собой основной тип адресов, на основании которых сетевой уровень протокола IP передаёт пакеты между сетями [1]. Для проверки достижимости узла в сети в .NET Framework существует специальный инструмент – класс Ping. Класс Ping используется приложениями, чтобы определить, доступен ли удаленный компьютер и предоставляет функциональность, аналогичную программе командной строки Ping.exe. Топология сети может влиять на возможность связи объекта Ping с удаленным узлом [2] и успешный результат означает только то, что удаленный узел доступен по сети.

Другой способ получения списка компьютеров заключается в использовании сетевых API (от англ. Application Program Interface – «программный интерфейс приложения»). Операционные системы семейства Windows поддерживают сетевые API, которые позволяют управлять пользовательскими учетными записями и ресурсами сети. Эта функциональность реализована в библиотеке NetApi32.dll, которая  предоставляет полезные функции, с помощью которых можно получить список DNS-имен удаленных компьютеров в сети и более подробную информацию об удаленном компьютере. Для доступа к ним через .NET Framework можно воспользоваться механизмом P/Invoke, который позволяет обратиться из управляемого кода к специфичным функциям операционной системы,  не требуя от программиста выполнять необходимую в этом случае операцию преобразования типов переменных и скрывая другие тонкости взаимодействия различных компонентов между собой. Прототип  функции, экспортируемой из NetApi32 для использования средой .NET Framework,  указан на рисунке ниже:

Другой способ получения рабочих станций есть в сетях, где используется Active Directory. Active Directory является версией службы каталога, разработанной в компании Microsoft, и обеспечивает мощный сервис для управления и уникальной идентификации пользователей, групп и компьютеров, а также предлагает безопасный доступ к сетевым ресурсам. Ее архитектура разработана по спецификации облегченного протокола службы каталогов (LDAP) и семейства протоколов TCP/IP  [3].

В .NET Framework классы, отвечающие за работу с Active Directory, расположены в пространстве имен System.DirectoryServices . Пример получения с помощью .NET-классов списка компьютеров, которые сохраняются в переменной compList типа List<string> представлен на рисунке ниже:

Для получения информации об определенном удаленном компьютере можно воспользоваться функцией NetServerGetInfo, прототип которой описан в документации разработчика [2]. В качестве одного из параметров передается структура pSERVER_INFO_XXX, где XXX определяет тип структуры. После вызова функции поля структуры будут заполнены соответствующими значениями.

         Другой способ получения данной информацию заключается в использовании технологии Windows Management Instrumentation (WMI), которая представляет собой универсальное средство управления компьютерной системой. Существуют как плюсы, так и минусы в использовании данной технологии, которые перечислены в нижеследующей таблице:

Плюсы

Минусы

Не требуется настройка удаленных компьютеров в большинстве случаев (при наличии домена и прав администратора)

Требуются права администратора на удаленных компьютерах

Не нужно устанавливать дополнительные компоненты на удаленные компьютеры

Может потребоваться настройка политик безопасности

Компьютеры опрашиваются только по требованию администратора

Трудно опросить редко работающие компьютеры

Пользователи без прав администратора не могу препятствовать сбору информации

 

Опрос незаметен для пользователей сети

 

Свежая информация может быть получена в любой момент по запросу

 

 

Классы, позволяющие использовать технологию WMI, в .NET Framework расположены в пространстве имен System.Management. Пример того, как с помощью .NET Framework можно получить информацию об имени и тактовой частоте процессора на удаленном компьютере с именем compName, представлен на рисунке ниже:  

Таким образом, стратегия получения информации в локальной сети во многом зависит от программного обеспечения (например, наличие/отсутствие службы каталога, тип операционной системы) и правами, которыми обладает пользователь, запускающий сетевое приложение.

Литература:

1.     В. Г. Олифер, Н.А. Олефер «Компьютерные сети. Принципы, технологии, протоколы: Учебник для вузов». 3-е изд-е. – СПб.: Питер, 2006.

2.     Microsoft Developer Network - http://msdn.com/

3.     С. Реймер, М. Малкер Active Directory для Windows Server 2003. Справочник администратора. — М.: «СП ЭКОМ», 2004.