获取LAN上连接的Web服务器的名称

时间:2013-10-11 13:45:33

标签: python sockets webserver

我想创建一个脚本,找到并找到网络服务器是否在本地网络内的某个位置运行。我的想法是这个(不是最快的)。检查连接到本地网络的所有IP,并尝试连接到Web服务器正在侦听的端口(假设它将在8000上监听)。如果你发现它停止并返回ip。这是基本的想法。我已经编写了我的代码,但还没有完全测试它,因为我的环境目前只有一个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中运行,那么即使这个代码工作得很开心呢?

1 个答案:

答案 0 :(得分:0)

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

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