如何在Python ldap3中抑制AD搜索结果的referrals
解决ldap3连接AD时仍返回referrals的问题
我之前也碰到过一模一样的情况,明明设了auto_referrals=False还是收到一堆searchResRef结果,折腾了好一阵才找到几个靠谱的解决方向,给你参考:
1. 确保连接和搜索操作都禁用referrals
有时候只在初始化Connection时设置auto_referrals=False还不够,ldap3的search()方法本身也有这个参数,得两边都明确指定,避免默认值覆盖:
from ldap3 import Server, Connection, ALL # 连接时禁用referrals server = Server('你的AD服务器地址', get_info=ALL) conn = Connection(server, '你的域账号@domain.com', '密码', auto_referrals=False) conn.bind() # 搜索时再次明确禁用referrals conn.search( search_base='DC=domain,DC=com', search_filter='(objectClass=computer)', attributes=['cn', 'dnsHostName'], auto_referrals=False # 这个不能漏! )
2. 配合设置referral_chasing为NONE
ldap3里还有个referral_chasing参数,它的优先级可能比auto_referrals更高。试试在连接时同时设置这两个参数:
conn = Connection( server, '你的域账号@domain.com', '密码', auto_referrals=False, referral_chasing='NONE' # 强制关闭referral追踪 )
3. 缩小搜索范围,精准指定search_base
如果你的AD存在子域或者信任域,控制器可能会自动返回跨域的referrals。试试把搜索基直接定位到计算机所在的OU,而不是整个域,这样能减少AD返回referrals的触发条件:
# 比如计算机都在OU=Workstations,DC=domain,DC=com下 conn.search( search_base='OU=Workstations,DC=domain,DC=com', search_filter='(objectClass=computer)', attributes=['cn'], auto_referrals=False )
4. 考虑Python版本的影响
你用的Python 2.7.16已经停止维护很久了,ldap3对Python 2.x的后续支持可能存在一些遗留问题。如果条件允许,建议升级到Python 3.x版本再测试,我之前升级后类似的referral问题直接就消失了。
内容的提问来源于stack exchange,提问作者DYoung
相关产品推荐
相关产品推荐

