现在系统中常用的获取客户端真实ip的代码如下:

// 获取IP地址
protected string GetIPAddress()
{
    string result = "";
    try
    {
        //透过代理取客户端ip
        result = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] ?? "";
        if (result == "")
        {
            //连接主机ip
            result = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"] ?? "";
        }
        if (result == "")
        {
            result = HttpContext.Current.Request.UserHostAddress;
        }
    }
    catch (Exception ex)
    {
    }
    return result;
}

这段代码有两个问题: 1、根据这篇文章说明,当请求经常多个代理时,HTTP_X_FORWARDED_FOR可能会附加上多个服务器ip,格式如下:

More

新浪有开放ip查询的接口(http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=json&ip=123.124.2.85),通过不断查询就能抓取到ip信息。不过要遍历所有的ip地址不现实,数据存储和查询都是问题,一般我们面对的是中国的用户,只需要遍历抓取下中国范围的ip信息就行,而且ip地址最后一位的256个ip一般分配到同一地区,所以最后一位只需遍历.0的ip就可以了。 目前ip4地址已经分配完,中国的ip段可以在以下网址找到: https://www.countryipblocks.net/e_country_data/CN_range.txt 首先需要处理,把上面的ip段转换为具体的ip地址:

More

腾讯:http://ip.qq.com/cgi-bin/searchip?searchip1=121.236.225.37 现在只能通过解析页面内容到取得

新浪:http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=json&ip=123.124.2.85

网易: http://www.youdao.com/smartresult-xml/search.s?type=ip&q=123.124.2.85

ip地址在各个国家的分配情况表: http://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest http://www.countryipblocks.net/country-blocks/ip-range-format/


Page 1 / 1
Top