2012-08-05 64 views
0

比方說,我有一個服務器,它有多個域名解析爲它的IP地址。例如我的服務器是10.0.0.33,可以通過serverA.mysite.com,serverB.mysite.comserverC.mysite.com訪問。如果我有類似下面的代碼運行的進程:tcp socket server獲取使用的服務器客戶端的名稱

#!/usr/bin/env python 

import socket 

server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
server.listen(5) 

while True: 
    client, client_addr = server.accept() 
    #server_name = <some function>(client) 
    #Do Something with the client knowing the value of servername... 


server.close() 

有沒有一種方法來確定是否由客戶端的TCP連接,旨在serverA.mysite.comserverB.mysite.com ...?

我的例子是在Python中,但我不需要python特定的答案。

回答

1

不,TCP/IP連接在IP地址級別工作,因此您無法確定客戶端如何獲取服務器正在偵聽的IP地址。

HTTP通過要求(自1.0)客戶端發送原始主機名作爲請求數據的一部分來解決此問題。

0

我相信 - 您正在聆聽INADDR_ANY ("0.0.0.0"),並且想知道客戶端連接的是哪一個,如果您在多個端口上偵聽?這很簡單,您應該在accept之後使用s.getsockname。所以你的代碼看起來像這樣

import socket 
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.bind(("0.0.0.0", 10000)) 
s.listen(5) 
while True: 
    s2 = s.accept() 
    print s2.getsockname() 
    s2.close()