1. 程式人生 > 實用技巧 >(C# webservice 獲取客戶端IP疑難雜症)---試過n種方法都失敗,獲取代理伺服器,訪問者客戶端真實IP

(C# webservice 獲取客戶端IP疑難雜症)---試過n種方法都失敗,獲取代理伺服器,訪問者客戶端真實IP

試過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