LDAP3模块获得超过1000个结果或替代品

时间:2018-01-18 15:09:10

标签: python python-3.x active-directory ldap3

# import class and constants
from ldap3 import Server, Connection, ALL, SUBTREE

# define the server
s = Server(host='xyz', port=xxxx, use_ssl=True, get_info='ALL')
c = Connection(s, auto_bind='NONE', version=3, authentication='ANONYMOUS', client_strategy='SYNC', auto_referrals=True, check_names=True, read_only=False, lazy=False, raise_exceptions=False)

c.bind()
results = c.extend.standard.paged_search(
    search_base = 'Ou=XYZ,dc=org,dc=com',
    search_filter = '(AppID=*)',
    search_scope = SUBTREE,
    get_operational_attributes=True,
    attributes=['*'],
    generator=True,
    paged_size=None
)
i=0

for entries in results:
    print(entries)
    i+=1
print(i)

我正在尝试连接到特定端口上的服务器并执行ANONYMOUS SSL身份验证。我已经编写了上面的脚本来获得" AppID = *"的结果。我只能打印1000条记录,之后我遇到以下错误:

  

回溯(最近一次呼叫最后一次):文件" C:/获取data.py",第43行,   在       结果中的条目:文件" C:\ Users \ xyz \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ site-packages \ ldap3 \ extend \ standard \ PagedSearch.py​​",   第75行,在paged_search_generator中       提高LDAPOperationResult(结果=结果['结果'],描述=结果['描述'],dn =结果[' dn'],   message = result [' message'],response_type = result [' type'])   ldap3.core.exceptions.LDAPSizeLimitExceededResult:   LDAPSizeLimitExceededResult - 4 - sizeLimitExceeded - 无 - 无 -   searchResDone - 无

我尝试了Conquering Active Directory's 1000 record limit

提供的解决方案

我已尝试浏览文档LDAP3 Docs ,但没有成功。有没有办法读取完整的输出。 (我想有超过5k的记录)

1 个答案:

答案 0 :(得分:2)

这里的问题是您的代码将生成一个生成器对象。

from ldap3 import Server, Connection, SUBTREE
import ldap3
total_entries = 0
# define the server
s = Server(host='xyz', port=xxxx, use_ssl=True, get_info=ldap3.NONE)
c = Connection(s,authentication='ANONYMOUS') 
# subtitute your filter here 
filter = '(&(objectClass=group)(sAMAccountName=))'
entry_generator = c.extend.standard.paged_search(search_base = 'Ou=XYZ,dc=org,dc=com',
                                                 search_filter = filter,
                                                 search_scope = SUBTREE,
                                                 get_operational_attributes=True,
                                                 attributes = ['*'],
                                                 paged_size = 1000,
                                                 generator=True)
for entry in entry_generator:
    total_entries += 1
    print(entry['dn'], entry['attributes'])
print('Total entries retrieved:', total_entries) 

这应该为您提供所需的所有详细信息。 参考ldap3 documents