套接字函数出现错误

1 投票
2 回答
7382 浏览
提问于 2025-04-17 21:10

我正在尝试从一个包含子域名的列表中,结合一个参数值来使用 socket.gethostbyname,但是遇到了错误。我不确定是循环没有正确工作,导致第一次尝试的子域名+域名不合法,还是根本就没有成功?

错误信息

Traceback (most recent call last):
  File "./attack2.py", line 40, in <module>
    print subcheck(returned_list, arguments['--domain'])
  File "./attack2.py", line 31, in subcheck
    socket.gethostbyname(sub + domain)
socket.gaierror: [Errno -2] Name or service not known

代码

#!/usr/bin/python

"""
Description:

Basic Domain bruteforcer

Usage:
  attack2.py (-f <file>) (-d <domain>) [-t 10] [-v]
  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):
        for sub in subdomain:
                socket.gethostbyname(sub + domain)
        return output


if __name__ == "__main__":
        arguments = docopt(__doc__, version='0.1a')
        print arguments
        print fread(arguments['--file'])
        returned_list = fread(arguments['--file'])
        print subcheck(returned_list, arguments['--domain'])

新的子域名检查代码

def subcheck(subdomain, domain):
    for sub in subdomain:
            try:
                    #print "%s %d" % (sub+domain,len(sub+domain))
                    print socket.gethostbyname(sub + domain)

            except:
                    print "Some error"

新的输出结果

173.194.34.150
173.194.34.137
Some error
Some error
None

2 个回答

0

"[Errno -2] Name or service not known" 这个错误听起来像是你的程序无法连接到DNS服务器。你有没有尝试用其他方法来解析这些名字?比如可以用 `dig` 命令。如果 `socket.gethostbyname` 不能解析这个名字,它会返回一个不同的错误;我试过的时候,得到的是:“没有与主机名关联的地址”。

0

domain.google.comstuff.google.com 这些域名是无效的。去掉它们就能解决问题。

你没有在 subcheck 函数里返回任何东西,所以它返回的是 None。当你这样调用它的时候:

print subcheck(returned_list, arguments['--domain']) 

它就会被迫返回,并打印出 None。如果你把前面的 print 去掉,就看不到 None 了。

撰写回答