ПоискНавигация |
Поиск людей на компьютерах в AD и подключение к ним по Radmin'у из LinuxКак-то недавно случилось так, что я на работе пересел с Windows машины на Linux машину. И все в линуксе вроде как хорошо, но непривычно, нет некоторых инструментов. В windows у меня была самописная программа которая в связке с проргаммой удаленного администрирования помогала мне управлять компьютерами пользователей когда они на что-то жаловались. Но пересев на Linux я с сожалением обнаружил, что моя программулинка не работает под wine'ом. Возможно поковыряв wine я бы чего-то и добился, но было жутко лень. Тогда я начал искать что-то, что мне подходило бы. Критерии были такие: Гуглил, гуглин да ничего не нагуглил. Тогда решил что нужно писать что-то свое. Снова начал гуглить по теме, на чем писать и вообще чего оно как. Получилось, что будет связка python + модуль ldap который позволял бы подключать к DC. Ниже приведу код всего скрипта, он достаточно простой и понятный. Я понимаю, что код далеко неидеален, все писалось можно сказать на коленке дабы проверить как оно работает, а когда оказалось, что работает как нужно, то и трогать я его не стал :). Будут вопросы спрашивайте. Ах да, еще нужно пояснить, что поиск идет по полю Description - Описание компьютера. Над заполнением этого поля у меня работает скрипт от товарища shs при логоне, а для того чтобы он работал я пользователям делегировал право изменять описание компьютера. Ну вот теперь вроде все. #!/usr/bin/python2.5 # -*- coding: utf-8 -*- import ldap import subprocess def main(): server = "server.local.lan" who = "admin@local.lan" cred = "password" keyword = "" try: print "\x1b[02;34mПоиск по AD на сервере "+server print "1. Пользователи." print "2. Компьютеры." objsearch = raw_input("Что ищем?: ") keyword = raw_input("Введите имя или его часть: ") l = ldap.initialize("ldap://server.local.lan:389") l.bind_s(who,cred,ldap.AUTH_SIMPLE) print "Successfully bound to server.\n" print "Searching..\n" reslist=mysearch(l,keyword,objsearch) count=1 for i in range(len(reslist)): print str(count)+". "+reslist[i]+"." count +=1 if objsearch == "1": itmp = raw_input("Вывести компьютеры за которыми сидит пользователь под номером: ") keyword = reslist[int(itmp)-1] objsearch = 2 reslist=mysearch(l,keyword,objsearch) count = 1 for i in range (len(reslist)): print str(count)+". "+reslist[i]+"." count +=1 itmp = int(raw_input("Подключиться к помпьютеру под номером: ")) itmp -=1 print "Connecting ..."+reslist[itmp] subprocess.os.system("/usr/bin/wine ~/.wine/drive_c/Program\ Files/Radmin/radmin.exe /connect:"+reslist[itmp]) except ldap.LDAPError, error_message: print "Could'n Connect. %s " %error_message def mysearch(l,keyword,objsearch): base = "OU=Компьютеры,DC=local,DC=lan" scope = ldap.SCOPE_SUBTREE search_result=[] if int(objsearch) == 1: filter = "(&(objectClass=user)(cn=*"+keyword+"*)(mail=*))" else: if int(objsearch) == 2: filter = "(&(objectClass=computer)(description=*on:*"+keyword+"*))" else: print "Неверно указан объект поиска." return retrieve_attributes = None count = 0 result_set = [] timeout = 0 try: result_id = l.search(base, scope, filter, retrieve_attributes) while l: result_type, result_data = l.result(result_id, timeout) if (result_data == []): break else: if result_type == ldap.RES_SEARCH_ENTRY: result_set.append(result_data) if len(result_set) == 0: print "No results." return for i in range(len(result_set)): for entry in result_set[i]: try: name = entry[1]['cn'][0] search_result.append(name) except: pass return search_result except ldap.LDAPError, error_message: print error_message if __name__=='__main__': main()
|
Вход для пользователейНовые записи в блогах
Сейчас на сайтеСейчас на сайте 0 пользователей и 1 гость.
|