понедельник, 4 июля 2011 г.

Аудит домена на C#. часть 4

Продолжю тему Утилита проверки активных пользователей домена . Дополнительно решил проверять ещё один параметр. Дата последнего входа - так как если человек уже полгода (даже 2-3 месяца) не входил, то с большой вероятностью учетная запись ему не требуется. А иногда может попасться и такая учётка, что вообще пользователя завели, а он не разу не вошел. Соответственно она весит с паролем по умолчанию, что является грубым нарушение политики безопасности.

А теперь код -


using System;
using System.Windows.Forms;
 
//Необходимо подключить ссылку
using System.DirectoryServices;
 
namespace DomainControl
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
 
            //Берём поиск по всему домену, 
            DirectoryEntry dir = new DirectoryEntry("");
            DirectorySearcher search = new DirectorySearcher(dir);
 
            //Вот сам фильтр
            search.Filter = "(&(objectCategory=person)(objectClass=user)(!userAccountControl:1.2.840.113556.1.4.803:=2))";    
 
            search.SearchScope = SearchScope.Subtree;   
 
            // FindAll находит все, что находиться в объекте (и ниже, так как указан флаг Subtree).
            foreach (SearchResult result in search.FindAll())
            {
                     DateTime lastlogon;
 
                    if (result.GetDirectoryEntry().Properties.Contains("lastlogontimestamp"))
                    {
                        long lastlogontimestamp = (long)result.Properties["lastlogontimestamp"][0];
                        DateTime dtLastLoginTimeStamp =
                        DateTime.FromFileTime(lastlogontimestamp);
                        lastlogon = dtLastLoginTimeStamp;
                    }
                    else
                    {
                        lastlogon = new DateTime(2000, 1, 1, 0, 0, 0);
                    }
 
                textBox1.Text += result.GetDirectoryEntry().Name + " lastlogon - " + lastlogon.ToString() + Environment.NewLine;
            }
        }
    }
}

Комментариев нет:

Отправить комментарий