Advertisement
alkopit

Проверка срока паролей в AD

May 8th, 2018
257
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.96 KB | None | 0 0
  1. from ldap3 import Server, Connection, SIMPLE, SYNC, ASYNC, SUBTREE, ALL, NTLM
  2. import re
  3. import datetime
  4.  
  5. AD_SERVER = 'srv-dc1.domain.local' # DNS имя сервера Active Directory
  6. AD_USER = 'domain\\adsync' # Пользователь AD, два \\ обязательно
  7. AD_PASSWORD = 'Pusswurd' # Пароль
  8. #AD_SEARCH_TREE = 'DC=domain,DC=local' # Начальное дерево поиска
  9. AD_SEARCH_TREE = 'OU=Users,DC=domain,DC=local' # Начальное дерево поиска
  10.  
  11. server = Server(AD_SERVER) # Строка сервера
  12. conn = Connection(server, user=AD_USER, password=AD_PASSWORD, authentication=NTLM) # Строка соединения
  13.  
  14. if not conn.bind():
  15.     print('ERROR IN BIND', conn.result) # Статус соединения ошибка
  16. else:
  17.     print('Соединение с DC... - OK') # Статус соединения ОК
  18.    
  19. print('') # разрыв строк
  20. print('') # разрыв строк
  21.  
  22. uAC_66048 = 66048 # Атрибут userAccountControl - Учетка Включена, срок действия пароля не ограничен
  23. uAC_66050 = 66050 # Атрибут userAccountControl - Учетка Отключена, срок действия пароля не ограничен
  24. uAC_512 = 512 # Атрибут userAccountControl - Учетная запись по умолчанию. Представляет собой типичного пользователя
  25. uAC_514 = 514 # Атрибут userAccountControl - Учетка Отключена
  26.  
  27. #ADUser = input('Введите имя пользователя: ') # вводим нужного пользователя
  28. #conn.search(AD_SEARCH_TREE, "(&(objectCategory=Person)(sAMAccountName=" + ADUser + "))", SUBTREE, attributes =['cn','sAMAccountName','displayName','pwdLastSet','userAccountControl']) # ищем пользака в AD_SEARCH_TREE, читаем атрибуты
  29.  
  30. conn.search(AD_SEARCH_TREE,'(&(objectCategory=Person)(sAMAccountName=*))', SUBTREE, attributes =['cn','sAMAccountName','displayName','pwdLastSet','userAccountControl']) # Ищем всех пользователей в AD_SEARCH_TREE, читаем атрибуты
  31.  
  32. for entry in conn.entries:
  33.     if entry.userAccountControl == uAC_66048:
  34.         print('Пользователь:',entry.cn,'| Cрок действия пароля не ограничен')
  35.         print('') # разрыв строк
  36.     elif entry.userAccountControl == uAC_66050:
  37.         print('Пользователь:',entry.cn,'| Учетная запись отключена, срок действия пароля неограничен')
  38.         print('') # разрыв строк
  39.     elif entry.userAccountControl == uAC_514:
  40.         print('Пользователь:',entry.cn,'| Учетная запись отключена')
  41.         print('') # разрыв строк
  42.     else:
  43.    
  44.         pwdLastSet = re.findall(r'\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}',str(entry.pwdLastSet)) # вытаскиваем дату установки пароля
  45.                         #  год   мес   день  час   мин   сек
  46.  
  47.         print('Пользователь:',entry.cn)
  48.         print('Пароль был установлен:',str(pwdLastSet)[2:21]) # отладочное
  49.  
  50.         date_1 = datetime.datetime.strptime(str(pwdLastSet)[2:21], "%Y-%m-%d %H:%M:%S") # получаем "дату" из pwdLastSet
  51.         end_date = date_1 + datetime.timedelta(days=42) # вычисляем дату окончания действия пароля
  52.         print('Действие пароля закончится:',end_date) # выводим на экран
  53.         print('') # разрыв строк
  54.        
  55. i = 0 # подсчитать их количество
  56. for entry in conn.entries:
  57.     i = i + 1
  58. print('Всего пользователей:', int(i))
  59.  
  60. ''' ВЫЧИСЛЕНИЕ РАЗНИЦЫ ДАТ МЕЖДУ ДАТАМИ ИЗМЕНЕНИЯ ПАРОЛЕЙ
  61. now_time = datetime.datetime.now()
  62. print(now_time)
  63. '''
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement