Python a kybernetická bezpečnosť – 15. časť

V minulej časti seriálu sme si ukázali ako možno zneužiť mechanizmus Distributed Computing Environment / Remote Procedure Call (DCE/RPC) a jeden z jeho transportných protokolov Server Message Block (SMB) na vykonanie príkazu, resp. kódu v rámci vzdialeného adresového priestoru, tzn. na vzdialenom počítači pripojenom do počítačovej sieti. Predstavili sme si knižnicu Pypsexec a uviedli sme si 4 podmienky jej použitia. DCE/RPC však nemusí využívať iba transportný protokol SMB, ale vie pracovať aj priamo cestou protokolov TCP/UDP (port 135). V takomto prípade nie je nutné splniť žiadnu zo spomínaných podmienok. Stačí nám poznať používateľské údaje bežného používateľa a mať „otvorený“ port 135, ba v niektorých prípadoch nie je potrebné ani to...

obr3obr2obr1

Python a kybernetická bezpečnosť – 14. časť

V minulej časti seriálu sme si ukázali ako možno veľmi užitočnú funkcionalitu zneužiť na nekalé účely. Dnes na túto tému nadviažeme a ukážeme si, ako možno zneužiť ďalšiu z užitočných funkcionalít a to konkrétne mechanizmus Distributed Computing Environment / Remote Procedure Call (DCE/RPC). DCE/RPC s výhodami využívajú najmä systémoví administrátori a to k vzdialenému prístupu na počítače v ich správe. V prípade potreby teda nemusia fyzicky prísť ku konkrétnym počítačom, ale z pohodlia vlastnej kancelárie ich dokážu spravovať s využitím funkcionality vzdialeného prístupu, resp. vzdialeného vykonania príkazov. DCE/RPC je okrem správy vzdialených počítačov použiteľný napr. na vykonanie časovo náročných úloh na výkonnejších počítačoch, na efektívnu distribúciu úloh, na vykonanie špecializovaných úloh na špecializovaných platformách… Ako obvykle budeme pracovať v rámci OS Linux s nainštalovanými virtuálnymi strojmi pričom napadneme OS Windows.

obr2obr1

Python a kybernetická bezpečnosť – 13. časť

Čím to je, že akonáhle niekto vymyslí niečo úžasné, takmer okamžite sa nájde niekto, kto to zneužije? Toto tvrdenie sa dá krásne aplikovať na systém ukladania prihlasovacích údajov, ktorý ponúkajú moderné internetové prehliadače. O čo ide? Určite ste sa už stretli s ponukou internetového prehliadača na uloženie prihlasovacieho mena a hesla počas prvého prihlasovania sa na niektorú z internetových stránok. Mnohí z nás túto ponuku využili a nemusia tak pri každom novom otvorení danej stránky zadávať svoje ťažko zapamätateľné údaje znovu a znovu. Systém ukladania prihlasovacích údajov je určite nápomocný, avšak predstavuje obrovské bezpečnostné riziko. V tejto časti seriálu si prakticky predvedieme jednu z možností ako možno uvedené údaje veľmi jednoducho a ľahko získať. Zameriame sa pritom na OS Windows a Google Chrome, avšak na podobnom princípe pracujú aj ostatné známe prehliadače.

obr2obr1

Python a kybernetická bezpečnosť – 12. časť

Dnešná časť seriálu bude nepriamym pokračovaním 10. časti, v rámci ktorej sme si popísali jednu z mnohých možností, resp. princípov, ako na cieľovom zariadení zachovať našu prítomnosť (maintain persistence). Zameriame sa pritom na metódu využitia prihlasovacích skriptov (Logon Scripts) so súčasným popisom možností skrytia programových súborov prostredníctvom tzv. New Technology File System (NTFS) Alternate Data Streams (ADSs).

obr2obr1

Python a kybernetická bezpečnosť – 11. časť

V dnešnej časti seriálu sa vrátime k téme získavania prihlasovacích údajov, naprogramujeme novú časť (stránku) vzorovej aplikácie a prakticky si predvedieme ďalší zo spôsobov útoku na cieľové zariadenie. Prihlásenie sa na cieľové zariadenie je jedným z najdôležitejších krokov potrebných pre následnú záškodnícku činnosť útočníka. Kompromitácia zariadenia je síce možná aj bez tohto kroku, avšak prihlásenie nám otvorí omnoho viac dverí a umožní nám vykonať omnoho viac aktivít. Práve preto je kvalita prihlasovacích údajov a takisto ich silná ochrana nesmierne dôležitá.

obr2obr1

Python a kybernetická bezpečnosť – 10. časť

V tomto článku budeme pokračovať v „dobíjaní“ cieľového zariadenia pričom si popíšeme jednu z mnohých možností, resp. princípov ako na tomto zariadení zachovať našu prítomnosť (maintain persistence). V predošlých častiach seriálu sme si popísali aké máme možnosti čo sa týka hľadania a pripojenia k počítačovým sieťami a následne ako sledovať prevádzku v rámci týchto sietí s cieľom získania základných informácií o zariadeniach, ktoré sú k nim pripojené. Ďalším krokom je pripojenie k vybranému zariadeniu a vykonanie požadovaných úloh. Tento krok nateraz preskočíme a zameriame sa na následný krok – tzv. zachovanie perzistencie. Budeme sa pritom venovať viac princípu, resp. postupu práce, ako samotnému programovaniu.

obr2obr1

Python a kybernetická bezpečnosť – 9. časť

V rámci tohto článku budeme pokračovať v rozvíjaní aplikácie Sieťový skener. Tentoraz sa zameriame na tzv. Domain Name System (DNS). Aplikáciu doplníme o jednoduchý DNS skener, prostredníctvom ktorého budeme môcť získavať informácie o úlohách, ktoré plní to ktoré sieťové zariadenie. Je totiž bežné, že prevádzkovatelia sieťových služieb nazývajú jednotlivé servre podľa účelu, na ktorý slúžia. To, či je v našom bezprostrednom okolí nainštalovaný nejaký DNS server, môžeme zistiť sledovaním prevádzky na všeobecne známom porte 53. DNS je ako kniha, ak ju vieme správne čítať, vieme z nej získať mnoho zaujímavých informácií.

obr2obr1

Python a kybernetická bezpečnosť – 8. časť

Najdôležitejším cieľom druhej verzie našej aplikácie je byť čo najmenej „hlučný“. V minulej časti seriálu sme si spomínali, že „hlučnosť“ je veľmi nebezpečná a môže nás a našu činnosť veľmi rýchlo prezradiť. Presne takto rozmýšľajú aj potencionálni útočníci a snažia sa využívať čo najtichšie spôsoby sliedenia. Namiesto aktívneho zasielania rámcov či celých paketov, budeme iba ticho načúvať, resp. monitorovať sieťovú prevádzku. Nevýhodou takéhoto postupu je to, že nami požadované informácie nezískame okamžite, ale musíme čakať a priebežne vyhodnocovať množstvo prijatých údajov. Faktom je, že útočníci sledujú sieťovú prevádzku veľmi dlhú dobu, dokonca aj niekoľko rokov. Zhromažďujú informácie a až keď ich majú dostatok, vykonajú komplexný útok.

obr3obr2obr1

Python a kybernetická bezpečnosť – 7. časť

Počnúc touto časťou seriálu začneme programovať aplikáciu, ktorá nám pomôže lepšie pochopiť niektoré procesy prebiehajúce v sieťovom prostredí. Zopakujeme si pritom viaceré poznatky získané z predošlých častí seriálu. Pripravíme základný kód, ktorý budeme v nasledujúcich častiach rozširovať a dopĺňať o novú funkcionalitu. Vychádzame zo stavu, kedy máme naše zariadenie pripojené k počítačovej sieti (tzn. máme pridelenú IP adresu). Budeme vykonávať činnosť, ktorú by s veľkou pravdepodobnosťou vykonával aj potenciálny útočník.

obr2obr1

Python a kybernetická bezpečnosť – 6. časť

Ak chceme ochraňovať naše systémy pred útočníkmi, musíme sa vžiť do ich pozície a rozmýšľať nad tým, čo a ako by sme urobili aby sme nepozorovane vykonali nekalú činnosť. Písali sme o tom, že ideálna možnosť je pripojiť sa k niektorej z bezdrôtových sietí nachádzajúcich sa v našom okolí. Je samozrejmé, že mnoho sietí je chránených šifrovaním a pripojiť sa k nim nebude ľahké. Ideálnou voľbou sú otvorené siete. V prípade zatvorených sietí sa môžeme pokúsiť prelomiť slabé kľúče (heslá), ktoré sú ich najčastejšou slabinou. V každom prípade je nevyhnutné vždy používať dobre zabezpečené zariadenie, ktoré neprezradí našu identitu a úmysly.

obr2obr1

Python a kybernetická bezpečnosť – 5. časť

