Узнайте, как создать собственную службу поиска электронной почты.

Они догадываются и проверяют. И они делают это, опрашивая почтовые серверы и подвергая их психологическому насилию. Большинство почтовых серверов - невинные и дружелюбные создания. Скажите HELO, и они немедленно ответят Hello, если только они не сошли с ума или не умерли.

Скажите им, кто вы, и они взволнованно ответят OK.

Скажите им, кому нужно написать по электронной почте, и они скажут вам, правильный адрес получателя или нет (будьте осторожны, иногда хитрые лгут).

Сайты по поиску электронной почты используют это удобство, чтобы угадывать и проверять адреса электронной почты.

Им необходимо знать полное имя контакта и домен своей компании. Так что, если мы ищем Билла Гейтса в Microsoft, нам понадобится машина времени. Но если нам понадобится его адрес электронной почты в Microsoft, нам нужно будет знать, что его полное имя - Билл Гейтс, а домен его компании - microsoft.com.

Затем мы используем эту информацию для создания списка адресов электронной почты, на которые можно угадать. У большинства крупных компаний есть стандартные шаблоны адресов электронной почты. Вот самые распространенные из них:

Нам нужно выяснить, кто из них настоящий Билл Гейтс. Давайте отправим им электронное письмо, чтобы узнать. Нет!

Это именно то, что мы собираемся делать. Напишите им всем по электронной почте. Нет!

Я имею в виду, что мы притворимся, что отправим им всем электронное письмо, - тогда не надо!

Когда вы просите почтовый сервер отправить за вас электронное письмо, почтовый сервер сообщит вам, правильный адрес электронной почты получателя или нет. Как только это произойдет, вы кладете трубку.

Грубый, не правда ли ?! Представьте, что с вами так обращаются. Если почтовые серверы обнаружат, что вы пытаетесь ими воспользоваться, они перестанут с вами разговаривать. И даже скажите другим почтовым серверам, чтобы они не разговаривали с вами. Почтовые серверы обычно тесно связаны с себе подобными.

По сути, это было то, как вы можете использовать TELNET для угадывания адресов электронной почты. TELNET - это способ взаимодействия со службами, вроде телефона. Вы звоните кому-нибудь; если они там, они берут трубку и отвечают. Если они не хотят отвечать, они игнорируют ваш звонок. Если они подберутся, вы можете начать с ними общаться. Либо попросите их что-то сделать, либо попросите информацию. Но нужно говорить на том языке, который они понимают. В противном случае они не смогут ответить. Почтовые серверы понимают, среди прочего, SMTP, который представляет собой протокол для отправки и получения электронных писем через почтовый сервер. SMTP-соединения обычно выполняются через порт 25. Порт подобен добавочному номеру телефона.

Теперь нам нужно подключиться к почтовому серверу Microsoft с помощью 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, Яндекс и др.

Так как же узнать почтовый сервер Microsoft? Это просто. Microsoft, как и любой другой веб-сайт, делает это общедоступным. У каждого веб-сайта есть собственная адресная книга, называемая DNS, в которой перечислены соответствующие адреса и порты. Их почтовые серверы также перечислены в DNS.

Чтобы найти его, нам понадобится другая команда под названием DIG. Думайте об этой команде как о поиске в адресной книге. В Windows DIG не устанавливается по умолчанию, вы можете установить его самостоятельно или использовать команду NSLOOKUP.

Почтовые серверы делятся на записи, называемые записями MX. MX расшифровывается как Mail Exchanger. Итак, давайте посмотрим, как мы можем использовать команды DIG и NSLOOKUP для поиска записей MX Microsoft и, следовательно, почтового сервера.

Синтаксис 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#53
Non-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]>
250 2.1.0 Sender OK

Отправитель в порядке. Видите, он не знает. Теперь мы можем, наконец, начать гадать ...

Вот синтаксис для описания адреса получателя:

RCPT TO: <EMAIL@DOMAIN>

Мы проверим множество адресов на основе списка наиболее распространенных шаблонов электронной почты (приведенного выше).

RCPT TO: <[email protected]>
550 5.4.1 [[email protected]]: Recipient address rejected: Access denied [BL2NAM06FT016.Eop-nam06.prod.protection.outlook.com]

Адрес получателя отклонен. Похоже, это не адрес электронной почты Билла Гейтса. Давай попробуем еще ...

RCPT TO: <[email protected]>
550 5.4.1 [[email protected]]: Recipient address rejected: Access denied [DM3NAM06FT009.Eop-nam06.prod.protection.outlook.com]
RCPT TO: <[email protected]>
550 5.4.1 [[email protected]]: Recipient address rejected: Access denied [DM3NAM06FT009.Eop-nam06.prod.protection.outlook.com]
RCPT TO: <[email protected]>
550 5.4.1 [[email protected]]: Recipient address rejected: Access denied [DM3NAM06FT009.Eop-nam06.prod.protection.outlook.com]
RCPT TO: <[email protected]>
550 5.4.1 [[email protected]]: Recipient address rejected: Access denied [DM3NAM06FT009.Eop-nam06.prod.protection.outlook.com]
RCPT TO: <[email protected]>
250 2.1.5 Recipient OK

Это Бинго! Мы нашли адрес электронной почты Билла Гейтса в Microsoft: [email protected].

Теперь вы можете узнать чей-либо адрес электронной почты, а также воспользоваться основными службами поиска электронной почты. Но этот процесс, как вы видели, немного сложен. Много набора текста и много ожидания между ними.

Так что ждите следующего поста, в котором я объясню, как можно полностью автоматизировать процесс (включая доступ к полному коду).

Затем в посте после этого я опишу, что нужно, чтобы масштабировать сервис, чтобы справиться с тысячами предположений по электронной почте, и с какими проблемами вы столкнетесь на этом пути.

Отказ от ответственности: мнения, выраженные в этой статье, являются моими собственными. Мне никто не платит за написание этой статьи. Насколько мне известно, я никоим образом не связан или не конкурирую с какими-либо услугами, товарными знаками или компаниями, упомянутыми в статье.