【问题描述】使用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']

【参考资料】