2014-03-07 5 views
0

Im пытается реализовать опцию --verbose в моем скрипте. Идея состоит в том, чтобы включить дополнительную печать ошибок и т. Д. Для отладки, но по какой-то причине она, похоже, не работает. Ive попробовал несколько вариантов заявления if verbose, но без радости. Я надеюсь, кто-то может указать мне в правильном направлении?Обработка ошибок с подробным результатом

CLI Пример

./attack2.py -f wordfile.txt -d google.com --verbose 1

CLI ВЫХОД

[email protected]:~$ ./attack2.py -f wordfile.txt -d google.com --verbose 1 
173.194.34.149 
173.194.34.130 
[email protected]:~$ 

ARG ПЕЧАТЬ

{'--domain': 'google.com', 
'--file': 'wordfile.txt', 
'--help': False, 
'--thread': False, 
'--verbose': True, 
'10': False, 
'<1>': '1'} 

КОД

#!/usr/bin/python 

""" 
Description: 

Basic Domain bruteforcer 

Usage: 
    attack2.py (-f <file>) (-d <domain>) [-t 10] [-v <1>] 
    attack2.py -h | --help 

Arguments: 
    -f --file File to read potential Sub-domains from. (Required) 
    -d --domain Domain to bruteforce. (Required) 
Options: 
    -h --help  Show this screen. 
    -p --proxy Proxy address and port. [default: http://127.0.0.1:8080] (Optional) 
    -t --thread Thread count. (Optional) 
    -v --verbose Turn debug on. (Optional) 
""" 
import socket 
from docopt import docopt 


def fread(dwords): 
     flist = open(dwords).readlines() 
     return [s.replace('\n', '.') for s in flist] 


def subcheck(subdomain, domain, verbose): 

     vdomain = {} 
     for sub in subdomain: 
       try: 
         check = socket.gethostbyname(sub + domain) 
         vdomain[sub + domain] = check 

       except socket.gaierror, e: 
         if verbose == True: 
           print arguments 
           print e, sub + domain 
         else: 
           pass 
     return vdomain 

if __name__ == "__main__": 
     arguments = docopt(__doc__, version='0.1a') 

     fread(arguments['--file']) 
     returned_list = fread(arguments['--file']) 
     returned_domains = subcheck(returned_list, arguments['--domain'], ['--verbose']) 
+1

Почему бы не использовать http://docs.python.org/2/library/argparse.html#module-argparse? – funerr

+0

Почему вам не нравится использовать [argparse] (http://docs.python.org/3/library/argparse.html) и [logging] (http://docs.python.org/3/library/ logging.html)? – user3159253

+0

@ agam360: потому что другой ответ об использовании 'getopt' рекомендуется' docopt' для OP. Это имеет значение здесь? –

ответ

1

следующую строку в функции subcheck

returned_domains = subcheck(returned_list, arguments['--domain'], ['--verbose']) 

должен быть

returned_domains = subcheck(returned_list, arguments['--domain'], arguments['--verbose']) 

Вы забыли передать verbose параметров из аргументов, вместо того, чтобы вы прошли list

+0

ROFL u свекла меня тоже это на несколько секунд :) – iNoob

+0

Как я сам справился, это плохая практика отдавать себя правильный ответ? – iNoob

+0

@LearningCode - Никаких обязательств по установлению правильного ответа. – anuragal

0

Кажется, я неправильно набрал subcheck.

код должен был выглядеть как этот

рабочий код

if __name__ == "__main__": 
     arguments = docopt(__doc__, version='0.1a') 

     fread(arguments['--file']) 
     returned_list = fread(arguments['--file']) 
     returned_domains = subcheck(returned_list, arguments['--domain'], arguments['--verbose']) 
     print returned_domains 
Смежные вопросы