×

python 用户 AD LDAP

使用Python抓取域控服务器指定用户的信息

鹭岛小千 鹭岛小千 发表于2022-05-15 17:45:24 浏览1390 评论0

抢沙发发表评论

【问题描述】使用Python如何抓取域控服务器指定用户的信息呢?

67-1.png


【小千解答】借助python-ldap库。

安装:

采用常规的pip install python-ldap一直不成功,改用国内镜像源也是一样。

可行的安装步骤:

1、先到以下网址下载与所用电脑操作系统和Python版本匹配的.whl文件,比如我下载的是:python_ldap-3.4.0-cp39-cp39-win_amd64.whl,其中cp39指python的版本,amd64指操作系统的版本。

2、将下载的文件放到C:\Windows\System32路径下。

3、以管理员身份运行cmd,输入pip install python_ldap-3.4.0-cp39-cp39-win_amd64.whl


示例代码:

import ldap
from pprint import pprint

xqLdap = ldap.initialize('ldap://adserver_ip:389')
xqLdap.protocol_version = 3
xqLdap.set_option(ldap.OPT_REFERRALS, 0)
xqLdap.simple_bind_s('administrator', 'xqoffice.cn')
xqBase = "dc=xqoffice,dc=cn"
xqScope = ldap.SCOPE_SUBTREE
xqFilter = '(&(objectClass=user)(sAMAccountName=dc-user))'
xqAttrs = None
xqId = xqLdap.search(xqBase, xqScope, xqFilter, xqAttrs)
xqtimeout = 60
_, xqData = xqLdap.result(xqId, timeout=xqtimeout)
Num = 0
if xqData:
    for xqClark in xqData:
        if xqClark[0]:
            Num += 1
            print(Num, ':')
            print('==转码前=========')
            pprint(xqData)
            print('==转码后=========')
            print(xqClark[0])    # distinguished name
            xqDic = xqClark[1]    # dic of fields
            for key in xqDic:
                print(key, ':', end='')
                for val in xqDic[key]:
                    try:
                        print(' ', bytes.decode(val))
                    except:
                        print(' ', val)
print('Found:', Num)
print('Done')


运行结果:

67-2.png


【知识拓展】

  (&(objectClass=user)(sAMAccountName=dc-user)):查找用户,登录名为dc-user,支持模糊查询,比如把dc-user改成1005*,表示登录名以1005开头的用户。

代码中Attrs变量设置为None,则查找该用户所有字段信息,可以只查询指定字段,比如只查姓名和邮箱字段,则改成如下:

Attrs = ['cn','mail']


打赏码.png


【参考资料】

  1. python-ldap Reference Documentation

  2. 通过python-ldap操作管理AD/LDAP用户及组织结构


群贤毕至

访客