需要Active Directory编程帮助

时间:2010-03-09 01:18:02

标签: c# .net visual-studio-2008 active-directory network-programming

我想在.NET中制作必须在Windows Server 2003,2008上运行的Windows服务。我需要的主要功能是:

网络用户登录后,立即显示:

  1. Active Directory中的用户名
  2. 他连接的地址
  3. 我不想在客户端计算机上安装或运行任何程序/脚本。

    任何有关如何开发此项目的帮助将不胜感激。我看到一些文章使用System.Environment命名空间和其他一些文章解释了这一点,但它们只为本地登录用户提供了亮点。

2 个答案:

答案 0 :(得分:3)

一种解决方法是监视Windows服务器计算机上的安全事件日志。

这假设Windows Server 2003/2008域控制器已设置为记录成功的“审核登录事件”。

     using System.Diagnostics;
     ...
     myLog = new EventLog("Security");
     myLog.EntryWritten += new EntryWrittenEventHandler(OnEntryWritten);
     ...

    /// <summary>
    /// A new event is logged in the security event log.
    /// </summary>
    /// <param name="source"></param>
    /// <param name="e"></param>
    private void OnEntryWritten(object source, EntryWrittenEventArgs e)
    {
        LogNewEntry(e.Entry);
    }

Windows Server 2003

您可以识别事件ID为528和540的登录。

EventLogEntry实例包含属性UserName,其中包含Domain \ UserName。

EventLogEntry实例还包含属性ReplacementStrings。

要查找ip地址,您必须查看ReplacementStrings字符串数组属性[13]。

Windows Server 2008

您可以识别事件ID为4624的登录。

要查找UserName,您必须查看ReplacementStrings字符串数组属性[5]。

要查找域,您必须查看ReplacementStrings字符串数组属性[6]。

要查找ip地址,您必须查看ReplacementStrings字符串数组属性[18]。

答案 1 :(得分:0)

假设您可以使用.NET 3.5,请查看System.DirectoryServices.ActiveDirectory namespace。那里的课程应该为你提供一个良好的起点。