Сетевое программирование в .NET, страница 9

   IP Routing Enabled. . . . . . . . : No

   WINS Proxy Enabled. . . . . . . . : No

Ethernet adapter Local Area Connection:

   Connection-specific DNS Suffix  . :

   Description . . . . . . . . . . . : NVIDIA nForce Networking Controller

   Physical Address. . . . . . . . . : 00-11-D8-28-2C-78

   DHCP Enabled. . . . . . . . . . . : Yes

   Autoconfiguration Enabled . . . . : Yes

   Autoconfiguration IP Address. . . : 169.254.13.32

   Subnet Mask . . . . . . . . . . . : 255.255.0.0

   Default Gateway . . . . . . . . . :

Здесь вы видите, что испытуемый компьютер:

¨  Не является доменом подсети,

¨  IP Route provider не запущен. Он позволяет узнать, как пакеты проходят по сети от данного узла к другому,

¨  Windows Internet Naming Service не запущен (позволяет динамически получить NetBIOS-имя для получения и регистрации IP-адреса),

¨  6-ти байтовый MAC-адрес сетевой карты равен: 00-11-D8-28-2C-78. Вы помните, что 3 байта идентифицируют производителя (00-11-D8), а остальные 3 байта—серийный номер.

¨  Dynamic Host Configuration Protocol (DHCP) запущен. Он позволяет динамически конфигурировать клиентские сетевые приложения такими параметрами, как IP-адрес, subnet mask, default gateway и другими.

¨  Autoconfiguration включена. Это позволяет автоматически получить IP-адрес даже если выключена служба DHCP. Вышеупомянутая организация Internet Assigned Numbers Authority (IANA) зарезервировала диапазон адресов от 169.254.0.0 до 169.254.255.255 для APIPA (Automatic Private IP Addressing). Адрес, полученный этой службой, гарантированно не будет конфликтовать с другими.

Достаем информацию из реестра

Реестр Windows часто называют сундуком с дргоценностями, так как от его содержимого слишком много зависит. Неосторожное обращение с этим сундуком чрезвычайно опасно. Рассмотрим, как добыть из него интересующую нас сетевую информацию. Вы знаете, что реестр—это древовидная структура данных, в которой различают пять главных ветвей:

¨  HKEY_CLASSES_ROOT,

¨  HKEY_CURRENT_USER,

¨  HKEY_LOCAL_MACHINE,

¨  HKEY_USERS,

¨  HKEY_CURRENT_CONFIG.

Главные ветви реестра часто сокращают, например. вместо HKEY_LOCAL_MACHINE пишут HKLM. Далее мы будем пользоваться этой аббревиатурой. Ветви состоят из поддеревьев (ветвей и листьев), каждый лист называют ключом. С ключом ассоциирована таблица значений (вы видите ее справа). В этой таблице 3 столбца, имеющие имена: Name, Type, Data, и произвольное количество строк. Последний столбец содержит фактические значения, ассоциированные с ключом. Эти значения и есть драгоценности, от которых зависит благополучие системы.

В таблице всегда есть строка с именем Default. Ее любят использовать программы на VB6 для доступа к COM-объектам. Клиентские программы на C++ обычно пользуются именованными данными. Default-значения в среде разработки VB6 срабатывают по двойному щелчку, реализуя сценарий: "Я не знаю что это такое, но, все равно, работай" и это похоже на чудо, так как объект сам показывает (или рассказывает), что он имеет и/или умеет.

Для того, чтобы найти в сундуке интересующие нас данные, придется основательно порыться. Начните с адреса:

HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkCards

Здесь вы видите свои сетевые карты (их может быть несколько). Среди значений одного из ключей (соответствующего выбранной вами карте) найдите значение с именем ServiceName. Оно отправляет нас к сервису, который работает с картой. Его надо искать в другой ветви реестра, которая соответствует имени сервиса. Например:

HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\имя сервиса

Если карта встроена в материнскую плату (мой случай), то алгоритм поиска другой. Сначала найдите ключ:

HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Adapters\

Найденный ключ может иметь несколько ветвей, некоторые из них представляют собой 128-битовые, уникальные идентификаторы сетевых адаптеров. Далее надо искать номера этих адаптеров в ветви реестра: