Современные информационные технологии/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.