像 Email Hunter 和 Snov.io 这样的邮件查找网站是如何工作的
像 Email Hunter 和 Snov.io 这样的邮件查找网站是如何工作的
了解如何创建自己的电子邮件查找服务。

How else do we ask Bill Gates to invest in our ill-conceived startups?
他们猜测并验证。他们通过询问和心理虐待邮件服务器来达到目的。大多数邮件服务器是无辜的,友好的生物。说HELO,他们会立即回复一个Hello,除非他们疯了,或者死了。
告诉他们你是谁,他们会兴奋地回应一句OK。
告诉他们你需要给谁发邮件,他们会告诉你收件人的地址是否正确(小心,有时狡猾的人会撒谎)。
电子邮件查找网站利用这种友好性来猜测和验证电子邮件地址。
他们需要知道联系人的全名和他们的公司域名。所以如果我们要在微软寻找比尔·盖茨,我们需要一台时间机器。但是如果我们需要他在微软的电子邮件地址,我们需要知道他的全名是比尔·盖茨,他公司的域名是 microsoft.com。
然后,我们使用这些信息生成一个电子邮件地址列表以供猜测。大多数大公司都有标准的电子邮件地址模式。以下是最常见的几种:
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- 【[email protected]】
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- 【[email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
- [email protected]
我们需要找出哪个是真正的比尔·盖茨。让我们给他们发电子邮件来找出答案。不是!
这正是我们要做的。给他们发邮件。不是!
我的意思是我们会假装给他们所有人发一封电子邮件——那就不要!
当您请求邮件服务器为您发送电子邮件时,邮件服务器会告诉您收件人的电子邮件地址是否正确。一旦开始,你就挂断。
很粗鲁,不是吗?!想象一下被那样对待。如果邮件服务器发现你试图利用他们,他们会停止与你交谈。甚至告诉其他邮件服务器不要理你。邮件服务器通常与同类服务器联系紧密。
简而言之,这就是如何使用 TELNET 来猜测电子邮件地址。TELNET 是一种与服务交互的方式,有点像电话。你给某人打电话;如果他们在那里,他们会拿起话筒回应。如果他们不想回答,他们会忽略你的电话。如果他们接电话,你可以开始和他们交流。要么让他们做点什么,要么去打听消息。但是你需要说他们能理解的语言。否则,他们将无法回应。邮件服务器理解 SMTP,这是一种通过邮件服务器发送和接收邮件的协议。SMTP 连接通常在端口 25 上进行。端口就像电话分机。
现在,我们需要使用 TELNET 连接到微软的邮件服务器,并通过向邮件服务器发送 SMTP 消息来验证比尔·盖茨可能的电子邮件地址。当我们使用 TELNET 连接到邮件服务器时,我们会收到一个提示,提示我们准备好接受 SMTP 消息。
好吧,让我们来看看实际情况。启动你的命令提示符(Windows) /终端(OS X / Linux)。大多数操作系统都内置了 TELNET,所以您可能不需要安装它。如果 TELNET 命令不起作用,请搜索您的操作系统的安装过程。TELNET 的语法很简单。
这些例子都运行在 Mac OS X 终端上。
**telnet HOST PORT**
我们的HOST这里是我们的邮件服务器,PORT是25(记住,邮件服务器可以连接到端口 25)。我们来和microsoft.com比一比。
**telnet microsoft.com 25** Trying 104.43.195.251...
它会像这样保持一段时间,什么也不做。点击Ctrl+C关闭连接。因为这是错误的。邮件服务器通常位于一个子域或另一个完全不同的地址。很多公司甚至没有自己的邮件服务器;他们订阅邮件提供商,如 GMail、Outlook365、Zoho、Yandex 等。
那么我们如何找出微软的邮件服务器呢?很简单。像其他网站一样,微软公开了它。每个网站都有自己的名为 DNS 的地址簿,上面列出了相关的地址和端口。他们的邮件服务器也列在 DNS 中。
为了找到它,我们需要使用另一个名为 DIG 的命令。把这个命令想象成一个地址簿查找。在 Windows 上,默认情况下不安装 DIG,您可以自己安装,或者使用 NSLOOKUP 命令。
邮件服务器被分类为称为 MX 记录的记录。MX 代表邮件交换器。因此,让我们看看如何使用 DIG 和 NSLOOKUP 命令来查找微软的 MX 记录,从而找到邮件服务器。
DIG 的语法:
**dig [CATEGORY] HOST**
我们这里的CATEGORY是MX,而我们的HOST是microsoft.com。CATEGORY是可选的,你可以省去它并获得所有列出的 DNS 记录。不过我们将使用MX来运行它。
**dig mx microsoft.com** ; <<>> DiG 9.9.5–3ubuntu0.15-Ubuntu <<>> mx microsoft.com
;; global options: +cmd;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 23550
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096;; QUESTION SECTION:
;microsoft.com. IN MX;; *ANSWER SECTION*:
microsoft.com. 60 IN MX 10 microsoft-com.mail.protection.outlook.com.;; Query time: 13 msec
;; SERVER: 172.31.0.2#53(172.31.0.2)
;; WHEN: Wed Nov 01 14:59:20 UTC 2017
;; MSG SIZE rcvd: 96
有很多奇怪的代码和数字。别担心,我们现在只对ANSWER SECTION感兴趣。邮件服务器就列在那里。
大多数网站通常都有不止一个邮件服务器,以防其中一个关闭或由于某种原因无法访问。所以不要惊讶在那里发现多个条目。出于我们的目的,您可以选择列表中的第一个。
我们可以在 DIG 命令中添加一些选项,只得到答案部分,而没有其他晦涩难懂的内容。
**dig +noall +answer mx microsoft.com** microsoft.com. 60 IN MX 10 microsoft-com.mail.protection.outlook.com.
现在,我们有了答案。但看起来不像是有效地址。那是因为它提供的不仅仅是我们的地址。只有最后一部分microsoft-com.mail.protection.outlook.com是我们的邮件服务器地址(不包括尾随点)。
如果没有 DIG,可以使用 NSLOOKUP 命令:
**nslookup -q=mx microsoft.com** Server: 172.31.0.2
Address: 172.31.0.2#53Non-authoritative answer:
microsoft.com mail exchanger = 10 microsoft-com.mail.protection.outlook.com.Authoritative answers can be found from:
同样,只有答案的最后一部分没有尾随点是我们的邮件服务器— microsoft-com.mail.protection.outlook.com
好了,现在我们有了目标邮件服务器。让我们测试一下之前失败的 TELNET 命令。只是这一次,我们使用邮件服务器作为HOST,而不是网站地址。
**telnet microsoft-com.mail.protection.outlook.com 25** Trying 23.103.156.42…
*Connected* to microsoft-com.mail.protection.outlook.com.
Escape character is ‘^]’.
220 BL2NAM06FT016.mail.protection.outlook.com Microsoft ESMTP MAIL Service ready at Wed, 1 Nov 2017 15:13:16 +0000
有用!
我们看到…一些胡言乱语。但是我们可以看到它是连接的,它在等待我们写点什么。邮件服务器收到了我们的电话。它已经准备好和我们说话了。但是我们说什么呢?记住…邮件服务器理解 SMTP 语言。让我们用 SMTP 问候他们。说HELO。
**HELO**
250 BL2NAM06FT016.mail.protection.outlook.com *Hello* [54.149.XXX.XXX]
上面写着Hello。它喜欢我们…到目前为止。
是时候变得刻薄了!让我们假设通过邮件服务器发送一封电子邮件。看看它能否告诉我们比尔·盖茨的电子邮件地址。首先,我们需要给它我们自己的电子邮件地址。如果我们真的想发送电子邮件,这将是来自电子邮件地址的。要指定来自的电子邮件地址,您需要使用以下语法:
**MAIL FROM: <EMAIL@DOMAIN>**
邮件服务器不读新闻。他们不知道史蒂夫·乔布斯已经去世了。所以我们现在可以做史蒂夫·乔布斯。
**MAIL FROM: <**[**[email protected]**](mailto:[email protected])**>** 250 2.1.0 *Sender OK*
发送方正常。看,它不知道。现在,我们终于可以开始猜测…
下面是描述收件人地址的语法:
**RCPT TO: <EMAIL@DOMAIN>**
我们将根据最常见的电子邮件模式列表(如上所列)测试各种地址。
**RCPT TO: <**[**[email protected]**](mailto:[email protected])**>** 550 5.4.1 [[[email protected]](mailto:[email protected])]: Recipient address rejected: Access denied [BL2NAM06FT016.Eop-nam06.prod.protection.outlook.com]
收件人地址被拒绝。看起来那不是比尔·盖茨的电子邮件地址。让我们多试几个…
**RCPT TO: <**[**[email protected]**](mailto:[email protected])**>** 550 5.4.1 [[[email protected]](mailto:[email protected])]: Recipient address rejected: Access denied [DM3NAM06FT009.Eop-nam06.prod.protection.outlook.com]
**RCPT TO: <**[**[email protected]**](mailto:[email protected])**>** 550 5.4.1 [[[email protected]](mailto:[email protected])]: Recipient address rejected: Access denied [DM3NAM06FT009.Eop-nam06.prod.protection.outlook.com]
**RCPT TO: <**[**[email protected]**](mailto:[email protected])**>** 550 5.4.1 [[[email protected]](mailto:[email protected])]: Recipient address rejected: Access denied [DM3NAM06FT009.Eop-nam06.prod.protection.outlook.com]
**RCPT TO: <**[**[email protected]**](mailto:[email protected])**>** 550 5.4.1 [[[email protected]](mailto:[email protected])]: Recipient address rejected: Access denied [DM3NAM06FT009.Eop-nam06.prod.protection.outlook.com]
**RCPT TO: <**[**[email protected]**](mailto:[email protected])**>** 250 2.1.5 *Recipient OK*
这是一个宾果!我们在微软找到了比尔·盖茨的电子邮件地址:[email protected]。
你现在可以找到任何人的电子邮件地址,以及主要的电子邮件查找服务。但是正如你所看到的,这个过程有点复杂。大量的打字和中间的等待。
所以请继续关注下一篇文章,在那里我将解释如何完全自动化这个过程(包括访问完整的代码)。
然后在之后的文章中,我将描述如何扩展服务来处理成千上万的邮件猜测,以及在这个过程中你将面临什么样的挑战。
免责声明:本文所表达的观点均为本人观点。没有人付钱给我写这篇文章。据我所知,我与文章中提到的任何服务、商标或公司没有任何关联或竞争关系。