相关疑难解决方法(0)

在PHP中检索用户正确IP地址的最准确方法是什么?

我知道有许多$ _SERVER变量头可用于IP地址检索.我想知道如何使用所述变量最准确地检索用户的真实IP地址(很清楚没有方法是完美的)?

我花了一些时间试图找到一个深入的解决方案,并根据许多来源提出了以下代码.我很乐意,如果有人可以请求在答案中挖洞,或者对某些事情做些准确的解释.

编辑包括来自@Alix的优化

 /**
  * Retrieves the best guess of the client's actual IP address.
  * Takes into account numerous HTTP proxy headers due to variations
  * in how different ISPs handle IP addresses in headers between hops.
  */
 public function get_ip_address() {
  // Check for shared internet/ISP IP
  if (!empty($_SERVER['HTTP_CLIENT_IP']) && $this->validate_ip($_SERVER['HTTP_CLIENT_IP']))
   return $_SERVER['HTTP_CLIENT_IP'];

  // Check for IPs passing through proxies
  if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
   // Check if multiple IP addresses exist in var
    $iplist = explode(',', …
Run Code Online (Sandbox Code Playgroud)

php ip-address

280
推荐指数
4
解决办法
8万
查看次数

php/ajax REMOTE_ADDR设置为伪网络适配器的IP

今天我遇到了一个基于php的应用程序的非常奇怪的行为.在系统的某个部分,有一个UI利用AJAX调用来填充列表框,其中包含来自后端的内容.

现在,AJAX侦听器对所有传入请求执行安全检查,确保只有有效的客户端IP才能获得响应.有效的IP也存储在后端.

为了获得客户端的IP,我使用了普通的旧版本

$_SERVER['REMOTE_ADDR']
Run Code Online (Sandbox Code Playgroud)

这适用于大多数客户.今天我遇到了一个安装,其中remote_addr包含一个网络适配器的IP,它不是为我的应用程序执行实际通信的那个.

谷歌浏览我的Roshan的博客条目:

function getRealIpAddr()
{
    if (!empty($_SERVER['HTTP_CLIENT_IP']))   //check ip from share internet
    {
      $ip=$_SERVER['HTTP_CLIENT_IP'];
    }
    elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR']))//check ip is pass from prxy
    {
      $ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
    }
    else
    {
      $ip=$_SERVER['REMOTE_ADDR'];
    }
    return $ip;
}
Run Code Online (Sandbox Code Playgroud)

可悲的是,问题仍然存在.

有没有人偶然发现这类问题(实际上我不认为我发现了一个完全新问题^^)并且有一个想法让我如何解决这个问题?

编辑:

我上线了

  • PHP版本5.2.9-1
  • Apache/2.2.9(Win32)

通过常规LAN卡进行通信.现在,actuall客户端有更多设备.VMNet适配器等.

我想知道客户端配置如何"打扰"Web服务器那么多......

TIA

ķ

php ajax

5
推荐指数
1
解决办法
2126
查看次数

标签 统计

php ×2

ajax ×1

ip-address ×1