Сетевое программирование в .NET. Расшифровка IP-адреса (IP address specification). Обеспечение надежности доставки пакетов, страница 11

foreach (string name in key.GetValueNames())

{

object o = key.GetValue(name);

if (o.GetType() == typeof(string))

{

string val = o.ToString();

if (val != "")

Console.WriteLine("{0,-30}:\t {1}", name, val);

}

}

key.Close();

}

}

Registry.LocalMachine.Close();

Console.WriteLine("\n\n");

}

В моей системе эта программа производит такой вывод:

DhcpServer                    :  255.255.255.255

IPAutoconfigurationAddress    :  169.254.13.32

IPAutoconfigurationMask       :  255.255.0.0

DhcpIPAddress                 :  169.254.13.32

DhcpSubnetMask                :  255.255.0.0

Если вы используете несколько отдельных сетевых карт, то можно опробовать следующий фрагмент кода.

public static void Main()

{

Console.WriteLine("\tNetwork Info\n");

string cards = "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\NetworkCards";

RegistryKey cardKey = Registry.LocalMachine.OpenSubKey (cards);

if (cardKey == null)

{

Console.WriteLine("Bad registry key");  return;

}

foreach (string name in cardKey.GetSubKeyNames())

{

RegistryKey serviceKey = Registry.LocalMachine.OpenSubKey (cards + "\\" + name);

if (serviceKey != null)

{

Console.WriteLine("Network card: {0}", serviceKey.GetValue("Description"));

string serviceName = "SYSTEM\\CurrentControlSet\\Services\\" +

serviceKey.GetValue("ServiceName").ToString() + "\\Parameters\\Tcpip";

RegistryKey key = Registry.LocalMachine.OpenSubKey (serviceName);

if (key == null)

Console.WriteLine("No IP configuration set");

else

{

foreach (string addr in (string[])key.GetValue("IPAddress"))

Console.WriteLine("IP Address  : {0}", addr);

foreach (string mask in (string[])key.GetValue("SubnetMask"))

Console.WriteLine("Subnet Mask : {0}", mask);

foreach (string gate in (string[])key.GetValue("DefaultGateway"))

Console.WriteLine("Gateway     : {0}", gate);

key.Close();

}

}

serviceKey.Close();

}

Registry.LocalMachine.Close();

Console.WriteLine("\n\n");

}

Достаем информацию с помощью WMI

Сетевую информацию также можно получить из поддерживаемой операционной системой Windows специальной инфраструктуры, или проще, базы данных WMI (Windows Management Instrumentation). Она реализует одну из инициатив Microsoft (попытку разработать и ввести общий стандарт) под именем WBEM (Web-Based Enterprise Management). Эта инициатива направлена на унификацию методов получения информации о программах и аппаратуре, которые не должны зависеть от ее типа и производителя.

Инициатива WBEM, в свою очередь, основана на схеме, называемой Common Information Model (CIM), которая представляет собой промышленный стандарт, разработанный организацией DMTF (Distributed Management Task Force). В разработке WBEM, впервые предложенной в 1996, участвовали такие компании, как: Cisco Systems, Intel Compaq Computer и BMC Software. Спецификация CIM описывает некий язык моделирования, способы обозначения и преобразования информации, используемые при сборе и передаче данных, полученных из источников различной природы. Интересующая нас информация содержится в таблице NetworkAdapterConfiguration базы данных WMI. Запрос к этой таблице возвращает коллекцию данных об одном из сетевых интерфейсов. Следующая таблица перечисляет поля таблицы NetworkAdapterConfiguration.

Field

Description

DefaultIPGateway

Массив IP-адресов маршрутизаторов, присвоенных данному устройству

Description

Имя, или описание устройства

DHCPEnabled

Флаг динамического способа присвоения IP-адреса

DHCPServer

Имя DHCP-сервера, который присвоил IP-адрес

DNSHostName

Доменное имя (DNS) хост-компьютера, который распознает имена

IPAddress

Массив IP-адресов, присвоенных данному устройству

IPEnabled

Использует-ли устройство сетевой IP-адрес

IPSubnet

Массив IP subnet адресов, используемых данным устройством

MACAddress

Ethernet MAC-адрес, присвоенный данному устройству