13

我想知道是否可以通过 telnet(或其他程序)建立与 LDAP 服务器的连接,并开始发出请求和接收响应,就像我通常使用 HTTP 所做的那样。其实这个问题比较笼统,和我对网络连接和通信协议的误解有关。让我告诉你我对这个话题的想法:

所有应用程序协议都定义了通信协议(即服务器将要理解并在其传递时采取行动的消息)。如果我知道应用程序协议是如何工作的,我可以建立与服务器的连接(控制该协议服务器端的守护程序)并开始与服务器通信。例如,使用 HTTP,我可以通过 telnet 建立与 HTTP SERVER 的连接,并开始与他交谈,例如:

GET /users/pepito HTTP/1.1
Host: stackoverflow
Content-Type: text/html

我希望这个程序适用于任何应用程序协议。这个概念对吗??

我浏览了LDAP 协议规范 RFC,但我不了解消息的格式。我的意思是,我期待阅读诸如 HTTP 协议规范之类的内容;但这太笼统了。你能给我一个如何进行 LDAP 搜索的例子吗?

4

2 回答 2

24

LDAP RFC 指定 LDAP 消息采用 ASN1 编码。这意味着消息是特殊格式的二进制数据,而不是遵循特殊格式的文本。这使得使用 telnet 手动编写 ladap 查询变得非常困难。

于 2012-07-18T20:37:53.703 回答
2

在某种程度上,您可以在一些命令行朋友的帮助下 :-)

这是一个简单 LDAP 查询的 hexdump——它相当于ldapsearch -x -b "" -s base objectclass=top

30 0c 02 01 01 60 07 02 01 03 04 00 80 00
30 2c 02 01 02 63 27 04 00 0a 01 00 0a 01 00 02 01 00 02 01 1e 01 01 00 a3 12 04 0b 6f 62 6a 65 63 74 63 6c 61 73 73 04 03 74 6f 70 30 00

将它保存到一个名为 ldap.hexdump 的文件中,然后就可以使用 nc:

xxd -r -p ldap.hexdump | nc ldapserver 389

如果要查看解析后的输出,可以使用 unber:

xxd -r -p ldap.hexdump | nc ldapserver 389 | unber -m -

如果您由于某种原因不能使用 ldapsearch 并且想要使用 nc 或 openssl 来测试 LDAP 服务器是否正确响应,这可能会派上用场。它假定服务器接受匿名绑定来查询空的基本 DN(根 DSE)。

于 2020-08-03T21:08:48.690 回答