VYSOKÉ UČENIE TECHNICKÉ V BRNE. POP3 klient

Podobné dokumenty
Tue Oct 3 22:05:51 CEST Začiatky s jazykom C 2.1 Štruktúra programu Štruktúra programu by sa dala jednoducho popísať nasledovnými časťami, kto

Prístup a Nastavenie pre KOMPAKT HOSTING

Pravidlá bezpečnosti pre majiteľov certifikátov certifikačnej autority DÔVERA zdravotná poisťovňa, a. s. Verzia 1.1 Platí od

PowerPoint Presentation

PowerPoint Presentation

eKasa

Manuál pre nastavenie tlače z VRP elio m500 Elio m500 Manuál pre nastavenie tlače -1-

CitiManager - Migration Quick Reference Guide for Cardholders_Slovak_fin

Pracovný postup pre vypĺňanie údajov elektronického formulára IŠIS pre spravodajskú jednotku 1

Detail správy a súvisiace prvky Dátum zverejnenia: Verzia: 5 Dátum aktualizácie: Detail správy a súvisiace prvky UPOZORNENIE

0022-vub-mobilne-tokeny-200x200-v03.indd

Manuál pre nastavenie tlače z VRP Bluetooth, USB tlačiarne Bluetooth, USB tlačiarne Manuál pre nastavenie tlače -1-

Používateľská príručka Obsah Používateľská príručka... 1 Administrácia servera... 2 FTP... 2 Remote Desktop... 3 Administrácia databáze:... 3 Spusteni

Pravidelné úlohy verzia ku dňu SEAL IT Services, s.r.o. Kontakt: SEAL IT Services, s.r.o., Topoľová 4, Bratislava 1, tel.:

SAEAUT SNMP OPC Server

Manuál uchádzača ezakazky Manuál uchádzača Dátum vytvorenia dokumentu: Verzia: Autori slovenský Matej Marcin, Stanislava Marošiová Te

ŤAHÁK PRAKTICKÁ ČASŤ Prerekvizity: LINUX: WINDOWS: Inštalácia Oracle VirtualBoxu a vytvorenie virtuálneho stroja /návod nižšie/ Operačný system Window

Návod na obsluhu CompactIO 1

Microsoft Word Nextra_ADSLink.doc

Microsoft Word - prirucka_katedry_nova

Centrum vedecko-technických informácií, Odbor pre hodnotenie vedy, Oddelenie pre hodnotenie publikačnej činnosti Vyhľadávanie a práca so záznamami - C

PowerPoint Presentation