V predošlých častiach seriálu sme si povedali a prakticky predviedli niektoré možnosti získavania informácií o počítačových sieťach nachádzajúcich sa v našom okolí. Skenovanie je jednou z prvých aktivít v rámci prípravy na možné útoky. Poskytuje nám obrovské množstvo informácií, niektoré menej podstatné, avšak niektoré veľmi dôležité, ba dokonca také, ktoré nám naše budúce obete ponúkajú nevedome a nechcene. Našim cieľom je nájsť takú bezdrôtovú sieť, ku ktorej by sme sa mohli pripojiť. V prípade otvorených, tzv. „Free WiFi“ sietí, resp. sietí chránených šifrovaním WEP/WPA, sme vyhrali hneď na začiatku a môžeme sa venovať ďalším aktivitám. V prípade sietí so šifrovaním WPA2, alebo najnovším WPA3, je to už zložitejšie. Čo ale znamenajú tieto skratky?

obr2obr1

Python a kybernetická bezpečnosť – 4. časť

Na konci predošlej časti seriálu sme si spomenuli jednu z mnohých aktívnych techník ovplyvnenia bezdrôtových sietí a síce vynútené odpojenie (deauthentication / disassociation) zariadení od prístupových bodov (AP – Access Point). Na to, aby sme mohli vynútené odpojenie prakticky realizovať, potrebujeme poznať fyzickú adresu konkrétneho AP (BSSID) a konkrétneho asociovaného zariadenia (Station MAC), ak teda nechceme zarušiť celú sieť broadcast vysielaním. Pretože týmito informáciami zatiaľ nedisponujeme, musíme našu aplikáciu doplniť o skener uvedených údajov, ktoré následne využijeme na tzv. WiFi Deauthentication (Deauth) Attack.

obr1

Python a kybernetická bezpečnosť – 3. časť

V tejto časti seriálu sa na chvíľku vrátime k teórii pričom si uvedieme niekoľko faktov, ktoré sa týkajú manažmentu bezdrôtového spojenia. Začneme tým, že bez prehnanej paranoje a bez glorifikácie konšpiračných teórií skonštatujeme, že ktokoľvek z nás, kto má práve pri sebe zapnutý bezdrôtový (cellular) telefón, resp. smartfón, alebo akékoľvek iné zariadenie podporujúce globálny systém mobilných komunikácií (GSM), alebo štandard 802.11, dobrovoľne, aj keď nevedome, oznamuje svetu svoje aktivity. Možno sa čudujete, prečo je to tak, kto to dovolil a prečo sa spomínaný únik informácií nedá nejako zakázať. Bohužiaľ tu nehovoríme o chybe technológií, ani o neochote na strane ľudí. Jednoducho je to cena, ktorú platíme za to, že chceme využívať služby založené na bezdrôtovom spojení.

obr2obr1

Python a kybernetická bezpečnosť – 2. časť

V tejto časti seriálu sa doslova bezhlavo vrhneme do neprebádaných vôd a hneď zostra začneme programovať. Pri plnom vedomí toho, že sme si zatiaľ takmer nič nevysvetlili, pripravíme prvú verziu vzorovej aplikácie, ktorú budeme v nasledujúcich častiach dopĺňať o novú funkcionalitu. Ako základ nám poslúži kód, ktorý sme si už raz predstavili, avšak nateraz použijeme iné výkonné príkazy. Čo sa týka teórie, tú si budeme predstavovať postupne s uvedením vzťahu k jednotlivým príkazom a postupom. Chápeme, že bez ďalšieho štúdia potrebných detailov budú viaceré veci nejasné, avšak našim cieľom je čo najrýchlejšie prezentovať praktické aplikácie bez zdĺhavého venovania sa teórii.

obr2obr1

Python a kybernetická bezpečnosť – 1. časť

S príchodom nového roku nasmerujeme náš seriál smerom k téme kybernetickej bezpečnosti (KB), ktorá je podmnožinou informačnej bezpečnosti (IB). Postupne si predstavíme základné možnosti a spôsoby využitia Pythonu v oblasti KB a takisto niekoľko jeho najzaujímavejších knižníc, ktoré dokážeme využiť na splnenie úloh spojených s KB. Táto časť bude úvodná, teoretická, zameraná na vysvetlenie základných pojmov. V ďalších častiach sa však preklopíme od teórie do praxe a ukážeme si viacero trikov ako využiť Python a jeho knižnice najskôr na pasívnu či aktívnu analýzu počítačových sietí a neskôr na ich ovplyvnenie. Tematika, ktorú budeme rozoberať, je určená začiatočníkom, avšak postupne sa budeme venovať aj sofistikovanejším postupom, z ktorých sa viaceré budú týkať nielen klientskych pracovných staníc, ale aj serverov.

obr3obr2obr1

Python 33
Python knižnice

