最近我一直在试验一个简单的脚本,它在端口 25 上侦听,并接收和记录任何传入的电子邮件。
这是一个非常原始的脚本,根本没有实现 SMTP 协议。它只是简单地吐出罐头回复,它的工作原理如下:
- 等待传入的套接字。
- 发送“220 example.com ESMTP Postfix”。
- 接收一行,通常如“EHLO other.com”。
- 发送“250 example.com,很高兴认识你”。
- 接收到“DATA”的行,每次都回复“250 Ok”。
- 发送“354 End data with .”。
- 接收行直到“。” 收到。
- 发送 250 确定:排队为 12345。
- 接收任何最后一行然后关闭套接字。
(example.com 代替了我真实域的 FQDN。)
这确实是一个非常粗糙的脚本;但是,在过去的几个月里,它对我需要接收的每封电子邮件都非常有效。我可以收到来自 Gmail、Protonmail、验证电子邮件等的罚款。我还捕获了一些互联网范围的扫描,所以它也可以作为一个有趣的蜜罐。
今天,我尝试收到一封微软账户验证邮件来注册一个微软账户。远程客户端似乎根本没有响应 220!
# nc -l -v -p 25
Listening on [0.0.0.0] (family 0, port 25)
Connection from mail-co1nam03on0003.outbound.protection.outlook.com 56725 received!
220 example.com ESMTP Postfix
无论我尝试什么,客户都不会发送任何东西。我究竟做错了什么?欢迎任何想法。