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

以下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"] 的区别:

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

本文由lenashane.com原创,转载请注明出处:查看原文
如果觉得文章还不错,请点个赞吧

