2016-11-04 70 views
2

我想开发一个Windows窗体应用程序来监视我的网络计算机登录,注销和登录尝试的详细信息,并根据检测结果做一些事情。 (例如发送一些通知管理员)以编程方式使用C#检测Windows登录尝试

我曾尝试:

我读到的Windows服务,Windows任务调度和事件审计使用任务计划程序,但我想以务实的态度去做。所以我的问题是如何检测使用C#编程的Windows登录尝试?

+0

为什么不直接使用事件查看器? –

+0

@Byakko_Haku谢谢你的回复。 –

+1

**致评论者:**以编程方式检测Windows登录尝试并不是太广泛,可能由于用户表示他们希望向管理员发送通知的部分已关闭该问题。但这只是一个例子,核心问题是检测登录尝试。 –

回答

5

要检测登录尝试,您可以依赖Windows安全事件。 Here您可以看到安全事件列表及其含义。 Common events你可能感兴趣的是:

4624: An account was successfully logged on. 
4625: An account failed to log on. 
4648: A logon was attempted using explicit credentials. 
4675: SIDs were filtered. 

使用的应用程序/服务

您可以检测通过登录代码中使用EventLog类和处理其EntryWritten事件试图自己检测活动。下面的代码示例只是将事件记录在文件中,以显示您可以通知事件并使用它。您可以通过电子邮件发送通知或运行应用程序或执行其他操作,而不用写入文件。

要测试代码,您应该以管理员身份运行。同样在真实环境中,您应该将其设置为服务或将其配置为在用户登录之前运行。

private void Form1_Load(object sender, EventArgs e) 
{ 
    EventLog logListener = new EventLog("Security"); 
    logListener.EntryWritten += logListener_EntryWritten; 
    logListener.EnableRaisingEvents = true; 
} 
void logListener_EntryWritten(object sender, EntryWrittenEventArgs e) 
{ 
    //4624: An account was successfully logged on. 
    //4625: An account failed to log on. 
    //4648: A logon was attempted using explicit credentials. 
    //4675: SIDs were filtered. 
    var events = new int[] { 4624, 4625, 4648, 4675 }; 
    if (events.Contains(e.Entry.EventID)) 
     System.IO.File.AppendAllLines(@"d:\log.txt", new string[] { 
      string.Format("{0}:{1}", e.Entry.EventID, e.Entry.Message) 
     }); 
} 

注:也如你可以使用Windows计划任务做一些事情的时候发生事件的提问时说。

例如,运行一个应用程序(发送电子邮件或其他东西),您可以要求Windows在检测到不成功的登录尝试时为您执行某些操作。为此,请使用Windows任务计划程序,并说明发生特定事件时运行的任务,并指定适当的事件源和标识。另外要查看完整步骤的示例,请参阅Getting event log contents by email on an event log trigger

+0

感谢您的回复。 –

+0

不客气。您可以简单地测试代码,并让我知道结果。编写一个简单的应用程序并以管理员身份运行就足够了,然后切换帐户并尝试登录到另一个帐户并输入一些错误的密码。然后转到主帐户并在您设置为保存的路径中查看日志。 –

+0

抱歉,延迟回复...我得到了这个代码的警告,我没有得到任何输出文件... –