Python 套接字 - 获取 LAN 连接的服务器主机名
Python Socket - getting lan connected server host names
我正在尝试获取 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 范围。
有没有我做错了什么,或者有什么方法可以更快地获取主机名?
您可能 运行 需要长时间的 DNS 或 SAMBA 查找(只是猜测)。它更像是一种网络相关行为,而不是 python。尝试 运行 你的带有分析器的脚本:python -m cProfile -s tottime lookup.py
如果我的猜测是正确的,您会看到很长的 _socket.gethostbyaddr
计时,那么唯一好的选择是尝试并行执行您的代码(或改进网络设置以获得更好的查找时间)。
我已经解决了我的问题,感谢 yan suggestion.It 大约需要 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
我正在尝试获取 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 范围。
有没有我做错了什么,或者有什么方法可以更快地获取主机名?
您可能 运行 需要长时间的 DNS 或 SAMBA 查找(只是猜测)。它更像是一种网络相关行为,而不是 python。尝试 运行 你的带有分析器的脚本:python -m cProfile -s tottime lookup.py
如果我的猜测是正确的,您会看到很长的 _socket.gethostbyaddr
计时,那么唯一好的选择是尝试并行执行您的代码(或改进网络设置以获得更好的查找时间)。
我已经解决了我的问题,感谢 yan suggestion.It 大约需要 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