【问题标题】:Python Socket - getting lan connected server host namesPython Socket - 获取局域网连接的服务器主机名
【发布时间】:2019-05-07 01:32:59
【问题描述】:

我正在尝试获取 LAN 连接服务器的主机名,因此我可以使用主机名对这些服务器运行查询:

import socket
IP_RANGE = 10
hostNamesList = []
socket.setdefaulttimeout(0.1)
for i in range(IP_RANGE):
    try:
        hostNamesList.append(socket.gethostbyaddr("192.168.1.%s" % i)[0])
    except:
        pass

print hostNamesList

即使我将超时设置为 0.1 秒,上面的代码也需要几分钟来扫描选定的 IP 范围。

我做错了什么,或者有什么方法可以更快地获取主机名吗?

【问题讨论】:

    标签: python sockets hostname gethostbyaddr


    【解决方案1】:

    感谢yan的建议,我已经解决了我的问题。大约需要10秒而不是几分钟

    import socket
    from threading import Thread
    
    
    hostNamesList=[]
    def searchForSingleIP(i):
        try:
            hostNamesList.append(socket.gethostbyaddr("192.168.1.%s" % str(i) )[0])
    
        except:
            pass
    
    for i in range(256):
        worker = Thread(target = searchForSingleIP, args = (i,))
        worker.start()
        worker.join(timeout=0.05)
    
    print hostNamesList
    

    【讨论】:

      【解决方案2】:

      您可能会遇到冗长的 DNS 或 SAMBA 查找(只是猜测)。它更多的是与网络相关的行为,而不是 python。尝试使用分析器运行您的脚本:python -m cProfile -s tottime lookup.py

      如果我的猜测是正确的,您会看到很长的 _socket.gethostbyaddr 计时,那么唯一好的选择是尝试并行您的代码(或改进网络设置以获得更好的查找时间)。

      【讨论】:

        猜你喜欢
        • 2018-06-01
        • 2015-12-07
        • 1970-01-01
        • 2017-03-26
        • 2013-08-05
        • 1970-01-01
        • 2016-12-12
        • 2015-05-07
        • 2016-03-24
        相关资源
        最近更新 更多