2017-03-11 64 views
0

我正在嘗試獲取訪問日誌的客戶機信息。如何在ASP.NET/C#中獲取客戶端設備名稱和IP地址?如何獲取ASP.NET/C#中的客戶端設備信息?

+1

檢查這篇文章如何獲取用戶的公共IP地址:http://stackoverflow.com/a/19286308/3126771。你的意思是「客戶端設備」?你在說瀏覽器代理嗎? – Arun

回答

2

您可以從Request.UserHostAddress財產獲得的直接客戶端IP:

public ActionResult Index() 
{ 
    string ip = Request.UserHostAddress; 
    ... 
} 

話雖如此,有很多情況下,這可能不是不夠好。假設您的Web服務器位於例如nginx或HAProxy等逆向代理的後面。在這種情況下,UserHostAddress將始終返回此代理的IP。如果你想在這種情況下,原來的客戶端IP地址,你可以使用標準的X-Forwarded-For請求頭,這些反向代理服務器可以設置:

string ip = Request.Headers["X-Forwarded-For"]; 

還要注意的是,如果請求經過許多代理服務器,那麼X-Forwarded-For頭將代表在每個代理服務器的IP地址的逗號分隔的列表:

X-Forwarded-For: client, proxy1, proxy2 

你可能需要考慮到這種情況,如果你想獲得最接近或等於客戶端,那麼你的IP地址應該從這個列表中提取最左邊的地址。

就「客戶端設備名稱」而言,TCP/HTTP協議中沒有內置這種概念,所以如果您希望能夠檢索,您的客戶端可能需要使用一些自定義標頭或參數來提供它它在服務器上。

相關問題