用ldap3 和py32win调取域信息

**
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)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值