【问题描述】使用Python如何抓取域控服务器指定用户的信息呢?
【小千解答】借助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')
运行结果:
【知识拓展】
(&(objectClass=user)(sAMAccountName=dc-user)):查找用户,登录名为dc-user,支持模糊查询,比如把dc-user改成1005*,表示登录名以1005开头的用户。
代码中Attrs变量设置为None,则查找该用户所有字段信息,可以只查询指定字段,比如只查姓名和邮箱字段,则改成如下:
Attrs = ['cn','mail']
【参考资料】