2011-06-02 58 views
1

一般在任何非HTTP服務器上。有沒有辦法來檢測使用哪個域名來訪問IP?獲取域服務器已達到?

我知道HTTP服務器獲取請求標頭中傳遞的域名,但是這對於不需要從客戶端收到此信息的任何其他服務器是可能的嗎?

我特別想找到一種方法來與Minecraft服務器(Bukkit)做到這一點,所以我的首選語言(如果您需要回答)將是Java。但我不想具體說這種語言的理論。

回答

3

一般來說,不,這就是爲什麼HTTP協議將它包含在標題中的原因。

爲了到達您的服務器,首先執行DNS查找來解析您的IP,然後再連接本身。這兩個步驟是分開的,很難鏈接在一起。

記錄客戶端最後一次請求的域名也很棘手,因爲DNS信息經常被緩存,所以DNS請求在被回答之前甚至可能不會到達您的DNS服務器。

如果沒有被緩存,它通常不會被最終客戶端直接查找,而是被ISP操作的緩存DNS服務器查找。

+0

作爲一種解決方法,您可以爲您的服務器獲取多個IP地址,併爲每個IP地址分配不同的DNS名稱。然後,您的服務器可以通過檢查本地套接字的IP地址(Java中的'Socket.getLocalAddress()')來確定使用了哪個名稱。 – caf 2011-06-06 05:35:07

+0

我問這只是因爲我不想租用多個IP,但感謝您的輸入。 :) – 2011-06-07 09:29:51

0

否。獲取用於連接到服務器的DNS名稱的唯一方法是讓客戶端提供它。

0

不,如果協議本身沒有像HTTP中的主機頭那樣的手段,那麼您無法找出客戶端上使用哪個主機名來解析您的IP地址。