请求将指定LDAP Shell脚本转换为Python 2.6.6版本代码
转换后的Python 2.6.6 LDAP查询代码
我帮你把这段Shell的LDAP查询脚本转换成兼容Python 2.6.6的代码,完全保留原Shell的所有参数配置:
首先先梳理原Shell脚本里的核心LDAP参数,确保转换时完全对齐:
- LDAP服务器地址+端口:
ldap.bbc.network.lcl:3477 - 绑定用户DN:
CN=LDAP, Mine,OU=Resource Accounts,OU=Enterprise,DC=bbc,DC=network,DC=lcl(Shell里的转义逗号\,在Python中不需要转义,直接写逗号即可) - 绑定密码:
passwd - 搜索基准DN(base DN):
DC=bbc,DC=network,DC=lcl - 动态过滤条件:对应Shell中的
$1参数,我们在Python里通过命令行参数传入
下面是完整的转换代码:
import ldap import sys # 初始化LDAP连接,对应Shell的-h和-p参数 l = ldap.initialize('ldap://ldap.bbc.network.lcl:3477') # 关闭引用避免环境问题,启用简单认证(对应Shell的-x参数) l.set_option(ldap.OPT_REFERRALS, 0) l.protocol_version = ldap.VERSION3 # 绑定用户信息,对应Shell的-D和-w参数 bind_dn = "CN=LDAP, Mine,OU=Resource Accounts,OU=Enterprise,DC=bbc,DC=network,DC=lcl" bind_password = "passwd" try: # 执行绑定操作 l.simple_bind_s(bind_dn, bind_password) # 搜索参数配置,对应Shell的-b和$1参数 base_dn = "DC=bbc,DC=network,DC=lcl" scope = ldap.SCOPE_SUBTREE # 和ldapsearch默认搜索范围一致 # 获取命令行传入的过滤条件,默认匹配所有对象 search_filter = sys.argv[1] if len(sys.argv) > 1 else "(objectClass=*)" retrieve_attributes = None # 检索所有属性,对应ldapsearch默认行为 # 执行LDAP搜索 result_id = l.search(base_dn, scope, search_filter, retrieve_attributes) # 遍历并打印搜索结果,模拟ldapsearch的输出格式 while True: result_type, result_data = l.result(result_id, 0) if not result_data: break if result_type == ldap.RES_SEARCH_ENTRY: print("dn: {}".format(result_data[0][0])) for attr, values in result_data[0][1].items(): for val in values: print("{}: {}".format(attr, val)) print("\n") finally: # 主动关闭LDAP连接 l.unbind_s()
关键参数对应说明
ldap.initialize('ldap://ldap.bbc.network.lcl:3477'):完全对应Shell的-h ldap.bbc.network.lcl -p 3477配置bind_dn:对应Shell中-D指定的绑定用户身份DNbind_password:对应Shell中-w passwd的密码配置base_dn:对应Shell中-b指定的搜索基准路径search_filter:对应Shell的$1参数,执行脚本时可通过命令行传入过滤条件,比如python ldap_query.py "(cn=test_user)"
使用注意事项
- 确保Python 2.6.6环境已安装兼容的
python-ldap模块,可执行pip install python-ldap==2.4.10安装适配版本 - 执行脚本时直接传入过滤条件即可,和原Shell脚本的使用方式一致
- 如果不需要打印结果,只需获取数据,可修改最后的遍历逻辑,将结果存入变量而非打印
内容的提问来源于stack exchange,提问作者Learner
相关产品推荐
相关产品推荐

