2013-10-24 110 views
0

我的服務器有3個IP地址,127.0.0.1,192.168.0.100和一個Internet IP地址。我打算在這臺服務器上運行由python編寫的服務,但我不希望它在互聯網上公開。 我正在使用BaseHTTPRequestHandler類來實現此服務,所以如何綁定只有127.0.0.1和192.168.0.100,但不是另一個?如何在Python的BaseHTTPRequestHandler上綁定多個指定的IP地址

回答

0

通常,路由器有一個選項,您可以允許服務器可見或不可見。如果在路由器上,您將服務器設置爲不可見,那麼您的服務器將無法通過互聯網訪問。

+0

感謝但不是一個選項,因爲這臺服務器上還有其他服務。 – hago

0

我想你有兩種選擇。

1)聽所有接口,但是重寫BaseHTTPRequestHandler。 init檢查客戶端地址,如果連接來自不受歡迎的接口,則刪除連接

2)創建多個套接字,每個地址要一個一個地監聽。 SocketServer.serve_forever()被阻塞,所以你要麼需要爲每個地址使用一個線程,要麼切換到一個更復雜的框架,如雙絞線。

+0

謝謝,我更喜歡解決方案1,因爲第二個將添加大量代碼。我有沒有辦法只是在綁定地址元組中指定2 ips? – hago

+0

據我所知,還不夠。低級套接字只能綁定到單個地址(但可能是ADDR_ANY)。如果您直接使用套接字,則一次偵聽多個套接字是相當容易的,但這似乎並未在非常簡單的SocketServer類中實現。還有一件事:綁定到通配符地址允許服務器在接口關閉和備份時保持運行(例如,由於電纜被拔出)。如果綁定到特定地址,則需要手動重新收聽。 – Evan