2011-03-24 127 views
0

我正在处理与业务相关的程序,所以我需要知道系统日期是否正确 - 与远程服务器进行了比较。你如何做到这一点在.NET .NET winforms?如何检查系统日期是否正确? (以防止滥用)vb .NET

P.S:另外,有什么办法可以在系统时钟发生变化时引发一些事件来防止黑客?我不希望用户在登录帐户后更改本地日期。

在此先感谢。

回答

0

您需要使用外部服务器验证时钟,并在某个容差范围内接受该时钟。所有时钟在某种程度上都是错误的。通常服务器上的web服务就够了,但有很多免费的NTP-services。但是请注意,我需要5分钟才能绕过该操作,因此为了提高安全性,您需要使用SSL(HTTPS)(使man-in-the-middle attacks不可能)。然而

注:

  • 您需要正确补偿时区的服务器和用户可以有不同的时区。时区信息以ISO 8601已格式化的DateTime字符串发送,因此非常简单。
  • 什么是阻止用户断开互联网连接?你真的想要需要上网才能启动应用程序?有人用笔记本电脑很快就会发现离线模式可以让应用程序工作。
  • 一些人使用的技术是说,如果未来的一段时间(产品过期后)已被应用发现,那么您需要重新激活它。重新激活需要与互联网服务器通信,互联网服务器可以根据可信时钟验证许可证。

如果您想知道用户何时更改时钟,只需设置一个线程以60秒的Thread.Sleep(60000)循环。然后检查60秒前的当前日期时间。从上次检查开始,它应该始终为60秒 -/+ 1秒。 (+/- 1秒,以补偿像应用延误定时器正在执行略微挂等)

我一起扔一个简单的例子:
编辑:对不起,第一样品是在C#。在VB.Net中重做它。

Imports System.Threading 

Public Class Form1 
    Private TimeMonitorThread As Thread 

    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load 
     TimeMonitorThread = New Thread(TimeMonitorThreadLoop) 
     TimeMonitorThread.Name = "TimeMonitorThread" 
     TimeMonitorThread.IsBackground = True 
     TimeMonitorThread.Start() 

    End Sub 

    Private Sub TimeMonitorThreadLoop() 

     Dim sleepSeconds As Integer = 60 
     Dim tolerance As Integer = 1 

     While (True) 
      Dim before As DateTime = DateTime.Now 
      Thread.Sleep(sleepSeconds * 1000) 
      Dim after As DateTime = DateTime.Now 
      If (Math.Abs(CInt(after.Subtract(before).TotalSeconds) - sleepSeconds) > tolerance) Then 
       ' Time has changed! 
      End If 
     End While 
    End Sub 

End Class 
+0

很好的解释,谢谢。我会这样做。 – EvanBlack 2011-03-29 01:06:13

0

只是在理论上的步骤。

首先,在远程服务器中创建一个asp.net应用程序,该应用程序将提供当前日期时间。为确保增加安全性,请加密当前日期。

然后在您的PC中创建一个可以访问该远程服务器并根据需要获取当前时间的winform应用程序。

然后在你的winform应用程序中检索当前的日期时间。然后,只需比较远程服务器和winform应用程序中显示的当前时间。

您可以根据需要调整您的PC当前日期时间,以便与远程服务器时间同步。在商业应用的情况下,您可以通知用户或禁用应用程序功能,直到用户按照您的意愿执行某项操作为止。例如,打电话给您的服务部门或获取解锁密钥等。

0

在。提交Tedd汉森净VB代码,请务必在私人小组Form1_Load的改变行之一: -

TimeMonitorThread = New Thread(AddressOf TimeMonitorThreadLoop) 

(addressof必须有,否则你将得到一个异常)