طراحی نظارت بر ترافیک شبکه با زبان سی شارپ

در دنیای متصل امروز، نظارت دقیق بر ترافیک شبکه از اهمیت ویژه‌ای برخوردار است. این مقاله به بررسی و توسعه کلاس NetworkTrafficMonitor در زبان برنامه‌نویسی سی شا..

انتشار: , زمان مطالعه: 7 دقیقه
طراحی نظارت بر ترافیک شبکه با زبان سی شارپ
دسته بندی: برنامه نویسی تعداد بازدید: 114

طراحی نظارت بر ترافیک شبکه با زبان سی شارپ

در دنیای متصل امروز، نظارت دقیق بر ترافیک شبکه از اهمیت ویژه‌ای برخوردار است. این مقاله به بررسی و توسعه کلاس NetworkTrafficMonitor در زبان برنامه‌نویسی سی شارپ می‌پردازد که به منظور نظارت بر ترافیک شبکه طراحی شده است. این کلاس با استفاده از شاخص‌های عملکرد سیستم عامل، ترافیک ارسالی و دریافتی را بر روی هر رابط شبکه‌ای ردیابی می‌کند و داده‌های به دست آمده را در واحد کیلوبایت بر ثانیه محاسبه می‌کند.

کد کلاس طراحی نظارت بر ترافیک شبکه با زبان سی شارپ

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Abdal.Core
{
    public class NetworkTrafficMonitor
    {
        private List<PerformanceCounter> bytesSentCounters;
        private List<PerformanceCounter> bytesReceivedCounters;

         
        public event Action<(float totalSentRate, float totalReceivedRate)> TrafficUpdated;

        public NetworkTrafficMonitor()
        {
            bytesSentCounters = new List<PerformanceCounter>();
            bytesReceivedCounters = new List<PerformanceCounter>();
            InitializeCounters();
        }

        private void InitializeCounters()
        {
            PerformanceCounterCategory category = new PerformanceCounterCategory("Network Interface");
            string[] instanceNames = category.GetInstanceNames();

            foreach (string name in instanceNames)
            {
                PerformanceCounter bytesSentCounter = new PerformanceCounter("Network Interface", "Bytes Sent/sec", name);
                PerformanceCounter bytesReceivedCounter = new PerformanceCounter("Network Interface", "Bytes Received/sec", name);
                bytesSentCounters.Add(bytesSentCounter);
                bytesReceivedCounters.Add(bytesReceivedCounter);
            }
        }

        public async Task MonitorNetworkTrafficAsync(CancellationToken cancellationToken)
        {
            while (!cancellationToken.IsCancellationRequested)
            {
                float totalSent = 0;
                float totalReceived = 0;

                foreach (PerformanceCounter counter in bytesSentCounters)
                {
                    totalSent += counter.NextValue();
                }

                foreach (PerformanceCounter counter in bytesReceivedCounters)
                {
                    totalReceived += counter.NextValue();
                }

               
                totalSent /= 1024;
                totalReceived /= 1024;

                TrafficUpdated?.Invoke((totalSent, totalReceived));

                try
                {
                    // Wait for a second before the next update
                    await Task.Delay(1000, cancellationToken);
                }
                catch (TaskCanceledException)
                {
                    break;
                }
            }
        }
    }
}

نحوه استفاده از کلاس

  public partial class MainWindow : Window
  {
      private NetworkTrafficMonitor monitor;
      private CancellationTokenSource cancellationTokenSource;
      public MainWindow()
      {
          InitializeComponent();
          monitor = new NetworkTrafficMonitor();
          monitor.TrafficUpdated += UpdateTrafficInfo;

          cancellationTokenSource = new CancellationTokenSource();
          Task.Run(() => monitor.MonitorNetworkTrafficAsync(cancellationTokenSource.Token));
      }

     
 

      private void UpdateTrafficInfo((float totalSentRate, float totalReceivedRate) trafficData)
      {
         
          Dispatcher.Invoke(() =>
          {
              trafficInfo.Text = $"Total Sent: {trafficData.totalSentRate:N2} KB/s, Total Received: {trafficData.totalReceivedRate:N2} KB/s";
          });
      }

      private void MainWindow_OnClosed(object? sender, EventArgs e)
      {
          cancellationTokenSource.Cancel();
          base.OnClosed(e);
      }
 
  }

توجه :  trafficInfo یک لیبل است که در فرم قرار دارد .

مقدمه:

نظارت بر ترافیک شبکه به سازمان‌ها امکان می‌دهد تا به مدیریت بهینه منابع شبکه، تشخیص خطاها و اختلالات احتمالی، و بهبود عملکرد کلی شبکه بپردازند. کلاس NetworkTrafficMonitor با فراهم آوردن امکانات نظارت به‌روز و دقیق، به تحلیل‌گران شبکه اجازه می‌دهد تا به طور فعال وضعیت شبکه را تحت نظر داشته باشند.

توسعه کلاس:

کلاس NetworkTrafficMonitor از دو لیست PerformanceCounter برای ذخیره شمارنده‌های بایت‌های ارسالی و دریافتی استفاده می‌کند. این شمارنده‌ها به‌طور خاص برای هر رابط شبکه‌ای ایجاد می‌شوند و از طریق فراخوانی متد InitializeCounters فعال می‌شوند. این متد، دسته و نمونه‌های مرتبط با شاخص‌های عملکرد شبکه را بازیابی می‌کند و برای هر نمونه شمارنده‌های مربوط به بایت‌های ارسالی و دریافتی را تنظیم می‌کند.

عملکرد آسنکرون:

کلاس NetworkTrafficMonitor همچنین شامل یک متد آسنکرون MonitorNetworkTrafficAsync است که به طور مداوم ترافیک شبکه را از طریق شمارنده‌ها پایش می‌کند. این متد مجموع بایت‌های ارسالی و دریافتی را محاسبه کرده، آن‌ها را به کیلوبایت تبدیل می‌کند و اطلاعات را از طریق یک رویداد به نام TrafficUpdated به مصرف‌کنندگان اطلاع رسانی می‌کند.

نتیجه‌گیری:

کلاس NetworkTrafficMonitor نمونه‌ای بارز از چگونگی به‌کارگیری ابزارهای مدیریت عملکرد سیستم در توسعه برنامه‌های کاربردی نظارتی است. با بهره‌گیری از این کلاس، توسعه‌دهندگان و متخصصان IT قادر خواهند بود تا به طور موثر به نظارت و تجزیه و تحلیل ترافیک شبکه بپردازند، که این امر می‌تواند در بهبود امنیت و کارایی شبکه‌های کامپیوتری نقش مهمی ایفا کند.


دیدگاه های مربوط به این مقاله (برای ارسال دیدگاه در سایت حتما باید عضو باشید و پروفایل کاربری شما تکمیل شده باشد)