ПоискНавигация |
Поиск людей на компьютерах в Active Directory и подключение к ним по Radmin'у +GUI
#!/usr/bin/env python2.5 # -*- coding: utf-8 -*- import ldap import subprocess import os import wx from wxPython._core import wxTAB_TRAVERSAL class MyPanel(wx.Panel): def __init__(self,parent): wx.Panel.__init__(self,parent,wxTAB_TRAVERSAL) self.parent=parent #Делаем эдиты для имени сервера, имени пользователя и пароля и т.д self.stBase = wx.StaticText(self, -1, pos=(8,126),label="Место поиска") sz=self.stBase.GetSize() self.eBase = wx.TextCtrl(self, 1, style=wx.TE_LEFT,pos=(sz[0]+10,124),size=(190,27)) self.eBase.SetToolTipString("Место поиска\nOU=UNIT,DC=domain,DC=local") self.eBase.SetValue("OU=Компьютеры,DC=local,DC=lan") self.stServerName = wx.StaticText(self, -1,pos=(8,10), label="Сервер" ) self.eServerName = wx.TextCtrl(self, 2, style=wx.TE_LEFT, pos=(sz[0]+10,8), size=(190,27)) self.eServerName.SetToolTipString("Введите адрес сервера:\nhost_name:port") self.eServerName.SetValue("dc.local.lan:389") self.stUserName = wx.StaticText(self, -1 ,pos=(8,39),label="Имя") self.eUserName = wx.TextCtrl(self, 3, style=wx.TE_LEFT, pos=(sz[0]+10,37), size=(190,27)) self.eUserName.SetToolTipString("Введите имя пользователя:\nusername@domain") self.eUserName.SetValue("admin@local.lan") self.stPasswd = wx.StaticText(self, -1, pos=(8,68),label="Пароль") self.ePasswd = wx.TextCtrl(self, 4, style=wx.TE_PASSWORD,pos=(sz[0]+10,65),size=(190,27)) self.ePasswd.SetToolTipString("Введите пароль") self.ePasswd.SetValue("password") self.stFilter = wx.StaticText(self, -1, pos=(8,98),label="Фильтр") self.eFilter = wx.TextCtrl(self, 5, style=wx.TE_LEFT,pos=(sz[0]+10,95),size=(190,27)) self.eFilter.SetToolTipString("Фильр для поиска") self.eFilter.SetFocus() #Делаем кнопки подключение к серверу выход и так далее self.button1 = wx.Button(self,6,label='Подключиться',pos=(100,180),size=(150,27)) self.button1.Bind(wx.EVT_LEFT_UP, self.OnButton1Click) self.button1.Bind(wx.EVT_BUTTON, self.OnButton1Click) self.button2 = wx.Button(self,9,label='Закрыть',pos=(570,270),size=(75,27)) self.button2.Bind(wx.EVT_LEFT_UP, self.OnButton2Click) #Делаем комбобокс для списка пользователей self.cbUsers= wx.ComboBox(self, 7,choices=usrlst,pos=(330,8),size=(300,27), style=wx.CB_READONLY) self.cbUsers.SetToolTip(wx.ToolTip("Выбирите из списка пользователя")) self.cbUsers.Bind(wx.EVT_COMBOBOX, self.OncbUsersCB) #Делаем список компютеров self.lbComps = wx.ListBox(self, 8, pos=(330,37), size=(300,200)) self.lbComps.SetToolTipString("Выбирите из списка компьютер") self.lbComps.Bind(wx.EVT_LISTBOX_DCLICK, self.lbCompsChoise) #Глобпльные переменные self.ldp = -1 #Выходим из программы def OnButton2Click(self,event): self.Destroy() #Событие при котором подключаемся к домен контроллеру и заполняем комбобокс юзерами def OnButton1Click(self,event): server = self.eServerName.GetValue() username= self.eUserName.GetValue() passwd = self.ePasswd.GetValue() self.ldp = connect(server, username, passwd, "*") base=self.eBase.GetValue() sfilter=self.eFilter.GetValue() if len(sfilter) == 0: sfilter="*" else: sfilter="*"+sfilter+"*" usrlst = mysearch(self.ldp, sfilter, 1,base.encode('utf-8')) if len(usrlst) == 0: sfilter = sfilter.replace("*","") wx.MessageBox('По запросу "'+sfilter+'" ничего не найдено') else: self.cbUsers.Clear() usrlst.sort(cmp=None, key=None, reverse=False) self.cbUsers.AppendItems(usrlst) self.cbUsers.SetValue(self.cbUsers.GetString(0)) #Собыите при закрытии списка заполняем листобкс компами def OncbUsersCB(self, event): if self.ldp != -1: sUser=self.cbUsers.GetValue() self.lbComps.Clear() lComps=[] lComps=mysearch(self.ldp, sUser.encode('utf-8'), 2,self.eBase.GetValue().encode('utf-8')) if len(lComps) == 0: lComps.append("Пользователь не залогинен ни на одном компе") self.lbComps.AppendItems(lComps) #Событие при выборе компа def lbCompsChoise(self,event): subprocess.Popen("/usr/bin/wine ~/.wine/drive_c/Program\ Files/Radmin/radmin.exe /connect:"+\ self.lbComps.GetStringSelection(), shell=True) class MyFrame(wx.Frame): def __init__(self, parent, id, title): wx.Frame.__init__(self, parent, id, title) self.Panel=MyPanel(self) self.Bind(wx.EVT_WINDOW_DESTROY, self.OnQuit,self.Panel) def OnQuit(self,event): self.Close() def connect(server, who, cred, keyword): try: l = ldap.initialize("ldap://"+server) l.bind_s(who,cred,ldap.AUTH_SIMPLE) return l except ldap.LDAPError, error_message: wx.MessageBox("Не могу соединиться %s " %error_message) l = -1 return l def mysearch(l,keyword,objsearch, base): scope = ldap.SCOPE_SUBTREE search_result=[] if int(objsearch) == 1: searchfilter = "(&(objectClass=user)(cn=".encode('utf-8')+keyword.encode('utf8')+")(mail=*))".encode('utf-8') else: if int(objsearch) == 2: searchfilter = "(&(objectClass=computer)(description=*on:*"+keyword+"*))" else: wx.MessageBox("Неверно указан объект поиска.") return result_search retrieve_attributes = None result_set = [] timeout = 0 try: result_id = l.search(base, scope, searchfilter, 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: return search_result for i in range(len(result_set)): for entry in result_set[i]: try: search_result.append(entry[1]['cn'][0]) except: pass return search_result except ldap.LDAPError, error_message: wx.MessageBox(error_message) return search_result class MyApp(wx.App): def OnInit(self): frame = MyFrame(None, -1, "Подключатель") frame.SetSize(size=(650,300)) frame.Show(True) self.SetTopWindow(frame) return True def main(): app = MyApp(0) app.MainLoop() if __name__ == "__main__": main()
|
Вход для пользователейНовые записи в блогах
Сейчас на сайтеСейчас на сайте 0 пользователей и 1 гость.
|