以编程方式使用C#检测Windows登录尝试
我想开发一个Windows窗体应用程序来监视我的网络计算机登录,注销和登录尝试的详细信息,并根据检测结果做一些事情。 (例如发送一些通知管理员)以编程方式使用C#检测Windows登录尝试
我曾尝试:
我读到的Windows服务,Windows任务调度和事件审计使用任务计划程序,但我想以务实的态度去做。所以我的问题是如何检测使用C#编程的Windows登录尝试?
要检测登录尝试,您可以依赖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。
感谢您的回复。 –
不客气。您可以简单地测试代码,并让我知道结果。编写一个简单的应用程序并以管理员身份运行就足够了,然后切换帐户并尝试登录到另一个帐户并输入一些错误的密码。然后转到主帐户并在您设置为保存的路径中查看日志。 –
抱歉,延迟回复...我得到了这个代码的警告,我没有得到任何输出文件... –
为什么不直接使用事件查看器? –
@Byakko_Haku谢谢你的回复。 –
**致评论者:**以编程方式检测Windows登录尝试并不是太广泛,可能由于用户表示他们希望向管理员发送通知的部分已关闭该问题。但这只是一个例子,核心问题是检测登录尝试。 –