Python Hostname解析速度很慢

时间:2015-02-26 14:07:12

标签: python sockets networking dns ip

我目前正在尝试为我的家庭网络构建一个小网络扫描。 要解析主机名,我想使用在for循环中调用的这个函数迭代一系列IP。这样做很好,但我认为gethostbyaddr(tgtHost)函数非常慢。有没有办法加快速度或使用替代功能?

def fn_hostscan(tgtHost):

    response = os.system("ping -n 1 " + tgtHost + "> C:\\temp\log.txt")

    if response == 0:
        try:
            tgtName = gethostbyaddr(tgtHost)
            print("\n[+] " + tgtHost + " = " + tgtName[0])
        except:
            dummy = 0
    else:

    print("\n[-]" + tgtHost + " = None found") 

2 个答案:

答案 0 :(得分:1)

看看周围的情况:

这适合您的目的吗? - Finding local IP addresses using Python's stdlib

import socket 
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(("gmail.com",80))
print(s.getsockname()[0])
s.close()

答案 1 :(得分:1)

gethostbyaddr和类似函数依赖于你的resolv.conf(参见http://linux.die.net/man/5/resolv.conf)。

  1. 您的DNS解析器速度很慢(尝试使用Google的公共DNS)
  2. 某些IP没有PTR记录或者他们的NS处于脱机状态,默认超时为5秒 - 在"循环"
  3. 时请记住这一点

    要提高性能,您可能需要将其并行化,使用快速解析程序并将超时设置保持在最低限度。

    如果可以,请使用类似于http://c-ares.haxx.se/

    的库