В настоящее время я не получаю и не синхронизирую дату и время с IP-адреса сервера в c # (внутренний код), я получаю время и дату с NTP-сервера, но я хочу, чтобы время и дата сервера формировались из общедоступного IP-адреса.
Вот мой код для получения времени сервера NTP, но Как преобразовать этот код для получения IP-адреса сервера времени и даты.
private static void Main(string[] args)
{
foreach (string server in ListOfNTPServer())
{
DateTime dateTime = GetNetworkTime(server);
Console.WriteLine(dateTime + "----" + server);
}
Console.ReadLine();
}
public static string[] ListOfNTPServer()
{
string[] serverList = {
"time-a-g.nist.gov",
"time-b-g.nist.gov",
"time-c-g.nist.gov",
"time-d-g.nist.gov",
"time-d-g.nist.gov",
"time-a-wwv.nist.gov",
"time-b-wwv.nist.gov",
"time-c-wwv.nist.gov",
"time-d-wwv.nist.gov",
"time-d-wwv.nist.gov",
"time-a-b.nist.gov",
"time-b-b.nist.gov",
"time-c-b.nist.gov",
"time-d-b.nist.gov",
"time-d-b.nist.gov",
"time.nist.gov",
"utcnist.colorado.edu",
"utcnist2.colorado.edu",
"ntp-b.nist.gov",
"ntp-wwv.nist.gov",
"ntp-c.colorado.edu",
"ntp-d.nist.gov",
"ut1-time.colorado.edu"
};
return serverList;
}
public static DateTime GetNetworkTime(string ntpServer)
{
try
{
// const string ntpServer = "time-a-wwv.nist.gov";
byte[] ntpData = new byte[48];
ntpData[0] = 0x1B; //LeapIndicator = 0 (no warning), VersionNum = 3 (IPv4 only), Mode = 3 (Client Mode)
IPAddress[] addresses = Dns.GetHostEntry(ntpServer).AddressList;
IPEndPoint ipEndPoint = new IPEndPoint(addresses[0], 123);
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
socket.Connect(ipEndPoint);
socket.Send(ntpData);
socket.Receive(ntpData);
socket.Close();
ulong intPart = (ulong)ntpData[40] << 24 | (ulong)ntpData[41] << 16 | (ulong)ntpData[42] << 8 | ntpData[43];
ulong fractPart = (ulong)ntpData[44] << 24 | (ulong)ntpData[45] << 16 | (ulong)ntpData[46] << 8 | ntpData[47];
ulong milliseconds = (intPart * 1000) + ((fractPart * 1000) / 0x100000000L);
DateTime networkDateTime = (new DateTime(1900, 1, 1)).AddMilliseconds((long)milliseconds);
return networkDateTime;
}
catch (Exception)
{
return DateTime.Now;
}
}
Заранее спасибо.