Pamätám sa ako som pred viac ako 20-timi rokmi začínal s programovaním a mojou absolútnou túžbou bolo zobraziť pomocou Assembleru obyčajnú čiaru a neskôr rasterizovať trojuholník. V Pascale som sa snažil dopočítať k perspektívnemu 3D zobrazeniu niekoľkých čiar a neskôr v jazyku C riešil maticovú algebru. Moje strasti s ručným programovaním elementárnych prvkov vyriešila grafická knižnica OpenGL. Zistil som, že drvivá väčšina kódu, ktorú som sa snažil tak krvopotne vymyslieť, bola implementovaná v rámci uvedenej knižnice. Za tých 20 rokov sa svet programovania obrátil naruby a dovolím si konštatovať, že v dnešnej dobe neexistuje žiaden triviálny kód, ktorý by nebol implementovaný v rámci nejakej knižnice. Takisto si dovolím tvrdiť, že dnešný spôsob programovania je až neuveriteľne vzdialený od toho spred 20-tich rokov. Programátori už nevkladajú do kódu inštrukciu za inštrukciou, ale spájajú vopred pripravené bloky inštrukcií často s cieľom tzv. rýchleho vývoja aplikácií (Rapid Application Development).

Python 32
PyGLSL v2.1

V dnešnej časti seriálu o programovaní v jazyku Python sa posledný krát vrátime k aplikácii PyGLSL. Počas prípravy jej druhej verzie, v rámci ktorej sme na vykreslenie jednoduchej 3D scény využili funkcionalitu API Vulkan, sme sa zmienili, že definíciu vrcholov a farieb dvojice trojuholníkov, ktoré sú obsahom našej scény, sme zahrnuli do kódu shaderov. Naviac, v spomínanej verzii aplikácie sme na pokrytie trojuholníkov použili jednoduché farby bez aplikácie textúrovania. Externú definíciu vrcholov a textúrovanie je síce možné implementovať relatívne drobnými úpravami kódu, spomínaná funkcionalita je však neodmysliteľnou súčasťou moderných 3D aplikácií a práve preto ju nesmieme opomenúť.

obr2obr1

Python 31
Programujeme cestou Guacamole

V tejto časti seriálu si predstavíme jeden z možných scenárov praktického využitia Guacamole prostredia na vzdialené programovanie (nielen) v Pythone. Po tom ako sme heroicky nainštalovali všetky komponenty potrebné na sfunkčnenie celého prostredia si dnes ukážeme čo sme tým dosiahli a akým spôsobom dokážeme využiť ponúkané služby vo svoj prospech.

obr2obr1

Python 30
Vzdialené programovanie

V tejto časti seriálu sa na chvíľu odkloníme od témy Pythonu a to z dôvodu riešenia inej naliehavej veci. Každému z nás sa už v našom IT-programátorskom živote určite stalo, že sme sa dostali k zariadeniu, ktoré by sme vedeli využiť na rôzne IT aktivity vrátane programovania, avšak na ktorom sme nemali nainštalovaný potrebný softvér. Z dôvodu nechcenej modifikácie požičaného zariadenia sme doň neradi pridávali ďalší softvér, resp. nedisponovali sme potrebnými privilégiami. Východiskom sa môže zdať využitie služieb niektorej z aplikácií, ktoré ponúkajú vzdialený prístup k inému zariadeniu, na ktorom máme nainštalované všetko potrebné pre našu prácu. Problémom však je, že aj v tomto prípade musíme na požičané zariadenie nainštalovať nejakú klientskú aplikáciu. No a práve tento problém sa podarilo odstrániť spoločnosti Apache pomocou zaujímavého produktu Guacamole.

obr2obr1

Python 29
Vulkan prakticky

Túto časť seriálu venujeme extrémne stručnému popisu praktickej aplikácie, v rámci ktorej využijeme funkcionalitu API Vulkan na vykreslenie jednoduchej scény. Hneď v úvode zopakujeme, že jazyk Python z pohľadu výkonu v žiadnom prípade nesiaha na jednoznačného lídra, ktorým je jazyk C. Efektivitu programového kódu takisto nemožno prehnane vyzdvihnúť pretože Vulkan si v oboch prípadoch vyžaduje omnoho náročnejšiu a hlavne rozsahovo väčšiu prípravu kódu. Čo si však môžeme z tohto článku odniesť je poznanie, že Python je svojou flexibilitou skutočne bezhraničný a okrem ostatnej funkcionality dokáže bez problémov pracovať s modernými programovacími rozhraniami, medzi ktoré patrí aj API Vulkan.

obr2obr1

Python 28
Vulkan

