我想知道是否可以通过telnet(或其他程序)建立与LDAP服务器的连接,并开始发出请求和接收响应,就像我通常使用HTTP一样。事实上,这个问题更通用,与我对网络连接和通信协议的误解有关。让我告诉你我对这个话题的看法:
所有应用程序协议都定义了通信协议(即服务器将了解并根据其传递进行操作的消息)。如果我知道应用程序协议是如何工作的,我可以建立与服务器的连接(控制该协议服务器端的守护进程)并开始与服务器通信。例如,使用HTTP,我可以通过telnet建立与HTTP SERVER的连接,并开始与他讨论此请求,例如:
GET /users/pepito HTTP/1.1
Host: stackoverflow
Content-Type: text/html
我希望这个程序能够在任何应用程序协议中发生。这个概念是对的吗?
我瞥见了LDAP Protocol Specification RFC,但我不明白这些消息的格式。我的意思是,我期待阅读类似HTTP协议规范的内容;但它太普通了。您能举例说明如何进行LDAP搜索吗?
答案 0 :(得分:21)
LDAP RFC指定LDAP消息是ASN1编码的。这意味着消息是特殊格式的二进制数据,而不是文本,遵循特殊格式。这使得用telnet手动编写ladap-queries非常困难。
答案 1 :(得分:1)
在某些命令行朋友的帮助下,您可以有所帮助:-)
这是一个简单的LDAP查询的十六进制转储-它相当于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)。