Ниже будет продемонстрирован примел того, как можно получить информацию на выбор сетевого подключения, wifi, ethernet, всех сетевых интерфейсов системы.
Информация включает в себя, тип устройства, скорость, объем переданной и полученной информации в текущий момент.
Достаточно выбрать сетевое подключения и в реальном времени вы будите видеть, как изменяются данные на получения и отдачу.
Данный пример пригодится системным администраторам, что позволит производить мониторинг активности.
Получение информации о сетевых интерфейсах
Пример кода, который перечисляет все доступные сетевые интерфейсы и выводит основную информацию о каждом:
using System;
using System.Net.NetworkInformation;
using System.Windows.Forms;
namespace InterfaceTrafficWatch
{
/// <summary>
/// Наблюдение за трафиком сетевого интерфейса
/// </summary>
public partial class MainForm : Form
{
/// <summary>
/// Обновление таймера (каждые 1 сек)
/// </summary>
private const double timerUpdate = 1000;
/// <summary>
/// м
/// </summary>
private NetworkInterface[] nicArr;
/// <summary>
///Основной объект таймера
///(мы могли бы использовать что-то более эффективное, такое как
/// как вызовы взаимодействия с HighPerformanceTimers)
/// </summary>
private Timer timer;
/// <summary>
/// Конструктор
/// </summary>
public MainForm()
{
InitializeComponent();
InitializeNetworkInterface();
InitializeTimer();
}
/// <summary>
/// Инициализация всех сетевых интерфейсов на этом компьютере
/// </summary>
private void InitializeNetworkInterface()
{
//Захват всех локальных интерфейсов на этом компьютере
nicArr = NetworkInterface.GetAllNetworkInterfaces();
// Добавление имени каждого интерфейса в поле со списком
for (int i = 0; i < nicArr.Length; i++)
cmbInterface.Items.Add(nicArr[i].Name);
// Изменение начального выбора на первый интерфейс
cmbInterface.SelectedIndex = 0;
}
/// <summary>
/// Инициализация таймера
/// </summary>
private void InitializeTimer()
{
timer = new Timer();
timer.Interval = (int)timerUpdate;
timer.Tick += new EventHandler(timer_Tick);
timer.Start();
}
/// <summary>
///Обновление компонентов графического интерфейса пользователя для сетевых интерфейсов
/// </summary>
private void UpdateNetworkInterface()
{
//Захват объекта NetworkInterface, описывающего текущий интерфейс
NetworkInterface nic = nicArr[cmbInterface.SelectedIndex];
// Захват статистики для этого интерфейса
IPv4InterfaceStatistics interfaceStats = nic.GetIPv4Statistics();
//Вычисление скорости ввода и вывода байтов
//ПРИМЕЧАНИЕ: мы могли бы использовать что - то более быстрое и надежное, чем Windows Forms Tiemr
// например, HighPerformanceTimer
int bytesSentSpeed = (int)(interfaceStats.BytesSent - double.Parse(lblBytesSent.Text)) / 1024;
int bytesReceivedSpeed = (int)(interfaceStats.BytesReceived - double.Parse(lblBytesReceived.Text)) / 1024;
// Обновление labels
lblSpeed.Text = nic.Speed.ToString();
lblInterfaceType.Text = nic.NetworkInterfaceType.ToString();
lblSpeed.Text = nic.Speed.ToString();
lblBytesReceived.Text = interfaceStats.BytesReceived.ToString();
lblBytesSent.Text = interfaceStats.BytesSent.ToString();
lblUpload.Text = bytesSentSpeed.ToString() + " KB/s";
lblDownload.Text = bytesReceivedSpeed.ToString() + " KB/s";
}
/// <summary>
/// Событие Timer для каждого тика (секунды) для обновления пользовательского интерфейса
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void timer_Tick(object sender, EventArgs e)
{
UpdateNetworkInterface();
}
}
}

Что можно получить дополнительно:
- IP-адреса через
ni.GetIPProperties(); - MAC-адрес через
ni.GetPhysicalAddress(); - Тип подключения (Ethernet, Wi-Fi и др.);
- Состояние интерфейса (включён/отключён).
Применение
- Диагностика проблем с сетью;
- Информация для админ-панелей и системных утилит;
- Проверка подключения в корпоративных приложениях;
- Отображение в UI текущего статуса сети.
