1

我想创建一个脚本来查找和定位网络服务器是否在本地网络内的某个地方运行。我的想法是这个(不是最快的)。检查所有连接到本地网络的 ip 并尝试连接到网络服务器正在侦听的端口(假设它总是在 8000 上侦听)。如果你发现它停止并返回 ip。这是基本的想法。我已经编写了我的代码,但还没有完全测试它,因为我的环境目前只有一台 PC :)....虽然我确实在我的 PC 上运行了网络服务器,但它找到了它。:)

代码看起来像这样

local_host_ip = socket.gethostbyname(socket.gethostname())
web_client_socket = socket.socket()
try:

    if web_client_socket.connect_ex((local_host_ip,8000)) == 0:
        print 'Found rhombus server'
        web_client_socket.close()
        return local_host_ip
except IOError:
    pass

for ip in [ip_address for ip_address in socket.gethostbyname_ex(socket.gethostname())[2] if 
           ip_address != local_host_ip]:
    print 'Attempting to find server'
    try:

        if web_client_socket.connect_ex((local_host_ip,8000)) == 0:
            print 'Found rhombus server'
            return ip
    except IOError:
        pass
return 'Rhombus server not found'

我尝试了一个类似的代码,但检查网络服务器是否正在侦听端口 8000(以查看我的想法是否有效)并且确实如此。首先我想知道是否有更快更好的方法,其次,我可以获得网络服务器的名称吗?我在想,即使这段代码有效,如果两台 Web 服务器(每台不同的机器)在 8000 中运行,会发生什么?

4

1 回答 1

0

除非您事先知道网络中主机的 IP 地址(例如,可以访问路由器),否则我认为没有比尝试每个可能的 IP 更快的方法。

要获取服务器名称,您可以对索引进行 http 请求,并在响应中检索“服务器”http 标头。

于 2013-10-11T14:43:25.223 回答