2016-06-20 10 views
0

Der erste Schritt meines Programms erfordert, dass ich das aktive Verzeichnis des Unternehmens durchsuchen und eine Liste der Benutzer nach Abteilung suchen. Hier ist mein Code so weit:Python ldap3 Suche erstellt einen leeren Eintrag

from ldap3 import Server, Connection, SUBTREE, ALL 
server = Server('my.company.local', get_info=ALL) 
conn = Connection(server, auto_bind=True) 
conn.search('dc=my, dc=company, dc=local', '(givenName=Charles)') 
print(conn.entries) 

Doch egal, was ich im Suchfilter Teil conn.search setzen, werden keine Daten gefunden in meinem Log-Einträgen. Das Eintragsprotokoll ist eine leere Liste. Wenn ich Active Directory-Benutzer und -Computer aufrufe, kann ich jede Abteilung durchsuchen und nach Namen suchen und ihren Attributeditor durchsuchen (und ja, dort ist ein GivenName = Charles drin). Bitte zeigen Sie mir in die richtige Richtung, warum keine Daten zurückgegeben werden, da mir die Ideen ausgehen. Vielen Dank.

EDIT: Wenn es relevant ist, gibt print (server.schema) None zurück. Außerdem gibt print (conn) insert my.company.local here:389 - cleartext - user: None - not lazy - bound - open - <local: 10.5.112.213:63755 - remote: 10.5.107.41:389> - tls not started - listening - SyncStrategy - internal decoder zurück, was mich ziemlich sicher macht, dass ich verbunden bin.

+0

Keine Fehler? Sind Sie sicher, dass Sie eine Verbindung herstellen? Hat das 'conn' noch andere interessante Methoden, mit denen Sie Ihre Verbindung überprüfen können? "Wir bevorzugen Fragen, die beantwortet werden können, nicht nur diskutiert. Geben Sie Details. Teilen Sie Ihre Forschung." – SunSparc

+0

Sie scheinen AD keine Anmeldeinformationen zu liefern. 'ldap3' scheint, anders als das ADUC-Steuerelement, Ihr Benutzer-Token nicht automatisch zu erben. Daher haben Sie eine anonyme Bindung an AD durchgeführt, die Ihnen zwar keinen Erfolg bringt, Ihnen jedoch keinen Kontext bietet, in dem Sie Suchvorgänge usw. ausführen können. Grundsätzlich müssen Sie Anmeldeinformationen angeben, damit Sie suchen können. – ig0774

Antwort

0

In der Dunkelheit gedreht, aber versuchen Sie, die Klammern um die Abfrage zu entfernen, so wird wird givenName=Charles. Sind Sie sicher, dass die Domänenkomponenten korrekt sind?

+0

Die Klammern sind notwendig. Ich habe es nur überprüft. Ich bin zu 90% sicher, dass meine Domain-Komponenten korrekt sind, da meine Active Directory-Benutzer und -Computer dieselbe Domain anzeigen, die ich in meinen Code eingegeben habe. – Crazysexman

+0

@Crazysexman: Ok, wie ich schon sagte, es war nur ein Schuss in die Dunkelheit. Hast du etwas versucht, von dem du weißt, dass es ein Ergebnis wie '(cn = *)' zurückgeben wird? –

+0

Leider ja, ich habe. Ich denke, ich suche irgendwie nach der falschen Domain, aber ich weiß nicht, was genau falsch ist. – Crazysexman

0

Sie geben keinen Benutzernamen an, daher ist Ihre Verbindung anonym. Versuchen Sie im Verbindungsobjekt mit username="myname", password="mypassword" zuzugreifen. Sie können auch NTLM-Authentifizierung mit authentication=NTLM versuchen. (Sie müssen NTLM aus dem Paket ldap3 importieren). In diesem Fall muss der Benutzername "mydomain//myname" lauten.

1

Also beide cannatag und ig0774 waren korrekt. Zur Verwendung der Suchfunktion ist es erforderlich, Benutzeranmeldeinformationen bereitzustellen. Andernfalls gibt die Suchfunktion eine leere Eintragsliste zurück. Vielen Dank!