我正在尝试通过 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 会话中使用的任何方式与服务器进行交互。
| 归档时间: |
|
| 查看次数: |
8952 次 |
| 最近记录: |