带详细输出的错误处理

0 投票
2 回答
522 浏览
提问于 2025-04-17 21:17

我正在尝试在我的脚本中实现 --verbose 这个选项。这个选项的目的是为了在调试时显示更多的错误信息等等,但不知道为什么它似乎没有效果。我试过几种不同的 if verbose 语句,但都没有成功。希望有人能给我一些建议,让我找到解决办法。

命令行示例

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

命令行输出

unknown@ubuntu:~$ ./attack2.py -f wordfile.txt -d google.com --verbose 1
173.194.34.149
173.194.34.130
unknown@ubuntu:~$

参数打印

{'--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'])

2 个回答

0

看起来我之前调用子检查的方式不对。

代码应该是这样的:

正确的代码

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
1

在函数 subcheck 中,下面这一行

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

应该是

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

你忘了从参数中传递 verbose 这个参数,反而传递了一个 list(列表)

撰写回答