Touto časťou seriálu budeme plynule pokračovať v popise grafických možností jazyka Python, tentoraz v spojitosti s API Vulkan. Hneď v úvode pripomenieme, že spájať Python s programovaním vysoko-výkonnej počítačovej grafiky nie je to pravé orechové. Napriek tomu stále existuje mnoho prípadov, kde toto spojenie vyniká a to najmä pre jeho vysokú efektívnosť. API Vulkan ako nástupca OpenGL síce omnoho plnohodnotnejšie využijeme v spojení s programovacím jazykom C a čo je najdôležitejšie, vôbec ho nemusíme preferovať pred starším OpenGL, avšak jeho znalosť nám určite rozšíri naše programátorské vedomosti a môže nás nasmerovať pri vývoji budúcich grafických aplikácií.

obr2obr1

Python 27
PyOpenGL

V roku 2011, konkrétne v aprílovom vydaní magazínu Infoware, sme publikovali tretiu časť seriálu Programujeme GPU, v rámci ktorej sme predstavili zdrojový kód aplikácie glsl v1.0. O tri roky neskôr, v januári 2014, sme publikovali prvú časť seriálu Programujeme pre Android, v rámci ktorej sme transformovali kód uvedenej aplikácie tak, aby bol spustiteľný na platforme Android. Po ôsmych rokoch sme sa rozhodli ten istý kód oprášiť a napísať ho v jazyku Python. Bez preháňania musíme konštatovať, že sme túto úlohu splnili bravúrne. V prvom rade k tomu prispela jednoduchosť, produktívnosť a efektivita jazyka Python, k čomu sa následne pridala nadčasovosť našich aplikácií. Tým chceme fakticky upozorniť na to, že v roku 2011 sme pripravili a prezentovali kód, ktorý je s minimálnymi úpravami použiteľný aj v roku 2022. Svojou štruktúrou a obsahom dodržuje štandardy, ktoré sú stále platné, a ktoré sú základom pre ďalší vývoj v danej oblasti.

obr2obr1

Python 26
PyCharm

Po tom ako sme si v úvodných častiach seriálu uviedli teoretické základy programovania v Pythone, sme neskôr pokračovali najmä v príprave rôznych webových aplikácií s použitím IDE (Integrated Development Environment) JupyterLab. Na úpravu drobných častí kódu sme občas použili vývojové prostredie IDLE, alebo jednoduchšie textové editory ako napr. UNIX vi, Kate, resp. GNU nano. Ako by to však vyzeralo, keby sme zabudli na IDE, pomocou ktorého by sme mohli písať klasické lokálne (newebové) aplikácie? Presne také IDE, na aké sme boli zvyknutí z dávnej minulosti keď sme začali písať naše prvé programy v jazyku Pascal, Basic, alebo C? Áno, podobné vývojové prostredia s plnohodnotným GUI (Graphical User Interface) rozhraním určené na vývoj (nie len) lokálnych aplikácií sú dostupné aj v prípade jazyka Python. A ako to už v dnešnej dobe býva, takých prostredí je hneď niekoľko.

obr3obr2obr1

Python 25
Django VI

V tejto časti seriálu sa rozlúčime s frameworkom Django a to detailnejším popisom tretej – poslednej verzie vzorovej aplikácie s názvom Spotreba energií. Nebudeme riešiť žiadne nové problémy. Našim cieľom bude zosumarizovať všetok doterajší kód a rozšíriť ho o aktivity, v rámci ktorých sa budeme venovať zápisu odpočtov spotreby elektriny a plynu. Najvýznamnejším rozšírením aplikácie je doplnenie grafických prehľadov priemernej dennej spotreby jednotlivých komodít.

obr2obr1

Python 24
Django V

V minulej časti seriálu sme si predstavili druhú verziu vzorovej aplikácie, v rámci ktorej sme začali využívať metódy tried Manager a QuerySet a to bez toho, aby sme si vysvetlili ich význam. Práve preto sa k nim dnes vrátime a predstavíme si detaily ich funkcionality. Pripomeňme, že Manager je rozhranie, pomocou ktorého sú výstupy otázok smerujúcich na databázu (dB Queries) odovzdávané modelom. Výstupy manažéra sú sadou objektov triedy QuerySet. Objekty nachádzajúce sa v sade QuerySet možno po ich vytvorení mnohými spôsobmi filtrovať, limitovať a agregovať čím získavame požadované – konkretizované výstupy.

obr2obr1

Python 23
Django IV

V dnešnej časti seriálu si predstavíme a detailne popíšeme algoritmy druhej verzie našej vzorovej Django aplikácie s názvom Spotreba energií v2.0. Do aplikácie doplníme všetky základné funkcie, ktorých existencia je nevyhnutná z dôvodu manažmentu záznamov nachádzajúcich sa v databázovej tabuľke. Okrem toho budeme dolaďovať grafický vzhľad aplikácie, riešiť jej odolnosť voči zadávaniu nekorektných vstupov a priebežne vykonávať jej testovanie.

