lena和shane,家庭日志,xulavigne,Lena&Shane

微信内置浏览器获取正确IP地址的方法

发布时间:2015-11-10 编辑:Shane Jhu 阅读 ()

之前做了个根据IP获取MSN五天天气预报的页面,在微信中测试时,发现微信的内置浏览器似乎自带了代理,哈尔滨的IP跑到天津去了:

Screenshot_2015-11-10-14-55-36333 (2).png

以下C#代码可以在使用代理的情况下获取真实IP地址的方法。

/// <summary>
/// 获取真实IP
/// </summary>
/// <param name="request">请求对象</param>
/// <returns>真实IP</returns>
public static string GetRequestIP(HttpRequest request)
{
    string result = request.ServerVariables["HTTP_X_FORWARDED_FOR"];
    if (!String.IsNullOrEmpty(result))
    {
        if (result.IndexOf(".") == -1) return null;
        if (result.IndexOf(",") == -1) return result;
        return result.Split(',').FirstOrDefault(i =>
                !i.StartsWith("192.168.") && !i.StartsWith("10.") && !i.StartsWith("172.16."));
    }
    result = request.ServerVariables["REMOTE_ADDR"];
    return !String.IsNullOrEmpty(result)
        ? result
        : request.UserHostAddress;
}

其中 request.ServerVariables["HTTP_X_FORWARDED_FOR"]  的原理和弊端请自行百度,有一点要说明的是,此方法在使用多级代理的情况下,会获取以","分隔的多个IP。

使用以上方法,我们可以看到 request.ServerVariables["REMOTE_ADDR"]  和 request.ServerVariables["HTTP_X_FORWARDED_FOR"]  的区别:

Screenshot_2015-11-10-14-55-36.png

最后,在微信中就可以获取正确的IP和位置了。

Screenshot_2015-11-10-14-55-3622.png

 

本文由lenashane.com原创,转载请注明出处:查看原文

如果觉得文章还不错,欢迎打赏

9月 1 2019
生活的艺术在于把握好每一次的让步和坚持。

亨利·艾利斯 (Henry Ellis)