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*-классов.
Выводимые результаты сильно зависят от того, в какой системе действует испытуемый компьютер. В системе со сложной конфигурацией на экран будет выведено довольно много данных. Если так, то стоит подумать о частичном выводе данных или разработке Windows-приложения, в котором информация будет отражаться в нескольких списках (элементах типа ListView).
Теперь добавим вывод реальной статистики, полученной с помощью объекта класса IPGlobalStatistics и его метода GetIPv4GlobalStatistics. Информация проходит через адаптер в двух направлениях, некоторые пакеты фрагментированы и нуждаются в процедуре восстановления (Reassembly), поэтому все статистические данные разделены на 4 группы (общие данные, данные о входящих пакетах, выходящих и фрагментированных пакетах).
Следующий код надо вставить в конец цикла прохода по адаптерам и использовать совместно с кодом, прозванивающим сервер, иначе (если нет подключения к Internet) статистика, может оказаться нулевой. Здесь используется ссылка p на объект класса IPGlobalProperties, которая была получена ранее.
IPGlobalStatistics st = p.GetIPv4GlobalStatistics();
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.