Autor: nitrexx | 7.10.2012 |
Ešte pred tým ako sa dostanete k zdrojovému kódu ukážem vám prácu s modulom ftplib. Je to jednoduchý príklad:
Ako server zadáme iba „server.com“ , python je natoľko inteligentný že si sám pridá ftp:\\. Login to je jasné, zadáme meno a heslo, retrlines sem zadávame ftp príkazy ako napr. LIST ktorý vypíše obsah . A už iba ukončíme spojenie.
Vlákna už nejdem zvlášť ukazovať. V našom programe využívame iba run() a start(). Ukážem iba základnú štruktúru:
Vlákno sa dá vytvoriť ešte iným spôsobom(zavolať metódu threading.Thread() a predať jej objekt) ale toto je najpoužívanejší.
Nešlo o to vytvoriť najlepší ftpda ale išlo o to ukázať ako sa tvorí takýto program, čo všetko k tomu potrebujeme a hlavne logiku ako to celé funguje. Snažil som sa to spraviť čo najjednoduchšie a najmenšie ale zase aby to splnilo svoj účel . Ďalej je už len na vás či si to rozšírte o nové funkcie.
Všetky časti kódu som prebral v serialy tomuto venovanému. Ešte som nevysvetlil funkciu zámkov. Zámky su implementované aby malo k premenným prístup stále len jedno vlákno. Lebo keby pristupovalo k premenným veľa vlákien naraz bol by z toho chaos, kedže jedno vlákno by ešte nemuselo ukončiť prácu s premennou a už by ku nej pristupovalo druhé.
Takto keď sa tam dostane vlákno najprv zamkne spraví si svoju prácu a keď to dokončí tak odomkne a v tom už k tomu pristujpuje druhé vlákno.
Ďalej funkcia vráti hodnoty podľa podmienky a vlákno sa pokúša pripojiť na ftp ak uspeje vytvorí súbor z názvom serveru , ktorý obsahuje úspešný login a heslo a ukončí celý proces. Ak prihlásanie neuspeje tak nedspraví nič a pokúša sa o to ďalšie vlákno.
Funkciu bigrange() som musel spraviť preto, lebo klasické range() nedokáže pracovať z veľkým rozsahom a pri teste z wordlistom obsahujúcim 14 000 000 slov, nebude pracovať a ohlási chybu.
A time.sleep() je dôležité kvôli správnemu výpisu, ale spomaluje chod programu, takže keď odkomentujeme vypísi a túto metodu tak sa beh programu zrýchli ale program nebude mať žiadny výstup(iba zápis do súboru so správnym prihlasením).