通过 Telnet 连接到 POP/SMTP 服务器

通过 Telnet 连接到 POP/SMTP 服务器

我正在尝试通过 telnet(端口 25 和 110)连接到 SMTP/POP 服务器。但是,我无法验证自己的身份。每当我尝试验证时,它都会显示 (pop)

-ERR SPA Required, use AUTH or APOP

通过搜索,我了解到 SPA 是 Microsoft 的专有产品。我可以使用 telnet 进行身份验证吗?

答案1

也许。您可能需要在服务器提供简单的身份验证方法之前使用 openssl 来提供安全性。

首先,您需要检查有哪些可用的 AUTH 机制。您可以通过将AUTH不带参数的命令传递给 pop 服务器来执行此操作:

$ telnet pop-server.example.com 110
Trying 10.10.10.10...
Connected to pop-server.example.com
Escape character is '^]'.
+OK The Microsoft Exchange POP3 service is ready.
AUTH
+OK
NTLM
GSSAPI
PLAIN
.
quit
+OK Microsoft Exchange Server 2010 POP3 server signing off.

好的。 (无论如何,为了我们的目的) 此服务器允许纯 AUTH。现在您需要构建您的 auth 字符串,它是用户名和密码的组合,然后进行 base64 编码。

有一个特定要求,即 AUTH 字符串的格式为<NUL>username<NUL>password。有几种方法可以将此信息组合在一起。您可以使用 perl 或 printf 命令。

bash-$ perl -MMIME::Base64 -e 'print encode_base64("\000username\000password");'
AHVzZXJuYW1lAHBhc3N3b3Jk

或者,如果您没有安装 MIME::Base64 perl 模块。

bash-$ printf '\000username\000password' | base64
AHVzZXJuYW1lAHBhc3N3b3Jk

这些命令返回的字符串是您传递给 AUTH 命令的 base64 编码的用户名和密码。

现在您与 pop 服务器的身份验证会话将如下所示:

$ telnet pop-server.example.com 110
Trying 10.10.10.10...
Connected to pop-server.example.com
Escape character is '^]'.
+OK The Microsoft Exchange POP3 service is ready.
AUTH PLAIN
+ 
AHVzZXJuYW1lAHBhc3N3b3Jk
+OK Logged in.

现在你就可以做你需要做的事了。 然而,服务器可能不允许您在非加密会话中使用 AUTH PLAIN。如果是这种情况,您可能必须使用 openssl 而不是 telnet 来管理您的 pop3 会话。

openssl s_client -connect pop-server.example.com:995

现在您的会话将受到 SSL/TLS 保护,并且您可以继续使用上面概述的 AUTH 方法与您的 pop3 服务器进行交互。

bash-$ openssl s_client -connect pop-server.example.com:995
CONNECTED(00000003)
<snip a bunch of ssl cruft>
SSL-Session:
    Protocol  : TLSv1
    Cipher    : AES128-SHA
    Session-ID: blahblahblah
    Session-ID-ctx: 
    Master-Key: blahblahblah
    Key-Arg   : None
    Start Time: 1320992572
    Timeout   : 300 (sec)
    Verify return code: 0 (ok)
---
+OK The Microsoft Exchange POP3 service is ready.

从这里,您可以按照在直接 telnet 会话中通常使用的任何方式与服务器进行交互。

相关内容