Ниже будет продемонстрирован примел того, как можно получить информацию на выбор сетевого подключения, wifi, ethernet, всех сетевых интерфейсов системы.
Информация включает в себя, тип устройства, скорость, объем переданной и полученной информации в текущий момент.
Достаточно выбрать сетевое подключения и в реальном времени вы будите видеть, как изменяются данные на получения и отдачу.
Данный пример пригодится системным администраторам, что позволит производить мониторинг активности.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 |
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(); } } } |