55 lines
2.1 KiB
Python
55 lines
2.1 KiB
Python
import ldap3
|
|
import sys
|
|
|
|
def discover_ldap(server_ip, port=3890):
|
|
server_uri = f"ldap://{server_ip}:{port}"
|
|
print(f"Connecting to {server_uri}...")
|
|
|
|
server = ldap3.Server(server_uri, get_info=ldap3.ALL)
|
|
conn = ldap3.Connection(server, auto_bind=False)
|
|
|
|
try:
|
|
if not conn.open():
|
|
print("Could not open connection.")
|
|
return
|
|
|
|
print("\n--- Root DSE Information ---")
|
|
if server.info:
|
|
print(f"Naming Contexts: {server.info.naming_contexts}")
|
|
print(f"Supported LDAP Versions: {server.info.supported_ldap_versions}")
|
|
|
|
# For LLDAP, the namingContexts is usually dc=example,dc=com or similar
|
|
if server.info.naming_contexts:
|
|
base_dn = server.info.naming_contexts[0]
|
|
print(f"Detected Base DN: {base_dn}")
|
|
|
|
# Now try to explore structure (if allowed)
|
|
print(f"\nSearching for users and groups in {base_dn} (Anonymous Search)...")
|
|
|
|
# Search for user 'bede'
|
|
conn.search(base_dn, '(uid=bede)', attributes=['*'])
|
|
if conn.entries:
|
|
print(f"Found User 'bede': {conn.entries[0].entry_dn}")
|
|
else:
|
|
print("Could not find user 'bede' via anonymous search.")
|
|
|
|
# Search for group 'inventory'
|
|
conn.search(base_dn, '(cn=inventory)', attributes=['*'])
|
|
if conn.entries:
|
|
print(f"Found Group 'inventory': {conn.entries[0].entry_dn}")
|
|
print(f"Attributes: {conn.entries[0].entry_attributes}")
|
|
else:
|
|
print("Could not find group 'inventory' via anonymous search.")
|
|
else:
|
|
print("No namingContexts found.")
|
|
else:
|
|
print("Could not retrieve Root DSE info.")
|
|
|
|
except Exception as e:
|
|
print(f"Error: {e}")
|
|
finally:
|
|
conn.unbind()
|
|
|
|
if __name__ == "__main__":
|
|
discover_ldap("192.168.84.107")
|