V tomto diely vás zoznámim s argumentmi príkazového riadku ktoré sú dobre známe Unixovým užívateľom kde za program vkladajú výrazy ako –t 85.12.25.45 –v –o output.txt a podobné .
My budeme používať na spúšťanie:
python ftpda.py -s server –l login.txt –p pass.txt
Úplne jednoduché, -s je server na ktorý sa skúšame pripájať, -l je textový dokument z loginmi a –p je textový dokument z heslami.
Argumenty príkazového riadku a výnimky
Najprv musíme naimportovať moduly sys a getopt a pridáme aj globálne premenné:
import getopt
import sys
app = "Ftp Dictionary Attack"
version = '1.0'
author = "Nitrexx"
Táto časť kódu prijíma argumenty:
print sys.argv[1:]#pre lepsie pochopenie, nepotrebny vypis
try:#prijime argumenty, ak su zle zadane skoci na except, vypise spravu a skonci
opts,args = getopt.getopt(sys.argv[1:],"h:s:l:p:",["help","server=","lfile=","pfile="])
print opts #pre lepsie pochopenie, nepotrebny vypis
except getopt.GetoptError:
print app, " ", "Created By: ",author, "Version: ", version
print 'ftpda.py -s <server> -l <login> -p <password>'
sys.exit(1)
V try: sú nadefinované 2 premenné prvá je options a druhá je argument. Teraz opts obsahuje napr.[(‘-s’, ‘server.com’)] a args zvyšok a ďalej je už nepotrebná. Metóda getopt() ako prvé prijíma z kadiaľ má prijímať argumenty, sys.argv[1:] určuje že ich má prijímať od prvej pozície keďže argv[0] je názov programu tak sa urobí výrez od prvej pozície. Ako druhé prijíma krátke názvy options a ako tretie prijíma dlhé názvy mali by sa končiť na „=“ ak prijímajú argument. A celé je to obalené do výnimiek, ak v try: nastane chyba skočí na except ,vypíše správu a skončí.
Už len jednoduchý cyklus for:
for opt, arg in opts:
if opt in ('-h', '--help'):
print app, " ", "Created By: ",author, "Version: ", version
print 'ftpda.py -s <server> -l <login> -p <password>'
sys.exit()
elif opt in ("-l", "--lfile"):
loginfile = arg
elif opt in ("-p", "--pfile"):
passwordfile = arg
elif opt in ("-s", "--server"):
server = arg
Cyklom for prejdeme hodnoty opts ktoré rozdelíme do dvoch premenných opt je vlastnosť a arg je hodnota. Čiže ak sme zadali všetky argumenty správne tak server ,loginfile a passwordfile obsahujú argumenty ktoré boli zadané za –s –l –p.
Ešte chcem podotknúť že sa dá pristupovať k vlastnostiam(options) aj dlhou formou tj. –server= nazov –lfile=nazov –pfile=nazov.
A už iba overíme správnosť zadaných súborov :
print '-' *15
print 'Login subor :' ,loginfile
print 'Password subor :', passwordfile
print '-' *15
try:
logins = open(loginfile,"r").readlines()
except(IOError):
print "{0} nebol najdeny".format(loginfile)
sys.exit(1)
try:
passwords = open(passwordfile, "r").readlines()
except(IOError):
print "{0} nebol najdeny".format(passwordfile)
sys.exit(1)
Pokúsi sa načítať riadky z loginfile do logins pri chybe vypíše reťazec a skončí a to isté spravý aj z heslami. A v ďalšom diely si ukážeme vlákna a zámky a prácu z FTP a potom už bude každý schopný napísať ftp dict. cracker.
Toto je výsledok tohto dielu :
import getopt
import sys
app = "Ftp Dictionary Attack"
version = '1.0'
author = "Nitrexx"
print sys.argv[1:]#pre lepsie pochopenie, nepotrebny vypis
try:#prijime argumenty, ak su zle zadane skoci na except, vypise spravu a skonci
opts,args = getopt.getopt(sys.argv[1:],"h:s:l:p:",["help","server=","lfile=","pfile="])
print opts #pre lepsie pochopenie, nepotrebny vypis
print args
except getopt.GetoptError:
print app, " ", "Created By: ",author, "Version: ", version
print 'ftpda.py -s <server> -l <login> -p <password>'
sys.exit(1)
for opt, arg in opts:
if opt in ('-h', '--help'):
print app, " ", "Created By: ",author, "Version: ", version
print 'ftpda.py -s <server> -l <login> -p <password>'
sys.exit()
elif opt in ("-l", "--lfile"):
loginfile = arg
elif opt in ("-p", "--pfile"):
passwordfile = arg
elif opt in ("-s", "--server"):
server = arg
print '-' *15
print 'Login subor :' ,loginfile
print 'Password subor :', passwordfile
print '-' *15
try:
logins = open(loginfile,"r").readlines()
except(IOError):
print "{0} nebol najdeny".format(loginfile)
sys.exit(1)
try:
passwords = open(passwordfile, "r").readlines()
except(IOError):
print "{0} nebol najdeny".format(passwordfile)
sys.exit(1)