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

Ank*_*kit 3 telnet pop3 smtp

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

-ERR SPA Required, use AUTH or APOP
Run Code Online (Sandbox Code Playgroud)

我通过一些搜索了解到,SPA 是微软的财产。我可以使用 telnet 进行身份验证吗?

小智 6

也许。在服务器提供简单的身份验证方法之前,您可能需要使用 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.
Run Code Online (Sandbox Code Playgroud)

好的。(无论如何,出于我们的目的)该服务器允许简单的 AUTH。现在您需要构建您的身份验证字符串,它是用户名和密码的连接,然后是 base64 编码。

有一个特定要求,即 AUTH 字符串的格式为<NUL>username<NUL>password. 您可以通过多种方式将这些信息放在一起。您可以使用 perl 或 printf 命令。

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

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

bash-$ printf '\000username\000password' | base64
AHVzZXJuYW1lAHBhc3N3b3Jk
Run Code Online (Sandbox Code Playgroud)

这些命令返回的字符串是 base64 编码的用户名和密码,您将其传递给 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 PLAIN
+ 
AHVzZXJuYW1lAHBhc3N3b3Jk
+OK Logged in.
Run Code Online (Sandbox Code Playgroud)

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

openssl s_client -connect pop-server.example.com:995
Run Code Online (Sandbox Code Playgroud)

现在您的会话将受到 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.
Run Code Online (Sandbox Code Playgroud)

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