2010-06-16 3 views
0

Я пытаюсь использовать python для запроса LDAP-сервера, и он всегда возвращает мне никакого результата. и кто-нибудь поможет мне найти что-то не так с моим кодом на Python? он отлично работает без экскрементов, и он всегда не имеет результата. Я играл с фильтром, как «cn = partofmyname», но просто не повезло. спасибо за помощьLDAP-запрос с использованием Python: всегда никакого результата

import ldap 



try: 
    l = ldap.open("server") 
    l.protocol_version = ldap.VERSION3 
    l.set_option(ldap.OPT_REFERRALS, 0) 
    output =l.simple_bind("cn=username,cn=Users,dc=domian, dc=net",'password$R') 
    print output 
except ldap.LDAPError, e: 
    print e 

baseDN = "DC=domain,DC=net" 
searchScope = ldap.SCOPE_SUBTREE 
## retrieve all attributes - again adjust to your needs - see documentation for more options 
retrieveAttributes = None 

Filter = "(&(objectClass=user)(sAMAccountName=myaccount))" 

try: 
    ldap_result_id = l.search(baseDN, searchScope, Filter, retrieveAttributes) 
    print ldap_result_id 
    result_set = [] 
    while 1: 
     result_type, result_data = l.result(ldap_result_id, 0) 
     if len(result_data) == 0: 
      print 'no reslut' 
      break 
     else: 
      for i in range(len(result_set)): 
       for entry in result_set[i]: 
        try: 
         name = entry[1]['cn'][0] 
         email = entry[1]['mail'][0] 
         phone = entry[1]['telephonenumber'][0] 
         desc = entry[1]['description'][0] 
         count = count + 1 
         print "%d.\nName: %s\nDescription: %s\nE-mail: %s\nPhone: %s\n" %\ 
           (count, name, desc, email, phone) 
        except: 
         pass 
         ## here you don't have to append to a list 
         ## you could do whatever you want with the individual entry 
      #if result_type == ldap.RES_SEARCH_ENTRY: 
      # result_set.append(result_data) 
      # print result_set 
except ldap.LDAPError, e: 
    print e 
l.unbind() 
+0

Я не знаю, - по какой-то причине я предпочел название «ReSlut» перед тем правок http://stackoverflow.com/posts/3057039/revisions Это заставило меня посмотреть , –

+0

Модуль python 'ldap' также имеет возможность включить/увеличить многословие отладочных сообщений, перенаправленных на std-вывод, если я правильно помню. – ChristopheD

ответ

2

Я нашел свою проблему.

simple_bind("cn=username,cn=Users,dc=domian, dc=net",'password$R') 

должен быть

simple_bind("domain/username",'password$R') 
+1

dunno, если это имеет значение, но в первой строке * домен * неверно, должен быть 'dc = domain' (идея состоит в том, что оба синтаксиса работают). –

+0

Это работает только в Active Directory. Предыдущая версия должна работать во всех каталогах LDAP. Если вам нужна совместимость, не используйте эту опцию. – Davisein

0

я настоятельно рекомендую вам изучить сетевой трафик с использованием Wireshark (www.wireshark.org), чтобы увидеть, что происходит на уровне протокола. Кроме того, получите такой инструмент, как Softerra LDAP browser 2.6 (бесплатная версия на http://www.ldapbrowser.com/download.htm), чтобы проверить сервер A/D и организацию каталога.

Если у вас все еще есть проблемы, опубликуйте резюме того, что вы найдете, используя эти инструменты.

Смежные вопросы