如何获取服务器的外部时间(包括毫秒或(1/100秒))
本文关键字:包括毫 100秒 时间 何获取 获取 服务器 外部 | 更新日期: 2023-09-27 18:01:54
我正在尝试获取服务器的外部时间。
首先,我试了:
string URL = "http://google.com";
System.Net.HttpWebRequest rq2 = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(URL);
System.Net.HttpWebResponse res2 = (System.Net.HttpWebResponse)rq2.GetResponse();
DateTime xd = rq2.Date;
但这是缓慢的,并且不包含毫秒。
然后我发现,我实际上可以从目标服务器使用的ntp服务器获取服务器的时间。
InternetTime.SNTPClient sntp = new InternetTime.SNTPClient("time-b.timefreq.bldrdoc.gov");
sntp.Connect(false); // true to update local client clock
DateTime dt = sntp.DestinationTimestamp.AddMilliseconds(sntp.LocalClockOffset);
string timeStampNow = dt.ToString("dd/MM/yyyy HH:mm:ss.fff");
它工作得很好,但是,我不确定我的目标服务器是否使用ntp服务器,如果是的话,我不知道如何找到它。我花了很多时间做研究,所以我决定在这里问一下。
edit2:我没有任何访问该服务器(除了访问它的www页面),我知道,服务器正在使用Microsoft-IIS/7.5 web服务器。
没有办法可靠地获得随机HTTP服务器的时间,比它在响应头中返回的分辨率更高。正如你所发现的,这只能精确到秒。它不是当前时间,而是服务器填充报头的时间。您不知道它是请求进入的时间,还是发送响应的时间,或者可能是某个愚蠢的程序员塞进头中的随机时间,只是为了让您的工作变得困难。您只能说,"这是服务器报告的时间。"
即使您知道所讨论的服务器从哪个NTP服务器获取时间,并且假设您可以访问该服务器,从它获取时间也不会给您服务器时间的准确值。服务器定期通过NTP更新其时钟,但可以是每天、每周、每月或"管理员决定的任何时候"。NTP服务器的时间不能准确反映特定服务器的时间。一般情况下,肯定不会在毫秒范围内。如果服务器在一段时间内没有与NTP服务器同步时钟,甚至可能在几分钟内无法完成。
顺便说一下,如果你想要的只是服务器返回的时间,你可能应该做一个HEAD请求。但是您还必须支持GET请求,因为许多服务器在响应HEAD请求时会返回405错误。