请求将LDAP Shell脚本转为Python2.6.6并解释脚本及-b选项
没问题,我来帮你一步步搞定这个需求!
原Shell代码的功能解释
这条ldapsearch命令是用来查询LDAP目录服务的,具体做了这些事:
- 使用简单认证模式(
-x参数,不采用SASL安全认证框架) - 连接到地址为
ldap.bbc.network.lcl、端口为3477的LDAP服务器 - 通过指定的绑定账号
CN=LDAP\, Mine,OU=Resource Accounts,OU=Enterprise,DC=bbc,DC=network,DC=lcl和密码f2oH@LQ^911完成身份验证 - 从
DC=bbc,DC=network,DC=lcl这个节点开始,搜索所有带有center=1234属性的LDAP条目
-b选项的作用
-b是ldapsearch的核心参数之一,它指定了搜索基准DN(Distinguished Name,专有名称)。简单来说,就是告诉LDAP服务器:“我要从这个节点开始,向下遍历所有子节点,查找符合条件的条目”。所有的搜索操作都会以这个DN为起点,默认会覆盖该节点下的所有层级(除非用-s参数指定更小的搜索范围,比如只搜索当前节点)。
转换为Python 2.6.6代码
因为Python 2.6.6版本比较老旧,我们需要使用适配它的python-ldap库(建议安装python-ldap==2.4.10,这个版本支持Python 2.6)。下面是对应的代码:
import ldap # 配置LDAP连接参数 LDAP_SERVER = 'ldap://ldap.bbc.network.lcl:3477' BASE_SEARCH_DN = 'DC=bbc,DC=network,DC=lcl' BIND_USER_DN = 'CN=LDAP\\, Mine,OU=Resource Accounts,OU=Enterprise,DC=bbc,DC=network,DC=lcl' BIND_PASSWORD = 'f2oH@LQ^911' SEARCH_FILTER = '(center=1234)' try: # 初始化LDAP连接 ldap_conn = ldap.initialize(LDAP_SERVER) # 执行简单绑定(对应原命令的-x参数) ldap_conn.simple_bind_s(BIND_USER_DN, BIND_PASSWORD) # 执行搜索:默认搜索范围为子树(ldap.SCOPE_SUBTREE),和原命令行为一致 # 参数说明:基准DN、搜索范围、过滤条件、返回属性(None表示返回所有属性) search_results = ldap_conn.search_s(BASE_SEARCH_DN, ldap.SCOPE_SUBTREE, SEARCH_FILTER, None) # 打印结果 print("查询到的LDAP条目:") for dn, attributes in search_results: print(f"条目DN:{dn}") for attr_name, attr_values in attributes.items(): print(f" {attr_name}: {attr_values}") print("-" * 50) except ldap.LDAPError as error: print(f"LDAP操作失败:{error}") finally: # 确保关闭连接 if 'ldap_conn' in locals(): ldap_conn.unbind_s()
代码说明:
ldap.initialize()用来创建LDAP连接对象,对应原命令的-h和-p参数simple_bind_s()执行简单认证,对应原命令的-x、-D、-w参数search_s()执行同步搜索,其中BASE_SEARCH_DN对应原命令的-b参数,SEARCH_FILTER对应最后的查询条件
内容的提问来源于stack exchange,提问作者Learner
相关产品推荐
相关产品推荐

