اذهب الي المحتوي
أوفيسنا
بحث مخصص من جوجل فى أوفيسنا
Custom Search

ضبط وقت وتاريخ الكومبيوتر تلقائياً بواسطة الانترنت (من برمجتي)


SEMO.Pa3x

الردود الموصى بها

السلام عليكم ورحمة الله وبركاته..

اولاً: جلب الوقت والتاريخ من time.windows.com ثم ضبط وقت وتاريخ الكومبيوتر..

العملية كلها بطرفة عين البرنامج مكتوب 100% بلغة Visual Studio .NET يمكنك تشغيله بالاكسس  بـ shell

السورس كود للفائدة (شرحت فيه كل شيء):

 

Imports System.Net
Imports System.Net.Sockets

Module Main

    'c0ded by: SEMO.Pa3x
    'date: 23-09-2024 - 06:36  PM
    'enjoy  (:

    Sub Main()
        Try
            Dim computerDate As String = GetNetworkTime.ToShortDateString
            Dim computerTime As String = GetNetworkTime.ToShortTimeString
            ' قم بتشغيل العملية لتعيين التاريخ والوقت معاً
            Dim processInfo As New ProcessStartInfo("cmd.exe")
            processInfo.UseShellExecute = True
            processInfo.Verb = "runas" ' طلب صلاحيات المسؤول
            processInfo.Arguments = "/C date " & computerDate & " && time " & computerTime.Replace("ص", "AM").Replace("م", "PM")
            Process.Start(processInfo)
        Catch ex As Exception
            Console.WriteLine(ex.Message)
            Console.ReadLine()
        End Try
    End Sub

    Public Function GetNetworkTime() As DateTime
        ' خادم الوقت الافتراضي
        Const ntpServer As String = "time.windows.com"

        ' حجم رسالة NTP - 16 بايت من بيانات الهضم (RFC 2030)
        Dim ntpData As Byte() = New Byte(47) {}

        ' إعداد القيم LI = 0 (بدون تحذير)، VN = 3 (IPv4 فقط)، Mode = 3 (وضع العميل)
        ntpData(0) = &H1B

        ' الحصول على عناوين IP الخاصة بالخادم
        Dim addresses As IPAddress() = Dns.GetHostEntry(ntpServer).AddressList

        ' منفذ UDP المستخدم من قبل NTP هو 123
        Dim ipEndPoint As New IPEndPoint(addresses(0), 123)

        ' استخدام UDP
        Using socket As New Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp)
            socket.Connect(ipEndPoint)

            ' إيقاف تعليق الكود إذا تم حظر NTP
            socket.ReceiveTimeout = 3000

            ' إرسال الطلب واستقبال الرد
            socket.Send(ntpData)
            socket.Receive(ntpData)
            socket.Close()
        End Using

        ' إزاحة للحصول على حقل "Transmit Timestamp"
        Const serverReplyTime As Byte = 40

        ' الحصول على الجزء الخاص بالثواني
        Dim intPart As ULong = BitConverter.ToUInt32(ntpData, serverReplyTime)

        ' الحصول على الكسر الخاص بالثواني
        Dim fractPart As ULong = BitConverter.ToUInt32(ntpData, serverReplyTime + 4)

        ' تحويل البيانات من big-endian إلى little-endian
        intPart = SwapEndianness(intPart)
        fractPart = SwapEndianness(fractPart)

        ' تحويل البيانات إلى ميلي ثانية
        Dim milliseconds As ULong = (intPart * 1000UL) + ((fractPart * 1000UL) / &H100000000UL)

        ' الوقت بناءً على التوقيت العالمي UTC
        Dim networkDateTime As DateTime = (New DateTime(1900, 1, 1, 0, 0, 0, DateTimeKind.Utc)).AddMilliseconds(CLng(milliseconds))

        ' إعادة الوقت المحلي
        Return networkDateTime.ToLocalTime()
    End Function

    ' دالة لتحويل البيانات من big-endian إلى little-endian
    Private Function SwapEndianness(x As ULong) As UInteger
        Return CUInt(((x And &HFFUL) << 24) +
                     ((x And &HFF00UL) << 8) +
                     ((x And &HFF0000UL) >> 8) +
                     ((x And &HFF000000UL) >> 24))
    End Function

End Module

 

اهداء للمعلم جعفر @jjafferr

لا تنسوني ووالدي من صالح دعائكم.

SetDateTimeInternetSEMO.zip

  • Thanks 2
رابط هذا التعليق
شارك

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



سجل دخولك الان
  • تصفح هذا الموضوع مؤخراً   0 اعضاء متواجدين الان

    • لايوجد اعضاء مسجلون يتصفحون هذه الصفحه
×
×
  • اضف...

Important Information