Доста пълно описание на протокола POP3, Бележки на програмиста
Доста пълно описание на протокола POP3
Както обещах, продължавам да публикувам описания на различни мрежови протоколи. Тъй като последният път постът ми беше за SMTP протокола, логично е да продължа темата за имейла.
POP3 (Post Office Protocol - версия 3, третата версия на Post Office Protocol) е най-разпространеният протокол за получаване на имейл от пощенски сървър. IMAP също се използва за тези цели. IMAP има повече функции от POP3, но POP3 е много по-прост. За сравнение, POP3 е описан в RFC1939, който е само 20 страници, а RFC3501, който описва IMAP, се състои от цели 108 страници. Тази публикация ще се фокусира върху протокола POP3.
Както винаги, нека започнем, като стартираме помощната програма telnet и пример на живо:
Тоест клеймото за време се свързва с паролата и MD5 се изчислява от резултата. Предимството на този метод е, че дори когато използвате несигурна връзка, нападателят няма да може да прихване паролата. Той ще види само хеша, който ще бъде напълно безполезен, тъй като сървърът използва уникален timestamp за всяка нова връзка. За да разберете паролата, трябва да разбиете хеша с груба сила, което е практически безполезно за достатъчно силни пароли, които освен това се променят поне веднъж на половин година.
Недостатъкът на метода е, че от страната на сървъра паролите трябва да се съхраняват в ясен текст, в противен случай как да се провери коректността на хеша, прехвърлен от потребителя? Ако нападател получи достъп до базата данни, той ще може да открадне всички пароли.
Следователно повечето пощенски сървъри (аз лично проверих pop3.mail.ru:110 и pop.gmail.com:995/ssl/) не поддържат командата APOP и трябва да се удостоверявате с помощта на стандартна двойкаПарола за вход.
Очевидно е за предпочитане този метод да се използва заедно с криптирана връзка, отколкото командата APOP. Ако удостоверяването е неуспешно, ще получим съобщение като
И така, удостоверяването е преминато, сега можете да изпълните няколко команди. Нека започнем с няколко доста безполезни команди:
Командата HELP ви позволява да получите списък с команди, поддържани от сървъра. В този пример командите UIDL, XTND и XMIT са разширения на POP3 протокол и не се изисква сървърът да ги поддържа. Командата UIDL ви позволява да получите уникални идентификатори на съобщения (вижте описанието на командата LIST по-долу):
Не знам за какво са XTND и XMIT и е мързеливо да го разбера :) Желаещите могат да потърсят отговора в Google.
Командата NOOP означава "не правете нищо". Само една употреба идва на ум - да изпълнява командата на всеки 15 секунди, за да уведоми сървъра, че клиентът не е увиснал.
Командата LAST е остаряла и не трябва да се използва. Някога се смяташе, че имейл клиентът трябва да прибира съобщения едно по едно. Командата LAST беше използвана за получаване на идентификатора на последното получено съобщение. В момента се поддържа от някои сървъри единствено за съвместимост с по-стари имейл клиенти.
Сега нека да преминем към по-полезни команди:
STAT +OK 5 868540 LIST +OK 5 съобщения 1 275368 2 11196 3 153304 4 275367 5 153305 . СПИСЪК 2 +OK 2 11196 TOP 2 0 +OK съобщение следва Път за връщане: X-Blacklisted-By: cbl.abuseat.org От: "=?koi8-r?B?48XO1NIg7cnH0sHDyck=?=" До: [email protected] Тема : =?ko i8-r?B?SGVsbG8=?= Дата: Thu, 17 Dec 2009 18:18:12 +0300 MIME-версия: 1.0 Content-Type: multipart/related; type="multipart/alternative"; boundary="----=_NextPart_000_003C_01CA7F45.01CA7F45" X-Приоритет: 3 X-MSMail-Приоритет: Нормално X-Mailer: Microsoft Outlook Express 6.00.3790.3959 X-MimeOLE: Произведено от Microsoft MimeOLE V6.00.3790 .4325 Получено-SPF: няма X-спам-оценка: 83.69
. DELE 2 +OK отбелязани като изтрити
Командата STAT ви позволява да определите броя на съобщенията в пощенската кутия (5) и общия им размер (868 540 байта).
Командата LIST ни показва списък с идентификатори на съобщения и техния размер в байтове. Списъкът завършва с точка. Като аргумент на тази команда можете да подадете идентификатора на съобщението, след което в отговор ще получим размера само на това съобщение.
Командата TOP ви позволява да получите заглавката на съобщението (първият аргумент на командата е идентификаторът на съобщението) и първите N реда от тялото на съобщението (вторият аргумент на командата). В този пример посочих N=0, защото исках да видя само заглавието на съобщението. Може и току-що да сте дали само един аргумент. Отговорът на сървъра също завършва с точка. Командата TOP често се използва от имейл клиенти за определяне на подателя и темата на съобщение, без да се налага да изтегляте целия имейл. Това спестява време и трафик за потребителя.
Очевидно тук имаме работа със спам (вижте имейла на подателя, X-Blacklisted-By и X-Spam-Rating), така че можете спокойно да изтриете съобщението, без дори да го изтегляте изцяло. За това се използва командата DELE. Съобщението ще бъде маркирано за изтриване, но ще бъде изтрито едва след като затворим връзката.
Можете да отмените изтриването на всички маркирани от нас съобщения с командата RSET. Можете да получите цялото съобщение с помощта на командата RETR. Както при TOP, краят на съобщението се обозначава с точка. Няма да давам примери за тези команди, тъй като тук всичко е доста очевидно.
отКогато сте готови, можете да кажете сбогом на сървъра и да затворите връзката: