ldapsearch -x -H ldap://ldap.$$$$.com -b "DC=$$$$,DC=com" -s sub -D '...@$$$$.com' -W '(sAMAccountName=...)'
参数说明:
-x:简单认证(相对SASL认证)
-H: 请求服务地地址URL
-b: 查找的起始点
-s: 查找域(scope)方式 - base|one|sub|children
-D: 绑定识别名(bind dn)
-W: 提示输入密码
‘(sAMAccountName=...)’: 过滤条件
注明:
上面我们绑定的DN是directory object里的userPrincipalName字段。 只所以不肯老实用distinguishedName,是因为公司隔三差五调整DN(F**K)。 而这种方式网上有人说只用AD支持,慎用。
import ldap
l = ldap.initialize("ldap://ldap.$$$$.com")
l.simple_bind_s('...', '...')
l.search_s('dn=$$$,dn=com', '....')
经多方调试,最终发现是Referral Chasing造成的。
ldapsearch加上-C
参数重现了这个问题 -
已有相关记录返回,但请求仍未结束,
阻塞到了对DomainDnsZones和ForestDnsZones域的查询上了,
而我们的线上DNS对这两个域不解析。
l.set_option(ldap.OPT_REFERRALS, ldap.OPT_OFF)