(C# webservice 獲取客戶端IP疑難雜症)---試過n種方法都失敗,獲取代理伺服器,訪問者客戶端真實IP
阿新 • • 發佈:2020-09-19
試過n種方法都失敗,獲取代理伺服器,訪問者客戶端真實IP
不知是不是代理伺服器設定什麼或者是禁用什麼,因知道代理伺服器的特殊性,如下介紹
clintA ---> proxy --->serverC 經過代理以後,由於在客戶端和服務之間增加了中間層,因此伺服器無法直接拿到客戶端的IP,伺服器端應用也無法直接通過轉發請求的地址返回給客戶端。但是在轉發請求的HTTP頭資訊中,增加了X-FORWARDED-FOR資訊
請高手,指點一下我使用程式碼,為什麼還是取不值客戶端值.
(若程式碼沒什麼問題,請問大家有無遇到相同情況改什麼系統配置..)
C# code
public static string GetIP() { string result = String.Empty; result = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]; if (null == result || result == String.Empty) { result = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"]; } if (null == result || result == String.Empty) { result = HttpContext.Current.Request.UserHostAddress; } return result; /*這種都試過,還是不行. if (Context.Request.ServerVariables["HTTP_VIA"] != null) // 伺服器, using proxy { ip = Context.Request.ServerVariables["HTTP_X_FORWARDED_FOR"].ToString(); // Return real client IP. } else//如果沒有使用代理伺服器或者得不到客戶端的ip not using proxy or can't get the Client IP { 得到服務端的地址 ip = Context.Request.ServerVariables["REMOTE_ADDR"].ToString(); //While it can't get the Client IP, it will return proxy IP. } */ }
我還試過迴圈打印出HttpContext.Current.Request.ServerVariables;與Request.Headers,所示key與value都找不到正確客戶端IP
作者: learnJSee 釋出時間: 2011-07-02
這問題問過無數次了...很多代理/閘道器不轉發或不支援XFF,或者經過多層代理被過濾掉了...B/S是無解的...作者: vrhero 釋出時間: 2011-07-02
看看網上是不是有這樣的一些免費的webservice的。可以用,但是這些都是別人的,也許那一天就不能用了。作者: chen_ya_ping 釋出時間: 2011-07-02