**
1: return all account search type in search_range
2: return acount all message
3: return account ou
4: return account whether in ad
5: return search type
6: return account belong which group
**
import
# coding=utf8
import json
import ldap3
from ldap3 import Connection, Server
from win32net import NetUserGetGroups
connect sever
def connect_server():
sever = 'XX.XX.XX.XX'
user = 'domain_name\\account_name'
password = 'account_password'
conn = Connection(Server(sever, port=389, use_ssl=False),
auto_bind=ldap3.AUTO_BIND_NO_TLS, user=user,
password=password)
while True:
value = input('Do you want to run something (y/n): ')
if 'y' in value.lower():
res = select_function(conn)
print(res)
print(type(res))
elif 'n' in value.lower():
print('exit')
break
else:
print('error input, try again')
select run function
def select_function(conn):
num = input('1: return all account search type in search_range\n'
'2: return acount all message\n'
'3: return account ou\n'
'4: return account whether in ad\n'
'5: return search type\n'
'6: return account belong which group\n'
'please enter num (1~6): '
)
if num == '1':
print("\n# return_account_search_type(conn,search_range='OU=XXX,dc=XXX,dc=com/cn',objectclass='group',search_type='name')")
search_range = input('search_range: ')
objectclass = input('objectclass(user/group/organizationalUnit...): ')
search_type = input('search_type(cn/sAMAccountName/name...): ')
res = return_account_search_type(conn,search_range,objectclass,search_type)
return res
elif num == '2':
print("\n# return_account_message(conn, search_range='ou=XXX,OU=XXX,dc=XXX,dc=com/cn',account='XXX')")
search_range = input('search_range: ')
account = input('account: ')
res = return_account_message(conn,search_range,account)
return res
elif num == '3':
print("\n# return_account_ou(conn, search_range='dc=XXX,dc=com/cn',account='XXX')")
search_range = input('search_range: ')
account = input('account: ')
res = return_account_ou(conn,search_range,account)
return res
elif num == '4':
print("\n# estimate_account_in_ad(conn,search_range='dc=XXX,dc=com/cn',account='XXX')")
search_range = input('search_range: ')
account = input('account: ')
res = estimate_account_in_ad(conn,search_range,account)
return res
elif num == '5':
print("\n# return_search_type(conn,search_range='cn=XXX,ou=XX,OU=XXX,dc=XXX,dc=com/cn',member)")
search_range = input('search_range: ')
search_type = input('search_type(cn/member/objectClass/userAccountControl/sAMAccountName/description...): ')
res = return_search_type(conn,search_range,search_type)
return res
elif num == '6':
print("\n# return_member_of(sever='XX.XX.XX.XX', account='XXX')")
sever = input('sever: ')
account = input('account: ')
res = return_member_of(sever,account)
return res
return all SamAccountName in search_range
Specific search type running function 2
def return_account_search_type(conn,search_range,objectclass,search_type):
account_list = []
conn.search('{}'.format(search_range), '(objectclass={})'.format(objectclass),
search_scope=ldap3.SUBTREE, attributes=['{}'.format(search_type)], size_limit=0)
res = conn.response_to_json()
exchange_to_json = json.loads(res)
for i in exchange_to_json['entries']:
account_list.append(i['attributes']['{}'.format(search_type)])
return account_list
return acount all message
def return_account_message(conn,search_range,account):
conn.search(search_range, "(sAMAccountName={})".format(account), attributes=['*'])
return conn.entries
return account ou
def return_account_ou(conn,search_range,account):
conn.search(search_range, "(sAMAccountName={})".format(account), attributes=['distinguishedName'])
return conn.entries
whether account in ad
def estimate_account_in_ad(conn,search_range,account):
account_list = return_account_search_type(conn,search_range,objectclass='user',search_type='sAMAccountName')
if account in account_list:
return 'Account already existing'
else:
return 'The account does not exist'
return group member
att_list = [‘cn‘,‘member‘,‘objectClass‘,‘userAccountControl‘,‘sAMAccountName‘,‘description‘]
def return_search_type(conn,search_range,search_type):
conn.search('{}'.format(search_range), '(objectclass=group)',
search_scope=ldap3.SUBTREE, attributes=['{}'.format(search_type)])
res = conn.response_to_json()
exchange_to_json = json.loads(res)
for i in exchange_to_json['entries']:
group_member = i['attributes']['{}'.format(search_type)]
if len(group_member):
account_list = group_member
else:
account_list = i
return account_list
return account belong which group
def return_member_of(sever,account):
return NetUserGetGroups(sever, account)