国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

asp.net 獲取IP的相關資料

2024-07-10 12:53:30
字體:
來源:轉載
供稿:網友

ASP.NET獲取客戶端的IP地址,如果客戶端正在使用代理服務器進行訪問,則它是代理服務器的IP地址,而不是客戶端的實際IP地址,這篇文章主要為大家詳細介紹了asp.net 獲取IP的相關資料,需要它的朋友可以參考它。

ASP.net 獲得客戶端的IP,最常見的是使用下述代碼:

復制代碼 代碼如下:

string user_IP = System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];


對于了解代理服務器情況的人,我們會知道,如果用戶使用了代理服務器,上述代碼獲得的是代理服務器的IP地址;如果用戶使用了多個代理服務器,則是到達服務器的最后一個代理服務器的IP地址。

REMOTE_ADDR 說明:

訪問客戶端的 IP 地址。
此項信息用戶不可以修改。
如果真的給改了的話,你也和服務器連接不了了,服務器就是按照這個來與客戶端建立連接并進行通訊的。實際我測試修改這個 ServerVariables , 一點效果都沒有。仍然獲得是實際的值。
另: Request.UserHostAddress 和 Request.ServerVariables["REMOTE_ADDR"] 實際是同一個值。

如何繞過代理服務器獲得用戶真實的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];
else
return System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
}
這樣就足夠了么? 這樣是有問題的,HTTP_X_FORWARDED_FOR 、HTTP_VIA 是可以被冒名的。如果正好這里有SQL注入問題的話,那可非常嚴重了。

下面我們就來具體看HTTP_VIA 和HTTP_X_FORWARDED_FOR 這兩個 ServerVariables。

HTTP_VIA

如果有該條信息, 就證明您使用了代理服務器,代理服務器的地址就是后面的數值。

HTTP_X_FORWARDED_FOR

如果有該條信息, 也證明了您使用了代理服務器代理服務器的地址就是后面的數值。

需要注意的,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
192.168.83.56, 210.21.224.233
218.94.136.176, 203.81.21.61
unknown, 210.75.1.181
10.161.196.218, 202.104.134.23
222.216.6.148, 222.216.6.146
155.161.59.47, unknown


需要注意的是這兩個值都是可以被改掉的。

對于這三個值:REMOTE_ADDR、HTTP_VIA、HTTP_X_FORWARDED_FOR 來說,可以分以下五種情況:

一、沒有使用代理服務器的情況:

REMOTE_ADDR = 您的 IP
HTTP_VIA = 沒數值或不顯示
HTTP_X_FORWARDED_FOR = 沒數值或不顯示

二、使用透明代理服務器的情況:Transparent Proxies

REMOTE_ADDR = 最后一個代理服務器 IP
HTTP_VIA = 代理服務器 IP
HTTP_X_FORWARDED_FOR = 您的真實 IP ,經過多個代理服務器時,這個值類似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。

這類代理服務器還是將您的信息轉發給您的訪問對象,無法達到隱藏真實身份的目的。

三、使用普通匿名代理服務器的情況:Anonymous Proxies

REMOTE_ADDR = 最后一個代理服務器 IP
HTTP_VIA = 代理服務器 IP
HTTP_X_FORWARDED_FOR = 代理服務器 IP ,經過多個代理服務器時,這個值類似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。

隱藏了您的真實IP,但是向訪問對象透露了您是使用代理服務器訪問他們的。

四、使用欺騙性代理服務器的情況:Distorting Proxies

REMOTE_ADDR = 代理服務器 IP
HTTP_VIA = 代理服務器 IP
HTTP_X_FORWARDED_FOR = 隨機的 IP ,經過多個代理服務器時,這個值類似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。

告訴了訪問對象您使用了代理服務器,但編造了一個虛假的隨機IP代替您的真實IP欺騙它。

五、使用高匿名代理服務器的情況:High Anonymity Proxies (Elite proxies)

REMOTE_ADDR = 代理服務器 IP
HTTP_VIA = 沒數值或不顯示
HTTP_X_FORWARDED_FOR = 沒數值或不顯示 ,經過多個代理服務器時,這個值類似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。

完全用代理服務器的信息替代了您的所有信息,就象您就是完全使用那臺代理服務器直接訪問對象。

服務器端的 UserIP.ASPX 頁面的代碼:

復制代碼 代碼如下:


protected void Page_Load(object sender, EventArgs e){
StringBuilder info = new StringBuilder(); // 我們關注的三個 ServerVariables
info.AppendFormat("HTTP_VIA = {0}
/r/n",
Request.ServerVariables["HTTP_VIA"]);
info.AppendFormat("HTTP_X_FORWARDED_FOR = {0}
/r/n",
Request.ServerVariables["HTTP_X_FORWARDED_FOR"]);
info.AppendFormat("REMOTE_ADDR = {0}
/r/n",
Request.ServerVariables["REMOTE_ADDR"]);
info.AppendLine("*********** /r/n
");
// 其他有參考價值的 ServerVariables
foreach (string key in Request.ServerVariables.AllKeys){
info.AppendFormat("{0} = {1}
/r/n", key, Request.ServerVariables[key]);
}
Response.Clear();
Response.Write(info.ToString());
Response.End();
}
客戶端發送請求的代碼:
[code]
static void Main(string[] args){
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("http://localhost:7867/MyTestWebSite/UserIP.aspx");
request.Headers.Add("REMOTE_ADDR", "192.168.5.88");
request.Headers.Add("VIA", "ghj1976");
request.Headers.Add("X_FORWARDED_FOR", "0.0.0.0");
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
StreamReader stream = new StreamReader(response.GetResponseStream());
string info = stream.ReadToEnd();
stream.Close();
response.Close();
request = null;
Console.Write(info);
Console.ReadLine();
}


測試的結果中的重要信息:測試的結果數據比較多,我這里只羅列了幾個重要的。

HTTP_VIA = ghj1976

HTTP_X_FORWARDED_FOR = 0.0.0.0

REMOTE_ADDR = 127.0.0.1

***********
REMOTE_ADDR = 127.0.0.1

HTTP_VIA = ghj1976

HTTP_REMOTE_ADDR = 192.168.5.88

HTTP_X_FORWARDED_FOR = 0.0.0.0


上面測試代碼需要注意的是:

我們在客戶端代碼中設置了三個HTTP頭信息,分別是:

REMOTE_ADDR、VIA、X_FORWARDED_FOR
實際在服務器段,這三個值應該通過下面三個屬性來讀取

HTTP_REMOTE_ADDR、HTTP_VIA 、HTTP_X_FORWARDED_FOR 注意他們的區別!!

REMOTE_ADDR 屬性是無法設置的。或者說,設置的不是我們所希望的。

通過錯新技術頻道小編介紹的asp.net 獲取IP的相關資料,相信大家都有了一定的了解,如需了解更多的相關資訊,請繼續關注錯新技術頻道吧!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 金平| 泾川县| 工布江达县| 阳曲县| 新安县| 巨野县| 平阳县| 石渠县| 文山县| 湘阴县| 西林县| 宣恩县| 偏关县| 阿荣旗| 信阳市| 永安市| 陆丰市| 遂平县| 老河口市| 广丰县| 淮南市| 隆林| 从化市| 濉溪县| 蚌埠市| 宣威市| 公主岭市| 平遥县| 太仆寺旗| 安化县| 广丰县| 瑞金市| 兴文县| 庄浪县| 丰原市| 井冈山市| 集安市| 新和县| 华蓥市| 锡林浩特市| 平利县|