-2

我正在尝试使用 LDAP 连接到服务器。我已经让脚本在没有使用特定端口号的测试服务器上工作。尝试连接到使用特定端口的开发系统时,我收到以下错误:

File "site-packages\ldap3\core\server.py", line 117, in__init__
ldap3.core.exceptions.LDAPInvalidPortError: port must be an integer
[7836] Failed to execute script ldap_query

过去我们使用 python-ldap,它在 ldap.initialize('LDAP://cd-dir...net/(Port)') 命令中指定的端口没有问题。生成错误的代码如下所示。

def ldap_connect(address, dn, password)
    server = Server(address)
    try:
        conn = Connection(server, dn, password, auto_bind = True)
        print('Authentication Successful')
        print(conn.extend.standard.who_am_i())
    except: LDAPBindError as err:
        print(LDAPBindError)

ldap_connect('LDAP://cd-dir-cd-test....net:port/dc=cd...dc=com', 'user', 'password') 

为了解决这个问题,我尝试从地址中取出端口号,而是按以下方式放置:

server = Server(address, port = XXX)

这解决了“端口必须是整数”错误。然而,这并没有解决问题。我收到的新错误是:

File "site-packages\ldap3\core\connection.py", line 325, in__init__
File "site-packages\ldap3\core\connection.py", line 340, in do_auto_bind
File "site-packages\ldap3\strategy\sync.py", line 56, in open
File "site-packages\ldap3\strategy\base.py", line 151, in open
ldap3.core.exceptions.LDAPSocketOpenError: invalid server address
[5976] Failed to execute script ldap_query

我该如何解决这个问题?还有另一种设置我不知道的端口的方法吗?

最好的祝愿,

4

1 回答 1

1

您将ldap://URI 传递给ldap_connect,但看起来ldap3.Server该类需要一个主机名或地址。也就是说,您当前正在尝试执行此操作:

server = Server('ldap://cd-dir-cd-test.example.net:port')

当你需要的是:

server = Server('cd-dir-cd-test.example.net', port=port)

当然port必须是整数,而不是字符串。您可以使用该ldap3.utils.uri.parse_uri方法从 ldap URI 中提取所需的信息:

from ldap3 import Server, Connection
from ldap3.utils.uri import parse_uri


def ldap_connect(uri, dn, password):
    parsed = parse_uri(uri)
    server = Server(parsed['host'], use_ssl=parsed['ssl'], port=parsed['port'])
    conn = Connection(server, dn, password, auto_bind = True)
    print('Authentication Successful')
    print(conn.extend.standard.who_am_i())

    return conn

conn = ldap_connect('LDAP://cd-dir-cd-test....net:port/dc=cd...dc=com',
                    'user', 'password') 
于 2019-08-13T13:09:50.957 回答