python :通过Ldap 3 模块查询AD 组和 AD 用户名单

from ldap3 import Server, Connection, ALL, NTLM

定义一个类用于操作AD

class Operate_AD():
def init(self,Domain,User,Password):
self.domain=Domain
self.user=User
self.pwd=Password
self.DC=‘,‘.join([‘DC=‘ + dc for dc in Domain.split(‘.‘)])
self.pre = Domain.split(‘.‘)[0].upper()
self.server = Server(self.domain, use_ssl=True,get_info=ALL)
self.conn = Connection(self.server, user=self.pre+‘\‘+self.user, password=self.pwd, auto_bind=True)

def Get_All_UserInfo(self):
    ‘‘‘
    查询组织下的用户
    org: 组织,格式为:aaa.bbb 即bbb组织下的aaa组织,不包含域地址
    ‘‘‘
    att_list = [‘displayName‘, ‘userPrincipalName‘,‘userAccountControl‘,‘sAMAccountName‘,‘pwdLastSet‘]
    # org_base = ‘,‘.join([‘OU=‘ + ou for ou in org.split(‘.‘)]) + ‘,‘ + self.DC
    res = self.conn.search(search_base=self.DC,search_filter=‘((objectclass=person))‘,attributes=att_list, paged_size=100,search_scope=‘SUBTREE‘)
    if res:
        for users in self.conn.entries:
            yield users
    else:
        print(‘查询失败: ‘, self.conn.result[‘description‘])
        return None

def Get_All_GroupInfo(self):
    ‘‘‘
    查询组织下的用户
    org: 组织,格式为:aaa.bbb 即bbb组织下的aaa组织,不包含域地址
    ‘‘‘
    att_list = [‘cn‘,‘member‘,‘objectClass‘,‘userAccountControl‘,‘sAMAccountName‘,‘description‘]
    # org_base = ‘,‘.join([‘OU=‘ + ou for ou in org.split(‘.‘)]) + ‘,‘ + self.DC
    res = self.conn.search(search_base=self.DC,search_filter=‘(objectclass=group)‘,attributes=att_list, paged_size=10,search_scope=‘SUBTREE‘)
    if res:
        for group in self.conn.entries:
            yield group
    else:
        print(‘查询失败: ‘, self.conn.result[‘description‘])
        return None

    if __name__ == ‘__main__‘:
                act=Operate_AD(‘demo.com‘,‘testaccount‘,‘testpassword‘)
                for user in act.Get_All_UserInfo():
                        print(user)
# for group in act.Get_All_GroupInfo():
#   print(group)

备注: 微软search_filter 语法
https://docs.microsoft.com/en-us/windows/win32/adsi/search-filter-syntax

原文地址:https://blog.51cto.com/unicom/2421224

时间: 2024-10-12 06:32:52

python :通过Ldap 3 模块查询AD 组和 AD 用户名单的相关文章

python学习-使用requests模块查询ip地址

思路是,使用requests模块调用阿里的ip接口查询ip归属地 关于requests模块的使用,可以查询相关文档,很强大,本次不做描述 #!/usr/bin/python #coding=utf-8 import requests   def checkip(ip):       URL = 'http://ip.taobao.com/service/getIpInfo.php'     try:         r = requests.get(URL, params=ip, timeout

检查是否使用PAM认证模块禁止wheel组之外的用户su为root

编辑su文件(vi /etc/pam.d/su),在开头添加下面两行: auth sufficient pam_rootok.so 和 auth required pam_wheel.so group=wheel 这表明只有wheel组的成员可以使用su命令成为root用户. 你可以把用户添加到wheel组,以使它可以使用su命令成为root用户. 添加方法为:usermod –G wheel username

Python系列5之模块

模块 1. 模块的分类 模块,又称构件,是能够单独命名并独立地完成一定功能的程序语句的集合(即程序代码和数据结构的集合体). (1)自定义模块 自己定义的一些可以独立完成某个功能的一段程序语句,可以是一个文件,也可以是一个目录. (2)第三方模块 是由其他人写的一些程序语句,我们可以用它来实现自己的功能. (3)内置模块 是由python自己带的一些实现某种特定功能的组件. 2. 模块的导入 (1)python默认的模块寻找路径 当开始导入一个模快的时候,python默认的会先找到第一个路径去看

python 第七章 模块

模块 一个py文件就是一个模块模块一共三种:1.python标准库 2.第三方模块 3.应用程序自定义模块 import:1.执行对应文件 2.引入变量名if__name__="__main__": #1.用于被调用文件测试 2.防止主程序被调用 time模块 常用命令 时间模块 1 import time 2 #时间戳: 3 print(time.tiem()) 4 5 #结构化时间(当地): 6 t =time.localtime(time.tiem()) 7 print(t) 8

python正则表达式与re模块

python中的re模块常用函数/方法 0.正则表达式对象 (re.compile(pattern, flags=0)) 将正则表达式编译成正则表达式对象,该对象可调用正则表达式对象方法如:re.match(),re.search(),re.findall等. prog = re.compile(pattern) result = prog.match(string) //上下两种写法意义相同 result = re.match(pattern, string) 1.匹配对象及方法       

python 3 mysql sql逻辑查询语句执行顺序

python 3 mysql sql逻辑查询语句执行顺序 一 .SELECT语句关键字的定义顺序 SELECT DISTINCT <select_list> FROM <left_table> <join_type> JOIN <right_table> ON <join_condition> WHERE <where_condition> GROUP BY <group_by_list> HAVING <havin

Python基础5-常用模块

本节大纲 模块介绍 time &datetime模块 random os sys shutil shelve xml处理 yaml处理 configparser hashlib subprocess logging模块 re正则表达式 模块,就是实现某种或者某类功能代码的合集. 类似于函数式编程和面向过程编程,函数式编程完成一个功能,其他代码可以调用,提供了代码的重用性跟代码间的耦合.对于一个复杂的功能,可能需要多个函数才能完成,多个.py文件的代码集合就叫做模块. 如:os是系统相关的模块:f

2015/9/15 Python基础(12):模块和包

模块是用来组织 Python 代码的方法,而包则是用来组织模块的. 当代码量很大时,我们一般会把代码分成几个有组织的代码段,然后每个代码段之间有一定的联系.代码单之间是共享的,所以Python允许调入一个模块,允许使用其他模块的属性利用之前的工作成果,实现代码重用.那些自我包含并且有组织的代码片段就是模块(module),将其他模块中属性附加到你的模块中的操作较导入(import) 模块是逻辑上的说法,而它们在物理层是一个个独立的文件,模块的文件名就是模块的名字加拓展名.py.与其他可以导入类的

python 的日志logging模块学习

最近修改了项目里的logging相关功能,用到了python标准库里的logging模块,在此做一些记录.主要是从官方文档和stackoverflow上查询到的一些内容. 官方文档 技术博客 基本用法 下面的代码展示了logging最基本的用法. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 # -*- cod