使用C#以编程方式检测Windows登录尝试

时间:2016-11-04 12:53:14

标签: c# .net windows winforms

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

我尝试过:

我使用任务计划程序阅读有关Windows服务,Windows任务计划程序和事件审核的信息,但我想以务实的方式进行操作。所以我的问题是如何使用C#以编程方式检测Windows登录尝试?

1 个答案:

答案 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

相关问题