Agenda záverečnej práce pedagóg Celá agenda týkajúca sa záverečnej práce je dostupná v obrazovke Záverečná práca (menu Agenda pedagóga -> Záverečné pr

Prezentácia programu PowerPoint

SK_mTransfer_Okamzita_notifikacia_ indd

Microsoft PowerPoint - CONNECT_R&A_76_sk

2

Projekty bilaterálnej spolupráce PRÍLOHA 5 MANUÁL K ELEKTRONICKÉMU SYSTÉMU PREDKLADANIA ŽIADOSTÍ NA RIEŠENIE PROJEKTOV Obsah 1 ÚVOD Konvencie

Používateľská príručka POUŽÍVATEĽSKÁ PRÍRUČKA Generátor XML dávok pre Informačný systém kontrolných známok z MS Excel šablóny Dátum: Verzia

Finančné riaditeľstvo Slovenskej republiky 12/ORP/2019/IM Postup pre overenie pravosti pokladničného dokladu Informácia je určená pre subjekty (zákazn

PowerPoint Presentation

Zadanie zákazky podľa 117 zákona č. 343/2015 Z. z. o verejnom obstarávaní Identifikačné údaje 1 Verejný obstarávateľ Slovak Business Agency Karadžičov

Microsoft Word - Novinky_2012_2.doc

eKasa

sprievodca-priestor.pdf

Slovenská technická univerzita v Bratislave Fakulta informatiky a informačných technológií Ilkovičova 2, , Bratislava 4 Internet vecí v našich ž

Automatizovaná údržba PC cez C-Monitor

Snímka 1

IT NEWS

Registrácia používateľa Portálu finančnej správy -1/18-

Manuál DODÁVATEĽA Užívateľská príručka pre záujemcov/uchádzačov v systéme ELENA

Obsah: 1. Registrácia do aplikácie Živá lúka online 2. Prihlásenie sa do aplikácie Živá lúka online 3. Všeobecné poznámky k mapovému podkladu 5. Rola:

Úroveň strojového kódu procesor Intel Pentium Pamäťový operand Adresovanie pamäte Priama nepriama a indexovaná adresa Práca s jednorozmerným poľom Pra

Manual k podavaniu ziadosti

fm 2012 a predajňa.doc

Manuál pre nastavenie tlače z VRP tlačiarní bluetooth Bluetooth Manuál pre nastavenie tlače z VRP tlačiarní -1-

16_MX-FR45U_SK.book

Obsah Pokyny pre ovládanie pomocou smartfónu... 3 Stiahnutie a inštalácia aplikácie... 3 Konfigurácia Originálna konfigurácia Postup k

Slovenská akadémia vied PRAVIDLÁ POUŽÍVANIA ELEKTRONICKEJ POŠTY V SLOVENSKEJ AKADÉMII VIED 2019

Návod na obsluhu FiskalPRO Mobile

Rýchly štart pre Powerline extra zásuvka

2

337_2004_od_1_1_2012

(Microsoft Word - Registr\341cia \372\350tu Hik-Connect.docx)

Import absencí z ASC

C-Monitor WIN klient pre verziu 2.8

Pripojenie sa na počítač a ovládanie vzdialenej obrazovky cez CM Remote

Finančné riaditeľstvo Slovenskej republiky Testovacie scenáre

aplikácia do mobilého telefónu na stiahnutie digitálneho tachografu

Ako si mám nainštalovať nový upgrade z Internetu?

Finančné riaditeľstvo Slovenskej republiky 9/ORP/2019/IM Stiahnutie identifikačných a autentifikačných údajov pri ORP - rola Administrátor/Technik Inf

Manual k podavaniu ziadosti

Komplexný informa ný a monitorovací systém Monitorovanie biotopov a druhov európskeho významu Používate ská dokumentácia KIMS modul Mobilná aplikácia

Microsoft Word - MFJ51602SK.doc

Elektronické služby spoločných modulov ÚPVS a prístupových komponentov

DCI

Návod na vytvorenie kvalifikovaného elektronického podpisu prostredníctvom občianskeho preukazu s čipom Dátum zverejnenia: Verzia: 1 Dátu

(Microsoft Word - Tuzemsk\341 a zahrani\350n\341 jazda \232tandardn\341 jazda.docx)

uzatvorená medzi zmluvnými stranami: Príloha č. 1 Zmluvy o Elektronickej službe Business24 Špecifikácia Elektronickej služby Business24 Slovenská spor

iot business hub whitepaper isdd_em_New.pdf

PowerPoint-Präsentation

Informačný systém pre externú časť a písomnú formu internej časti maturitnej skúšky Informačný systém pre EČ a PFIČ maturitnej skúšky Užívateľská prír

PL_FMS5713_004_

uzatvorená medzi zmluvnými stranami: Príloha č. 1 Zmluvy o Elektronickej službe Business24 Špecifikácia Elektronickej služby Business24 Slovenská spor

NWA-3166 Dvojpásmový bezdrôtový prístupový bod N triedy business Východiskové nastavenie: IP adresa: Heslo: 1234 Príručka pre rýchl

DAHUA WEBOVÉ ROZHRANIE 1

Pomôcka Setup Používateľská príručka

SK_mTransfer_Technicka_dokumentacia_ indd

Microsoft PowerPoint - OOP_prednaska_10.pptx

SLOVENSKÁ TECHNICKÁ UNIVERZITA V BRATISLAVE Fakulta informatiky a informačných technológií STU Ústav počítačových systémov a sietí ZADANIE SEMESTRÁLNE

Microsoft Word - Usmernenie k skúške o OS.rtf

Uchádzač o štúdium potvrdenie el. návratky. Prihlasovacie údaje do el. návratky na stránke vidíte na stránke

Ethernetový komunikačný modul ETHM-1 Plus Verzia firmvéru 2.05 ethm1_plus_sk 07/18 SATEL sp. z o.o. ul. Budowlanych Gdańsk POĽSKO tel. +48/5

Microsoft Word - o09_Používateľská príručka ku kontrole kupónov na webe_v4.doc

Podvojné účtovníctvo, fakturácia a sklad ekasa: štandardný predaj priamo z programu Pri predaji s priamym napojením na softvér je potrebné mať online

Finančné riaditeľstvo Slovenskej republiky 10/ORP/2019/IM Stiahnutie identifikačných a autentifikačných údajov pri ORP - rola Administrátor Informácia

DJ 1T ID ver 1.2 Návod na použitie Návod na použitie Dverná jednotka DJ 1T ID Strana 1

Integrácia Cisco Trustsec do BYOD prostredia (praktické ukážky) Marek Kľoc CCIE #21288 Pavol Frič CCNP Security

Microsoft Word - osobnyudaj.sk_web_povinné_informovanie_kont.formulár def

RAZER ABYSSUS ESSENTIAL Slovenská príručka Táto príručka slúži len ako návod základné vedomosti s hlavných funkcií a nastavení zariadenia. Podrobnejši

Cisco Multicast VLAN Registration (MVR) pro efektivní distribuci skupinového provozu na kruhové topologii Bc. Jozef Záhon (ZAH0022), Bc. Martin Chrenš

Riaditeľ Súkromnej obchodnej akadémie v správe Akadémie vzdelávania, Jarná 13, Žilina v súlade s § 4 ods

Prepis:

VYSOKÉ UČENIE TECHNICKÉ V BRNE Fakulta informačných technológií Sieťové aplikácie a správa sietí 2017/2018 POP3 klient Daniel Florek (xflore02) 8.11.2017

1 Úvod Úlohou projektu, ktorý popisuje táto dokumentácia bolo vytvoriť POP3 klient aplikáciu, ktorá dokáže stiahnúť všetky emaily, prípadne iba nové emaily zo serveru šifrovanou aj nešifrovanou formou vo formáte IMF. Užívateľovi musí byť takisto poskytnutá možnosť overovať server vlastnými certifikátmi. Aplikácia musí byť takisto schopná správy zo serveru vymazať. Referenčný stroj na testovanie a preklad aplikácie je server merlin.fit.vutbr.cz 2 Úvod do problematiky Skôr, ako popíšem svoju variantu riešenia, vysvetlím niekoľko termínov, ktoré je nutné poznať pre pochopenie danej problematiky. 2.1 POP POST OFFICE PROTOCOL POP je internetový protokol, ktorý sa využíva na prijímanie emailov prostredníctvom TCP/IP protokolu. Všeobecná myšlienka POP je pripojiť sa na server, stiahnúť emaily k používateľovi, a potom ich následne zo serveru vymazať, ale väčšina mail klientov má možnosť nechať správy na serveri. POP má nezabezpečenú aj zabezpečenú variantu komunikácie pomocou SSL/TLS. Pre nezabezpečenú komunikáciu server načúva na porte 110, pre zabezpečenú na porte 995. Niektoré servery podporujú nadviazať zabezpečenú komunikáciu na porte 110 až po nadviazaní nezabezpečeného spojenia pomocou prijatia príkazu STLS. Posledná verzia protokolu je POP3. 2.2 POP3 POP3 je najaktuálnejšia verzia POP protokolu. POP3 server podľa RFC normy musí mať implementované určité príkazy a niekoľko príkazov je voliteľných a nie každý server ich musí podporovať. Pre riešenie tohto projektu nás budú zaujímať iba povinné príkazy ktoré sú: STAT Vypíše počet emailov na serveri a ich celkovú veľkosť v bajtoch LIST Server odošle zoznam všetkých emailov a ich veľkostí DELE Server vymaže danú správu po tom čo sa ukončí spojenie NOOP Server odošle kladnú správu aby sa zistilo, či je v poriadku RSET Odznačí správy, ktoré boli označené na zmazanie QUIT Ukončí spojenie. Forma odpovedí serveru začína vždy +OK v prípade úspechu alebo -ERR v prípade neúspechu a ďalej nasleduje odpoveď na príkaz, prípadne chybová hláška v prípade neúspechu. Odpovede serveru sú ukončené pomocou CRLF (\r\n). Viacriadkové odpovede serveru sú ukončené pomocou.crlf (.\r\n). 2

2.3 TLS/SSL TLS (Transport Layer Security) a jeho predchodca SSL (Secure Sockets Layer) sú protokoly, ktoré slúžia na šifrovanie dát. Zabezpečujú bezpečnú komunikáciu cez internet. Zabezpečujú hlavne prehliadanie webu, prácu s emailami, výmeny správ a iné prenosy. Medzi TLS a SSL sú drobné rozdiely, ale protokol je prakticky ten istý. Protokoly zabezpečujú komunikáciu voči odpočúvaniu. Zväčša býva autorizovaný iba server a klient ostáva neautorizovaný a klient si overuje identitu servera. Zabezpečené spojenie nastáva takzvaným handshake, kedy sa server autorizuje užívateľovi svojím certifikátom. Takisto mu odošle svoj verejný kľúč ktorým klient zašifruje nejaký spoločný kľúč ktorým budú komunikáciu šifrovať a dešifrovať. Zašifrovaný kľúč následne klient odošle serveru a ten si ho dešifruje súkromným kľúčom (asymetrické šifrovanie). Ďalej sa už komunikácia šifruje kľúčom, ktorý vygeneroval klient symetricky. 3 Vlastné riešenie 3.1 Spustenie programu popcl <server> [-p <port>] [-T -S [-c <certfile>] [-C <certaddr>]] [-d] [-n] -a <auth_file> -o <out_dir> Povinné argumenty programu sú: Server na ktorý sa pripájame. Vo forme mena, IPv4 aj IPv6 adresy. -a Autentizačný súbor Súbor obsahujúci prihlasovacie údaje na daný server. -o Output priečinok Priečinok, kde sa uložia všetky prijaté emaily. Voliteľné argumenty sú: -T Zapína šifrovanú komunikáciu od začiatku, v prípade, že nie je nastavený prepínač pre nastavenie portu, tak sa implicitne nastaví port 995 na ktorom pop3s za normálnych prípadov funguje. -S Zapína nešifrovanú komunikáciu, v prípade nenastaveného portu na porte 110 a po prijatí welcome správy od serveru pomocou STLS príkazu zapína šifrovanú komunikáciu. -c certfile v prípade prepínačov T alebo S môžeme špecifikovať súbor, ktorým budeme overovať certifikát, ktorý nám odošle server. -C certaddr v prípade prepínačov T alebo S môžeme špecifikovať adresár s certifikátmi, ktorými budeme overovať certifikát, ktorý nám odošle server. -p port týmto prepínačom môžeme špecifikovať vlastný port na ktorý sa chceme pripojiť. -d prepínač, ktorý definuje, že sa majú vymazať správy. V mojej variante riešenia mažem správy ktoré reálne prijímam a zapisujem do output directory, takže v prípade kombinácie s prepínačom n mažem iba nové správy. 3

-n prepínač, ktorý definuje, že sa majú prijať len nové správy. V mojej variante riešenia prijímam tie správy, ktoré náš klient pre daného používateľa ešte neprijal. V prípade použití prepínačov pre šifrovanú komunikáciu T a S a nešpecifikovaní žiadnych certifikátov sa musí použiť predvolený systémový adresár s certifikátmi. V mojej variante riešenia takéto správanie nastáva aj v prípade, že používateľ špecifikuje do certfile alebo certaddr prípadne do oboch naraz prázdny reťazec. 3.2 Prijímanie Argumentov Prijímanie argumentov je implementované v module arguments.h. Stará sa o ne funkcia getarguments(int argc, char** argv), ktorá berie ako parametre počet argumentov programu a samotné argumenty programu. Spracovanie argumentov pozostáva z klasického cyklu obsahujúceho getopt a ukladanie argumentov do globálnych premenných, ktoré sú deklarované v module globvars.h. V prípade, že nie je zadaný port, tak je implicitne nastavený na 110. V prípade, že je zadaný T prepínač, ktorý povoľuje POP3s komunikáciu, tak sa port implicitne nastaví na 995. 3.3 Pripájanie na server Po tom, čo sa úspešne prijmú argumenty, tak sa zavolá funkcia int bindsocket(std::string server_hostname, int port_numer) v nej sa vykoná preklad adries a následne sa pokúsi vytvoriť socket a pripojiť sa s ním na adresu s daným portom. Keď sa program úspešne napojí k serveru, tak sa vykoná test, či sme zapli program s prepínačmi S alebo T, v tomto prípade sa vykoná prepojenie otvoreného socketu s SSL kontextom vo funkcií bindsslsocket(int client_socket, std::string certfile, std::string certaddr) v ktorej sa nastaví kontext šifrovanej komunikácie, nastaví sa do nej certifikát alebo zložka s certifikátmi, prípadne oboje. Potom sa vykoná SSL handshake a nakoniec sa overí certifikát serveru pomocou zadaného certifikátu prípadne priečinku certifikátov. Ako klientská metóda šifrovania sa použije TLSv1.2. V prípade prepínača S sa ešte pred prepojením SSL kontextu so socketom prijme program welcome hlášku od servera a následne sa odošle príkaz STLS, ktorý zapína šifrovanú komunikáciu. 3.4 Autentizácia užívateľa Keď sme sa úspešne pripojili na server, tak sa zavolá funkcia int authorize(int client_socket, std::string authfile) prebehne overenie prihlasovacích údajov, ktoré sa načítajú zo súboru zadaného ako argument funkciami getusername(std::string authfile) a getpassword(std::string authfile). Následne sa tieto údaje odošlú pomocou POP3 príkazov USER username a PASS password serveru funkciou bool sendcommand(std::string command) na prijímanie správ zo serveru sa používa funkcia std::string recieveresponse(). Ktorá prijíma znaky od serveru až po CRLF (\r\n). Následne sa správy od serveru kontrolujú 4

funkciou bool iserr(std::string response) ktorá kontroluje, či náhodou server neodpovedal chybovou hláškou. 3.5 Prijímanie emailov Po tom, čo sa užívateľ serveru predstaví, tak sa zavolá funkcia int getmails(outdir) v ktorej sa hneď na začiatku zavolá funkcia getids(), ktorá zo súboru pre daného používateľa vytiahne uchované ID správ, ktoré sa už prijali. Následne sa na server odošle príkaz STAT aby sa získala správa o počte správ na serveri. Následne funkcia int getamount(std::string response) ktorá vyparsuje počet správ na serveri. A zavolá sa funkcia int recieveallmessages(int mails, std::cout outdir). Ktorá sa precyklí cez všetky správy na serveri. Prijme celú správu, vytiahne z nej Message-ID, v prípade, že bol zadaný n prepínač, tak sa porovná, či sa také Message-ID ešte neprijalo, v prípade, že už také v zozname je, tak sa správa nezapisuje a prijme sa ďalšia správa na serveri. Message-ID sa zároveň používa ako názov pre emaily. V prípade, že je nastavený aj d argument, tak každá správa, ktorá sa zapíše do output priečinka sa vymaže. V prípade, že sa nezadal n argument, tak sa vymažú všetky správy, v prípade, že sa zadal, tak sa vymažú len nové správy. 3.6 Problémy pri implementácií a popis zvolených riešení -n prepínač prijíma nové správy na základe Message-ID. Ale pri testovaní sa prišlo na to, že niektoré správy Message-ID nemajú, takže tieto správy sa ukladajú ako non-id + poradové číslo. Tieto správy ale keďže nemajú Message-ID, tak ich nevieme ako evidovať, že sme ich už prijali, takže sa prijmú vždy, aj keď prijímame iba nové správy. To isté platí aj pri mazaní. Tieto správy sa zmažú vždy, aj keď by sme mali zmazať iba nové správy. Keď sa sťahujú emaily bez n prepínača, tak sa stiahnuté emaily nezaznamenávajú ako stiahnuté, takže pri použití n prepínača sa emaily stiahnú znovu, aj keď už boli stiahnuté bez n prepínača. -d prepínač maže správy, ktoré sa zapisujú na disk, takže v prípade bez prepínača n sa vymažú všetky správy. V prípade že bol zadaný prepínač n tak sa zmažú iba nové správy. Pri testovaní prijímania správ som narazil na problém, že pri niektorých správach minimálne na serveroch seznam.cz, centrum.cz, centrum.sk sa mi stávalo to, že server pri odosielaní správy deklaroval, že odošle určitý počet bajtov, ale po prijatí daného počtu bajtov socket nebol prázdny a ostalo tam pár bajtov navyše, takže som bol odkázaný ešte precykliť a konkatenovať k správe tie zvyšné bajty, až kým sa socket nevyprázdnil. Output priečinok musí existovať, v opačnom prípade sa nezapíše nič. V prípade použití prepínačov pre šifrovanú komunikáciu T a S a nešpecifikovaní žiadnych certifikátov sa musí použiť predvolený systémový adresár s certifikátmi. V mojej variante riešenia takéto správanie nastáva aj v prípade, že používateľ špecifikuje do certfile alebo certaddr prípadne do oboch naraz prázdny reťazec. 5

3.7 Návratové kódy 0 v prípade, že sa program ukončil správne. 1 v prípade, že program zlyhal vo fáze argumentov. -1 v prípade, že program zlyhal pri vytváraní socketu alebo pripájaní na server 2 v prípade, že program zlyhal pri vytváraní SSL spojenia alebo pri zlyhaní overovania certifikátu 3 v prípade, že program zlyhal pri welcome message serveru 4 v prípade, že program zlyhal vo fázi, keď by mal začať TLS spojenie (prípadne ho nepodporuje) 5 v prípade, že program zlyhal pri autentizácií používateľa 6 v prípade, že program zlyhal pri príkaze STAT (získavanie počtu správ na serveri) prípade je formát správy v zlom formáte. -3 v prípade, že program zlyhal pri prijímaní niektorej zo správ. Referencie [1] Post Office Protocol. Wikipedia: the free encyclopedia [online]. https://sk.wikipedia.org/wiki/post_office_protocol [2] RFC1939 POP3. IETF.org [online] https://tools.ietf.org/html/rfc1939 [3] Transport Layer Security. Wikipedia: the free encyclopedia [online]. https://sk.wikipedia.org/wiki/transport_layer_security 6