obr3obr2obr1

Python 22
Django III

Posledné dve časti seriálu sme venovali teórii a informáciám, ktoré sa týkali tých najpodstatnejších detailov tvorby webových aplikácií s využitím frameworku Django. V tejto časti seriálu sa vrhneme na praktickú prípravu aplikácie a to riadne z ostra.

obr2obr1

Python 21
Django II

V tejto časti seriálu si uvedieme viacero veľmi dôležitých detailov, ktoré musíme poznať predtým, ako sa naplno pustíme do tvorby Django projektov. Ukážeme si ako sprístupníme správcovskú web stránku a v závere sa začneme venovať tzv. zobrazeniam (Views).

obr1

Python 20
Django I

Pri hľadaní témy na ďalšiu časť seriálu som mal v úmysle predstaviť možnosti Pythonu pri práci s databázami. Najdôležitejšou podmienkou bola vizuálna reprezentácia a správa údajov uložených v databáze. Okrem predstavenia vybranej databázy teda bolo potrebné vybrať nástroj, ktorý by vytvoril prezentačnú vrstvu. V minulosti sme si predstavili frameworky Flask a Dash. Tentoraz vystúpime omnoho vyššie a budeme sa venovať frameworku Django. Teoretické informácie, ktoré uvedieme vo veľmi skrátenej forme, pretavíme do aplikácie, ktorá bude určená na správu údajov uložených v databáze MySQL a to prostredníctvom interaktívnej webovej stránky generovanej nástrojmi Django.

obr2obr1

Python 19
Sliedič v.2

Dnešná časť seriálu bude priamym pokračovaním predošlej, v ktorej sme opísali funkcionalitu vzorovej aplikácie Sliedič v.1. Nadväznosť textového obsahu úzko súvisí s nadväznosťou programového kódu aplikácie. V podstate ide o rozšírenie jej prvej verzie o aktívnu časť. Tá bude realizovať tzv. poškodenie ARP záznamov. Ide o jeden zo základných spôsobov aktívneho sliedenia počítačových sietí.

obr2obr1

Python 18
Sliedič v.1

V minulých častiach seriálu sme sa naučili ako pracovať so sieťovým manipulátorom Scapy. Súčasne sme si ukázali ako používať framework Dash a vytvárať pomocou neho prezentačnú vrstvu našich webových aplikácií. Dnes tieto naše ťažko nadobudnuté skúsenosti naplno zužitkujeme. Vytvoríme rozsiahlejšiu aplikáciu, pomocou ktorej implementujeme sieťový sliedič (sniffer). V prvej verzii aplikácii nebudeme do siete nijako zasahovať, tzn. aplikácia bude pracovať v čisto pasívnom móde. Môžeme si ju teda dovoliť spustiť kdekoľvek bez strachu, že by sme tým porušili bezpečnostné pravidlá.

obr2obr1

Python 17
Skener dátovej siete II

Táto časť seriálu bude priamym pokračovaním predošlých dvoch článkov, v ktorých sme sa začali venovať skenom počítačových sietí. Dnes si dokončíme popis funkcií slúžiacich konkrétne na skenovanie portov. Hneď na to si popíšeme aplikáciu netmap, pomocou ktorej prakticky realizujeme jednotlivé skeny.

obr2obr1

Python 16
Skener dátovej siete

V tejto časti seriálu budeme pokračovať v skenovaní počítačovej siete pričom sa zameriame na skenovanie pripojených zariadení. Budeme pritom vychádzať z informácií, ktoré už poznáme. Doplníme ich o podrobnosti týkajúce sa zasielania sieťových paketov a prijímania odpovedí. Prezentačná vrstva bude rovnaká – Dash, avšak detailnejšie rozpracovaná a doplnená o nové prvky. V úvode musíme zdôrazniť, že sa ideme venovať získavaniu detailných informácií o našej počítačovej sieti. Táto aktivita je obvykle prípustná v našom domácom prostredí, resp. po predošlom povolení od správcu siete. Bez tohto povolenia skeny nikdy nespúšťajme!

obr3obr2obr1

Python 15
Scapy

