標籤:write 代碼 效果 foreach 資訊 伺服器ip oca [] tostring
用戶端ip:
Request.ServerVariables.Get("Remote_Addr").ToString();
用戶端主機名稱:
Request.ServerVariables.Get("Remote_Host").ToString();
用戶端瀏覽器IE:
Request.Browser.Browser;
用戶端瀏覽器 版本號碼:
Request.Browser.MajorVersion;//
用戶端作業系統:
Request.Browser.Platform;
伺服器ip:
Request.ServerVariables.Get("Local_Addr").ToString();
伺服器名:
Request.ServerVariables.Get("Server_Name").ToString();
如果你想進一步瞭解ServerVariables,可以用
foreach(String o in Request.ServerVariables){
Response.Write(o+"="+Request.ServerVariables[o]+"<br>");
}
對於瞭解Proxy 伺服器情況的人,我們會知道,如果使用者使用了Proxy 伺服器,上述代碼獲得的是Proxy 伺服器的IP地址;如果使用者使用了多個Proxy 伺服器,則是到達伺服器的最後一個Proxy 伺服器的IP地址。
REMOTE_ADDR 說明:
訪問用戶端的 IP 位址。
此項資訊使用者不可以修改。
如果真的給改了的話,你也和伺服器串連不了了,伺服器就是按照這個來與用戶端建立串連並進行通訊的。實際我測試修改這個 ServerVariables , 一點效果都沒有。仍然獲得是實際的值。
另: Request.UserHostAddress 和 Request.ServerVariables["REMOTE_ADDR"] 實際是同一個值。
如何繞過Proxy 伺服器獲得使用者真實的IP地址呢? 這時候我們一般是類似如下的代碼(這裡我簡單起見,沒有作一些邊界判斷)
private static string getIp(){if (System.Web.HttpContext.Current.Request.ServerVariables["HTTP_VIA"] != null)return System.Web.HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"].Split(new char[]{‘,‘})[0];elsereturn System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];}
這樣就足夠了嗎? 這樣是有問題的,HTTP_X_FORWARDED_FOR 、HTTP_VIA 是可以被冒名的。如果正好這裡有SQL注入問題的話,那可非常嚴重了。
下面我們就來具體看HTTP_VIA 和HTTP_X_FORWARDED_FOR 這兩個 ServerVariables。
HTTP_VIA
如果有該條資訊, 就證明您使用了Proxy 伺服器,Proxy 伺服器的地址就是後面的數值。
HTTP_X_FORWARDED_FOR
如果有該條資訊, 也證明了您使用了Proxy 伺服器Proxy 伺服器的地址就是後面的數值。
需要注意的,HTTP_X_FORWARDED_FOR 的值,並不一定是只有一個IP地址,下面的資訊也是可能的,每行一條記錄。下面資料取材於CSDN 實際的資料。
10.194.73.11
unknown, unknown, 211.100.22.30
203.98.182.163, 203.98.182.163, 203.129.72.215
172.16.20.110, 202.116.64.196, 203.81.21.61
10.194.75.83, 10.194.73.11, 10.194.73.11, unknown
192.168.120.57, unknown, unknown, 211.10.10.195
10.2.4.211, 219.141.250.3
3.242.165.168, 218.108.22.164
unknown, 211.100.22.30
C#擷取用戶端IP地址