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

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

foreach (NetworkInterface adapter in NetworkInterface.GetAllNetworkInterfaces())

{

// Работаем с объектом adapter

}

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

Console.WriteLine("\nTest Adapters" + line.Substring(0, 14) + "\n\n");

foreach (NetworkInterface adapter in NetworkInterface.GetAllNetworkInterfaces())

{

IPInterfaceProperties ip = adapter.GetIPProperties();

string name = adapter.Description;

Console.WriteLine (name + line.Substring(0, name.Length + 1) +

"\n\n{0,-28}: {1:x}\n{2,-28}: {3:x}\n{4,-28}: {5:x}",

"  DNS suffix", ip.DnsSuffix,

"  DNS enabled", ip.IsDnsEnabled,

"  Dynamically configured", ip.IsDynamicDnsEnabled);

}

Для каждого из протоколов есть класс, содержащий общие сведения о конфигурации адаптера. Например, класс IPv4InterfaceProperties содержит такие свойства:

¨  IsAutomaticPrivateAddressingActive указывает, поддерживается-ли автоматическое присвоение адресов (Automatic Private IP addressing—APIPA). Эта настройка позволяет автоматически получить адрес (в диапазоне от 169.254.0.0 до 169.254.255.255) для тех компьютеров, которые не имеют доступа к службе DHCP (Dynamic Host Configuration Protocol).

¨  Mtu (Maximum Transmission Unit) сетевого интерфейса—это максимальный размер пакета, который может быть передан с его помощью. Его принято измерять в октетах (синоним байтам), для TCP/IP он равен 1500.

¨  Свойство IsForwardingEnabled показывает, может-ли интерфейс изменять маршрут (route) пакетов.

¨  Свойство UsesWins показывает, используется-ли служба WINS, работающая с распределенной базой данных регистрации и опроса динамических NetBIOS-имен, отображаемых в IPv4-адреса.

Рассмотрим, как использовать класс IPv4InterfaceProperties для вывода указанных свойств. Вставьте внутрь цикла прохода по всем адаптерам (в конец тела цикла foreach) следующий фрагмент кода.

if (!adapter.Supports(NetworkInterfaceComponent.IPv4))

break;

IPv4InterfaceProperties ip4 = ip.GetIPv4Properties();

if (ip4 == null)

{

Console.WriteLine("No IPv4 information is available for this interface");

break;

}

Console.WriteLine("{0,-28}: {1}\n{2,-28}: {3}\n{4,-28}: {5}\n" +

"{6,-28}: {7}\n{8,-28}: {9}\n{10,-28}: {11}\n",

"  Index", ip4.Index, "  MTU", ip4.Mtu,

"  APIPA active", ip4.IsAutomaticPrivateAddressingActive,

"  APIPA enabled", ip4.IsAutomaticPrivateAddressingEnabled,

"  Forwarding enabled", ip4.IsForwardingEnabled,

"  Uses WINS", ip4.UsesWins);

Вывод статистики

Следует различать два типа статистической информации. Для каждого из двух протоколов (IPv4 и IPv6) можно получить глобальную статистику IP-соединения, поддерживаемую классом IPGlobalStatistics и детальную статистику локального компьютера, поддерживаемую классами IcmpV4Statistics и IcmpV6Statistics. В первом случае надо использовать методы: GetIPv4GlobalStatistics и GetIPv6GlobalStatistics класса IPGlobalStatistics, во втором—множество свойств двух Icmp*-классов.