V tejto časti seriálu využijeme nadobudnuté vedomosti týkajúce sa frameworku Dash na vytvorenie grafického rozhrania aplikácie, ktorej úlohou bude skenovať dostupné bezdrôtové siete. Využijeme pritom vizuálne komponenty knižnice Plotly (tabuľka, stĺpcový graf). Programovú logiku postavíme na funkciách paketového analyzátora Scapy (https://scapy.net). Skenovať budeme bezdrôtové siete čím neporušíme žiadne legislatívne pravidlá. Technickým prostriedkom bude obyčajný PC s bezdrôtovým sieťovým adaptérom.

obr2obr1

Python 14
Dash

Touto časťou seriálu síce nadviažeme na predošlé články, avšak diametrálne zmeníme prístup k tvorbe vzorovej aplikácie. Aj naďalej sa budeme venovať grafickej reprezentácii údajov prostredníctvom webových stránok. Budeme pracovať na štvrtej verzii aplikácie, ktorej úloha ostáva nezmenená a síce bude slúžiť na zobrazenie technických parametrov áut vo forme grafov. Framework Flask však vymeníme za jeho nadstavbu s názvom Dash čím kompletne zmeníme náš programátorský prístup k vývoju aplikácie.

obr2obr1

Python 13
Čítanie Excelových tabuliek

V tejto časti seriálu si predstavíme tretiu verziu aplikácie cars_v3, ktorej hlavným rozšírením oproti predchádzajúcej verzii, je schopnosť čítania a prezentácie údajov uložených vo formáte Microsoft Office Excel. Samotné čítanie z Excelových súborov je realizované triviálne pomocou funkcií knižnice Pandas. Problematickejšiu časť kódu tvorí konverzia získaných údajov do stavu, v ktorom ich chceme prezentovať na našej webovej stránke.

obr2obr1

Python 12
Grafická reprezentácia údajov

V tomto článku si predstavíme viacero možností grafickej reprezentácie údajov v rámci dynamicky vytváraných webových stránok. S využitím niekoľkých alternatív vytvoríme druhú verziu aplikácie, ktorej vlastnosti doplníme o možnosť vstupu údajov a ich grafickej vizualizácie.

obr4obr3obr2obr1

Python 11
Webový prihlasovací formulár II

V tomto článku dokončíme popis algoritmu webového prihlasovacieho formulára verzie 1.0. Zameriame sa pritom na viaceré dôležité detaily algoritmu. V úvode si uvedieme adresárovú štruktúru aplikácie s umiestnením jej jednotlivých súborov. Následne sa zameriame na popis významu a funkcionality jej konkrétnych Python modulov a HTML súborov.

obr2obr1

Python 10
Webový prihlasovací formulár I

V tejto a takisto aj v nasledujúcej časti seriálu sa budeme venovať prepojeniu Pythonu s webovým prostredím. Toto naše jasné smerovanie sleduje moderný trend tvorby programových diel, ktorého cieľom je sprístupniť aplikácie maximálnemu počtu používateľov so súčasným využitím výhod aplikačného prostredia typu klient-server. Jednou z najdôležitejších vlastností mnohých internetových stránok je autentifikácia, teda rozpoznanie – identifikácia konkrétneho používateľa. Často je to jeden z prvých krokov pri práci na danom portály a preto začneme práve touto témou. Vytvoríme jednoduchý webový prihlasovací formulár, ktorý okoreníme použitím tzv. jednorázového hesla (OTP – One Time Password).

obr2obr1

Python 9
Kópia snímok z IP kamery

Mnohí z nás majú doma či v práci nainštalované tzv. IP kamery najrôznejšieho typu a využitia. Môže ísť pritom o jednoduché-lacné kamery alebo o zložitý-drahý kamerový systém. V každom prípade pokiaľ hovoríme o technológii IP, takéto kamery pripájame k bežnej počítačovej sieti, prostredníctvom ktorej následne využívame poskytované služby. Najčastejšie ide o sledovanie obrazu snímaného kamerou. V prípade ak chceme obraz sledovať mimo lokálnej počítačovej siete, často sa stretávame s pojmami ako PortForwarding, Public IP, DDNS, IPsec, Onvif, rtsp... Veľkou otázkou je počítačová bezpečnosť. Ďalšou je napr. ukladanie záznamu v lokálnom (domácom) prostredí, ktoré môže byť pri incidente kompletne kompromitované vrátane zničenia záznamu.

obr2obr1

Python 8
Regulárne výrazy, PIP, JSON

Regulárne výrazy (Regular Expressions – RegEx) sú sekvencie znakov, ktoré tvoria tzv. vyhľadávací vzor (search pattern). PIP (Python Package Installer) je manažér balíčkov programovacieho jazyka Python. Na zdôraznenie faktu, že programovací jazyk Python je možné s výhodou využiť na prácu s databázami a ďalšími zdrojmi údajov, v krátkosti si predstavíme formát JSON (JavaScript Object Notation).

obr15obr14

Python 7
Výnimky, objektovo orientované programovanie

Interpreter Pythonu pri vzniku chyby, ktorá nastane počas vykonávania programu (runtime error), vytvorí objekt nazývaný výnimka (exception). So zväčšovaním sa programových balíkov a s tým súvisiacim nabaľovaním kódu, ktorý už nepripravoval jediný programátor, ale veľká skupina ľudí, začalo programovanie nadobúdať omnoho väčšie rozmery. Údaje a im prislúchajúce funkcie preto začali byť zoskupované do celkov – objektov s cieľom systematizácie práce a čo najjednoduchšej orientácie v rozsiahlom programovom kóde. Vzniklo tak objektovo orientované programovanie (OOP).

obr13

Python 6
Súbory, množiny a pevné množiny, rekurzia

V čase kedy pracujeme so spusteným programom (runtime) sú všetky naše údaje uložené v pamäti počítača (RAM), ktorej obsah je po ukončení vykonávania programu, resp. pri vypnutí počítača, zmazaný. V prípade ak chceme spracovávané údaje uchovať pre budúce využite, musíme ich uložiť do súborov (files). Jednou z najbežnejších funkcionalít, ktorá je implementovaná v mnohých programovacích jazykoch, je tzv. rekurzia. Ide o programovú konštrukciu, v rámci ktorej funkcia volá samú seba.

obr12obr11

Python 5
Typy, moduly, menné priestory

List je sekvenčné zoskupenie položiek (items), resp. elementov rôznych typov do jedného celku, ktorý ohraničujeme hranatými zátvorkami. Slovníky sú meniteľným dátovým typom, ktorý mapuje nemeniteľné kľúče (keys) k ľubovolným typom údajov. Modul je súbor, ktorý obsahuje definície a výkonné výrazy, ktoré môžeme využiť v rámci našich programov. Menné priestory (namespaces) sú kolekcie identifikátorov, ktoré patria konkrétnemu modulu, resp. funkcii.

obr10obr9

Python 4
Funkcie, reťazce, typy

Funkcia je pomenovaná sekvencia výrazov, ktoré tvoria jeden funkčný celok. Ich primárny význam je štrukturalizácia programov na menšie celky. Pomocou funkcií zjednodušujeme kód programov a to tým, že väčšie, často opakujúce sa sekvencie výrazov nahrádzame jednoduchým výrazom, resp. volaním funkcie.

priklad5priklad4

Python 3
Tok programu

Interpreter Pythonu vykonáva kód programu krok za krokom, resp. riadok za riadkom. Hovoríme pritom o tzv. toku vykonávania (flow of execution) programu, ktorý môže byť zmenený niekoľkými možnými spôsobmi. Všetky sú pritom založené na tzv. podmienenom vykonávaní (conditional execution). Pomocou podmienok dokážeme riadiť vykonávanie programu, resp. meniť jeho tok nami požadovaným smerom.

obr6obr5

Python 2
Programovanie programu

Programovaním vo vybratom programovacom jazyku rozumieme zápis výrazov v súlade s jasne definovanými pravidlami a stanovenou štruktúrou. Výrazy sa skladajú zo základných elementov (tokens), medzi ktoré patria čísla, slová, špeciálne znaky a operátory (symboly), výkonné prvky (statements) a kľúčové slová (keywords). Štruktúra programu definovaná programovacím jazykom stanovuje spôsob usporiadania výrazov. Preklad alebo interpretácia programu je vykonávaná pomocou tzv. syntaktickej analýzy (parsing), pri ktorej analyzátor (parser) sleduje stanovenú štruktúru, v rámci ktorej identifikuje jednotlivé výrazy a ich základné elementy.

  • Článok: cl2.doc
  • Publikované v PC Revue 11/2019
obr4obr3obr2obr1

Python 1
Úvod

Programovací jazyk Python (python.org) sa za posledný rok stal najdynamickejšie sa rozvíjajúcim jazykom a má viaceré predpoklady stať sa jedničkou v konkurencii omnoho silnejších hráčov. Seriál rozdelíme na dva väčšie celky. Prvý bude obsahovať všeobecné základy programovania v jazyku Python. V druhom sa budeme venovať rozšíreným možnostiam Pythona, resp. riešeniu konkrétnych problémov. Informácie o jazyku Python môžeme získať z extrémneho množstva informačných zdrojov – elektronických aj tlačených. V dnešnej dobe so všadeprítomným Internetom nie je najmenší problém nájsť zdroje, ktoré hĺbkovo popisujú nielen samotný jazyk, ale aj jeho špecifiká a rozdiely v porovnaní s inými programovacími jazykmi. Ambíciou tohto seriálu je informácie roztrúsené na rôznych miestach zosumarizovať a podať v ucelenej podobe.

  • Článok: cl1.doc
  • Publikované v PC Revue 10/2019