مدت زمان آنلاین بودن کاربر با سی شارپ #C

چگونه مدت زمان آنلاین بودن کاربر در شبکه را بدست بیاوریم ؟

فرض کنید می خواهیم در یک برنامه #C مدت زمان آنلاین دستگاه شبکه را نمایش دهیم . هر زمانی که کاربر به شبکه فعلی (اینترنت) با هر آداپتوری متصل شود سیستم شروع به ظبط زمان ورود تا لحظه خروج می کند .منظور از لحظه ورود همان کانکت شدم به مودم و خروج دیسکانتک شدن از آن است .

تصویر زیر در قسمت Duration زمان آنلاین بودن کاربر را نشان می دهد .

روش اول

پلتفرم بوی اطلاعات زیر را تاحدودی تایید می کند

اطلاعات درج شده در قسمت زیر نیازمند تایید و بررسی بیشتری هستند .

سعی کنید با استفاده از این لینک از طریق سرویس RAS (سرویس دسترسی از راه دور) مدت زمان آنلاین بودن کاربر را بدست بیاورید . سرویس دسترسی از راه دور (RAS) را برای زبانهای دات نت مانند C # ، VB.NET و C ++ قبلا نوشته شده است .

با بررسی عملکرد RasGetConnectionStatistics (طبق مستندات MSDN) متوجه شدیم بدست آوردن زمان آنلاین بودن کاربر یک ساختار (RAS_STATS) را برمی گرداند که در قسمت “dwConnectDuration” می توانید آن را پیدا کنید .

منابع بیشتر :

برای کسب اطلاعات بیشتر از لینک های مرجع زیر کمک بگیرید :

لینک مرجع یک

لینک مرجع دو

روش دوم

می توانید با استفاده از کتابخانه Network List Manager 1.0 اطلاعات موردنیاز خود را بدست بیاورید :

  var manager = new NetworkListManager();
   var connectedNetworks = manager.GetNetworks(NLM_ENUM_NETWORK.NLM_ENUM_NETWORK_CONNECTED).Cast<INetwork>();
   foreach (var network in connectedNetworks)
   {
       if (network.IsConnected)
       {
         network.GetTimeCreatedAndConnected(out uint _, out uint _, out uint 
         pdwLowDateTimeConnected, out uint pdwHighDateTimeConnected);

         DateTime networkConnectedTime = DateTime.FromFileTimeUtc((long) 
       (((ulong)pdwHighDateTimeConnected << 32) | pdwLowDateTimeConnected));

       TimeSpan diff = DateTime.Now.Subtract(networkConnectedTime);

       Console.WriteLine("Name: " + network.GetName() + "  Duration : {0} day(s) {1}:{2}:{3}", diff.Days, diff.Hours, diff.Minutes, diff.Seconds);
            }
}

روش سوم

اول از همه ، شما باید این دستگاه آداپتور شبکه را پیدا کنید. در واقع دستگاهی که در حال تعامل با اینترنت است . سپس با استفاده از تابع GetAllNetworkInterfaces می توانید این کار را انجام دهید.

static void getCurrentNicLifeTime(NetworkInterface adapter)
    {
        IPInterfaceProperties adapterProperties = adapter.GetIPProperties();

        UnicastIPAddressInformationCollection uniCast = adapterProperties.UnicastAddresses;

        if (uniCast.Count > 0)
        {
            foreach (UnicastIPAddressInformation uni in uniCast)
            {
                DateTime when;
                when = DateTime.UtcNow + TimeSpan.FromSeconds(uni.AddressValidLifetime) - TimeSpan.FromSeconds(864000);
                when = when.ToLocalTime();

                Console.WriteLine(DateTime.UtcNow.ToLocalTime() - when);
            }
        }
    }

روش چهارم

۲ قطعه کد زیر اطلاعات بیشتری از شبکه فعلی شما نشان می دهند که می توانیدز از آنها استفاده کنید :

bool networkUp = System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable();
NetworkInterface[] networkCards = System.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces();

 

 

آیا این نوشته برای شما مفید بود ؟

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *