您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

获取用户真实ip地址的方法

2024/3/25 13:39:38发布64次查看
一、没有使用代理服务器的情况:
remote_addr = 您的 ip
http_via = 没数值或不显示
http_x_forwarded_for = 没数值或不显示
二、使用透明代理服务器的情况:transparent proxies
remote_addr = 最后一个代理服务器 ip
http_via = 代理服务器 ip
http_x_forwarded_for = 您的真实 ip ,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。
这类代理服务器还是将您的信息转发给您的访问对象,无法达到隐藏真实身份的目的。
三、使用普通匿名代理服务器的情况:anonymous proxies
remote_addr = 最后一个代理服务器 ip
http_via = 代理服务器 ip
http_x_forwarded_for = 代理服务器 ip ,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。
隐藏了您的真实ip,但是向访问对象透露了您是使用代理服务器访问他们的。
四、使用欺骗性代理服务器的情况:distorting proxies
remote_addr = 代理服务器 ip
http_via = 代理服务器 ip
http_x_forwarded_for = 随机的 ip ,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。
告诉了访问对象您使用了代理服务器,但编造了一个虚假的随机ip代替您的真实ip欺骗它。
五、使用高匿名代理服务器的情况:high anonymity proxies (elite proxies)
remote_addr = 代理服务器 ip
http_via = 没数值或不显示
http_x_forwarded_for = 没数值或不显示 ,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。
实例
/*** 获得用户的真实ip地址** @access  public* @return  string*/function real_ip(){// 初始化一个变量$realip    static $realip = null;    // 如果$realip不真等于null,返回之    if ($realip !== null)    {        return $realip;    }// 如果$_server有值    if (isset($_server))    {     // 如果$_server['http_x_forwarded_for']有值     // 表明客户端通过代理上网        if (isset($_server['http_x_forwarded_for']))        {         // 使用explode()函数将其用','分割成数组            $arr = explode(',', $_server['http_x_forwarded_for']);            /* 取x-forwarded-for中第一个非unknown的有效ip字符串 */            // 开始遍历数组            foreach ($arr as $ip)            {             // 去掉首尾的空白                $ip = trim($ip);    // 不是unknown就是真实上网地址,存值并退出循环                if ($ip != 'unknown')                {                    $realip = $ip;                    break;                }            }        }        // $_server['http_x_forwarded_for']无值 且        // $_server['http_client_ip']有值,取其值作为真实ip        elseif (isset($_server['http_client_ip']))        {            $realip = $_server['http_client_ip'];        }        // $_server['http_x_forwarded_for']无值(不是用过代理上网)并且        // $_server['http_client_ip']也没有值        else        {         // 如果$_server['remote_addr']有值,取其值作为真实ip            if (isset($_server['remote_addr']))            {                $realip = $_server['remote_addr'];            }            else // 都没有值返回'0.0.0.0'            {                $realip = '0.0.0.0';            }        }    }    // $_server没有值    else     {     // 如果getenv('http_x_forwarded_for')非空取其值作为真实ip        if (getenv('http_x_forwarded_for'))        {            $realip = getenv('http_x_forwarded_for');        }        // 如果getenv('http_client_ip')非空取其值作为真实ip        elseif (getenv('http_client_ip'))        {            $realip = getenv('http_client_ip');        }        // 否则取getenv('remote_addr')的值作为真实ip        else        {            $realip = getenv('remote_addr');        }    }    preg_match(/[d.]{7,15}/, $realip, $onlineip); // 此句干嘛用的?请高人指教一下。    $realip = !empty($onlineip[0]) ? $onlineip[0] : '0.0.0.0'; // 此句又是干嘛用的?请指教。    return $realip;}
最近在获取浏览客户端ip的功能的时候出现一个问题,主要的现象是这样的:一个在武汉使用北京电信的客户端的ip始终不能被我的程序访问,查了些资料修改了下,主要是对于c#获取ip的三种属性(http_x_forwarded_for,http_via,remote_addr)的区分分析如下:
一、没有使用代理服务器的情况:
      remote_addr = 您的 ip
      http_via = 没数值或不显示
      http_x_forwarded_for = 没数值或不显示
二、使用透明代理服务器的情况:transparent proxies
      remote_addr = 最后一个代理服务器 ip
      http_via = 代理服务器 ip
      http_x_forwarded_for = 您的真实 ip ,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。
   这类代理服务器还是将您的信息转发给您的访问对象,无法达到隐藏真实身份的目的。
三、使用普通匿名代理服务器的情况:anonymous proxies
      remote_addr = 最后一个代理服务器 ip
      http_via = 代理服务器 ip
      http_x_forwarded_for = 代理服务器 ip ,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。
   隐藏了您的真实ip,但是向访问对象透露了您是使用代理服务器访问他们的。
四、使用欺骗性代理服务器的情况:distorting proxies
      remote_addr = 代理服务器 ip
      http_via = 代理服务器 ip
      http_x_forwarded_for = 随机的 ip ,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。
   告诉了访问对象您使用了代理服务器,但编造了一个虚假的随机ip代替您的真实ip欺骗它。
五、使用高匿名代理服务器的情况:high anonymity proxies (elite proxies)
      remote_addr = 代理服务器 ip
      http_via = 没数值或不显示
      http_x_forwarded_for = 没数值或不显示 ,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。
   完全用代理服务器的信息替代了您的所有信息,就象您就是完全使用那台代理服务器直接访问对象。
针对以上的属性分析将代码改为:
///         /// 获取客户端ip      ///       ///         public string getuserip()        {            string _userip;            try            {                if (httpcontext.current.request.servervariables[http_via] == null)                {                    _userip = httpcontext.current.request.userhostaddress;                }                else                {                    _userip = httpcontext.current.request.servervariables[remote_addr];                }            }            catch (exception)            {                _userip = 无法获取此ip;            }            return _userip;        }
永久地址:
转载随意~请带上教程地址吧^^
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product