我想开发一个Windows窗体应用程序来监控我的网络计算机登录,注销和登录尝试的详细信息,并根据检测做一些事情。 (例如,发送一些管理员通知)
我尝试过:
我使用任务计划程序阅读有关Windows服务,Windows任务计划程序和事件审核的信息,但我想以务实的方式进行操作。所以我的问题是如何使用C#以编程方式检测Windows登录尝试?
答案 0 :(得分: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任务计划程序并说明在发生特定事件时运行的任务,并指定合适的事件源和Id。另外,要查看完整步骤的示例,请参阅Getting event log contents by email on an event log trigger。