POP3 протокол или как работать с почтой при помощи пирочиного ножа!
Автор: parrot 29.10.2016 15:53
Я уверен, что каждый из вас пользуется почтой кто то - по делам, кто то ради переписки с родными и близким, а некоторые просто ради того что бы собирать спам :-D. В этой статье вы узнаете, как работать с почтой с помощью программы netcat. Спросите зачем? Ну как же))) а вдруг вы будете сидеть там где ничего нет только netcat и вы, а вы очень хочет узнать много ли спама вам пришло? вот там и пригодятся эти знания))) Ну еще вы узнаете лишний протокол и примитивы работы с одной из лучших утилит для тестирования и отладки сетевых приложений!!! И в будущем сможете создать свой POP3 клиент или даже сервер. А может быть пойдете по темной стороне силы и ваш троян будет отсылать нужные вам данные. Вообще как и где применить знания вы найдете сами когда придет время, а я прейду от вступления к статье …
Как написано в википедии(http://ru.wikipedia.org/wiki/POP3):
POP3 (англ. Post Office Protocol Version 3 — протокол почтового отделения, версия 3) используется почтовым клиентом для получения сообщений электронной почты с сервера. Обычно используется в паре с протоколом SMTP(возможно обсудим в следующей статье).
POP3 сервер на все команды клиента отвечает очень легко и просто либо –ERR либо +OK, в чем вы скоро убедитесь! После ответ –ERR||+OK обычно идет пояснение данного ответа!
Допустим у нас есть цель получить почту на rambler.ru. Мы тут же идем и узнаем что POP3 сервер это mail.rambler.ru и что подключение идет к стандартному 110 порту.
Не долго думая мы берем netcat легким движением пальцев рук запускаем его в нашем любимом cmd вот так:
C:\ >nc mail.rambler.ru 110
На что сервер вежливо и очень даже культурно отвечает нам:
+OK POP3 ready Этот e-mail адрес защищен от спам-ботов, для его просмотра у Вас должен быть включен Javascript >
Вот вить чудеса +OK и пояснение(которого может и не быть) обозначает что мы удачно соединились с POP3 сервером и может продолжать свое увлекательное путешествие в мир POP3 протокола.
Дальше, разумеется, нам нужна авторизация на сервере. Делается все очень легко(все как в жизни с начало больно потом даже приятно).Авторизация проходит по командам USER и PASS соответственно вводим свой логин и пароль:
user test
+OK
pass testpass
+OK 5 messages (1456 bytes)
Как вы можете видеть сервер сразу выдает количество писем(5 messages) и их суммарный размер в байтах (1456 bytes).
Какую первую команду нужно изучить после авторизации? Ну ни знаю как вы но для меня это всегда первой командой является help. Вводим HELP:
HELP
+OK Valid commands: QUIT, NOOP, STAT, LIST, UIDL, DELE, RSET, RETR, TOP, LAST, X
TND XMIT, HELP
И сразу видим перечень команд, которые поддерживает сервер.
QUIT - Если вы наберете эту команду, то сразу закроете соединение.
QUIT
+OK bye-bye
Сервер с вами попрощается и все на этом печальный конец(((
NOOP – Пустая команда. Думаю вам для практического применения она не понадобится, а вообще она используется для того что бы клиент сообщал серверу что он еще на связи при долгих простоях первого!
NOOP
+OK
STAT – Вообще команда в нашем случае выводит тоже самое что и сервер при подключение к нему, а именно количество сообщений и их суммарный размер.
STAT
+OK 5 1456
LIST - это первая команд(в нашем случае) которая принимает как параметр номер сообщения о котором вы хотите узнать более подробную информацию или если ввести ее без параметра выведется информация обо всех сообщениях в виде номера и размера сообщения.
LIST
+OK 5 messages (1456 bytes)
1 250
2 291
3 300
4 190
5 503
или
LIST 4
+OK 4 190
UIDL – Выводит идентификатор сообщения как параметр принимает номер сообщения. На мой взгляд совершенно ненужная команда((( хотя кто я такой что бы об этом говорить.
UIDL 2
+OK 2 45789342890445
DELE – делает вид что удаляет сообщение как параметр принимает номер удаляемого сообщения:-). Почему делает вид? Потому что до тех пор, пока вы не закроете сеанс связи с сервером командой QUIT, сообщения ни куда не удалятся, сервер их просто пометит как сообщения для удаления!
Восстановит удаленнее сообщения до выхода можно командой RSET она не принимает никаких параметров и создана для того что бы в пределах сессии восстанавливать случайно помеченные командой DELE сообщения.
DELE 4
+OK message 4 deleted
Как видите сервер ответил что сообщение удалилось удачно.
RSET
+OK maildrop has 5 messages (1456 bytes)
Как видите, сервер восстановил сообщение помеченное как удаленное.
Вы наверное уже устали и думаете, а как же получить сообщение или хотя бы его часть? Дык легко и просто!!!
RETR – команда принимает номер сообщения и выводит его на экран))) при наличии нужной кодировки и умелых рук вы даже сможете его прочитать :-D. Правда, в том что читать сообщения, таким образом, не совсем удобно, ну а что вы хотели? Если хотите удобства, скачайте нормальный почтовый клиент и выбросите этот netcat.
RETR
+OK 4 190
//тут выводится текст заголовок 4го сообщения
//а тут его содержание))) чаше всего аброй-кадаброй.
.//а тут точно как признак конца сообщения!
TOP – команда имеет куда более интересное предназначение хотя и схожее с RETR. Она выводить заголовок сообщения и указанное число строк из него. Для этого нам надо первым параметром указать номер сообщения, а вторым число строк из сообщения которое мы хотим увидеть.
TOP 4 5
//тут выводится текст заголовок 4го сообщения
//а тут 5 строк сообщения
Ну и для концовки скажу что сообщения первая буква у которых X экспериментальные().
Спросите, почему я не описал оставшиеся команды? Да потому что они присутствуют не везде и не всегда, а цель данной статьи было описание протокола. И если кто то захочет работать с дополнительными его возможностями всегда сможет обратиться в соответствующие RFC или к google.com.
Все описанное в статье было проверено на mail.ru(pop.list.ru:110) и на rambler.ru(mail.rambler.ru:110).