是否可以通过 telnet 发送 LDAP“请求”?

Posted

技术标签:

【中文标题】是否可以通过 telnet 发送 LDAP“请求”?【英文标题】:Is it possible to send LDAP "requests" via telnet? 【发布时间】:2012-07-17 23:33:56 【问题描述】:

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

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

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

我预计任何应用程序协议都会发生此过程。这个概念对吗?

我看过LDAP Protocol Specification RFC,但我不明白消息的格式。我的意思是,我期待阅读诸如 HTTP 协议规范之类的内容;但这太笼统了。您能举个例子说明如何进行 LDAP 搜索吗?

【问题讨论】:

为什么您“希望任何应用程序协议都会发生这种情况”?它在哪里说它们看起来都像 HTTP,在行中带有可读的标头? 其中一些 可以(FTP、SMTP、...)。他们中的更多人没有。 因为我无法想象其他方式可以建立通信。我需要向服务器发送一些东西,这些东西必须是可读的(可能是编码的,但是编码的“字符串”在第一个实例中是不可读的?)。其他协议如何管理?你能给我一个例子吗?谢谢朋友。 你不需要一个例子。您需要 LDAP 协议规范,并且需要被告知不能通过将其键入 Telnet 客户端手动发送。 为什么不呢?我认为一个例子对我非常有用。我的意思是,给出一个 ASN1 规范,这是以这种方式编码的,信息就是这样。我会发现这非常有用。至于你的最后一句话,为什么我不能通过直接输入 Telnet 客户端手动发送?如果我按照 LDAP 所说的 (ASN1 BER) 手动编码消息并通过 Telnet 发送该消息怎么办?这不可能吗?谢谢。 这没有任何意义。你不能举一个不存在的例子,不管它有多么有用。您根本无法在 Telnet 会话中键入二进制数据,并且如果不添加不属于协议一部分的换行符,您将无法让它发送任何内容。 【参考方案1】:

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

这是一个简单 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)。

【讨论】:

【参考方案2】:

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

【讨论】:

嗯,谢谢,我开始明白了......所以当我阅读 RFC 时,添加操作是这样描述的:tools.ietf.org/html/rfc4511#section-4.7 你能给我一个例子,我怎么能编码这个在 ASN1 中。 您可以在这里查看 ASN1 编码示例:en.wikipedia.org/wiki/Abstract_Syntax_Notation_One 因此编码的 ASN1 PDU 可能如下所示(十六进制):30 13 02 01 05 16 0e 41 6e 79 62 6f 64 79 20 74 68 65 72 65 3f 谢谢我的朋友

以上是关于是否可以通过 telnet 发送 LDAP“请求”?的主要内容,如果未能解决你的问题,请参考以下文章

使用telnet发送HTTP请求报文

telnet客户端模拟浏览器发送请求

有没有办法向 telnet 设备发送 GET 请求? [关闭]

如何使用 Telnet 发送 HTTP 请求 [关闭]

是否可以使用批处理文件来建立 telnet 会话、发送命令并将输出写入文件?

不能通过 telnet 发送 POST 变量?