2013-10-11 89 views
1

在一個網絡服務器,我想創建用於查找和定位,如果一個Web服務器是建立一個運行在某處的本地網絡內的腳本的名稱。我的想法是(不是最快的)。檢查連接到本地網絡的所有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' 

我已經嘗試了類似的代碼,但在那裏檢查,如果Web服務器是在8000端口一邊收聽(看是否我的想法是工作),它做到了。最初我想知道的是,如果有更快更好的方法,其次,我可以獲得網絡服務器的名稱嗎?我一直在想,即使這個代碼在兩臺Web服務器(每臺機器都是不同的機器)都在8000下運行時會有什麼效果?

回答

0

除非你事先知道主機的網絡中的IP地址(比如,可以訪問路由器),我不認爲有比嘗試每個可能的IP一個最快捷的方式。

爲了讓你可以做索引中的http請求的服務器名稱,並檢索響應「服務器」 HTTP標頭。

+0

TY @vinaut。我會嘗試它,然後我會讓你變綠(這是接受你的答案):) – Apostolos