php/ajax远程地址设置为伪网络适配器的IP

php/ajax远程地址设置为伪网络适配器的IP,php,ajax,Php,Ajax,今天我遇到了我的一个基于php的应用程序的一个非常奇怪的行为。 在系统的某个部分中,有一个UI使用AJAX调用来填充列表 包含来自后端的内容的框 现在,AJAX侦听器对所有传入请求执行安全检查,确保 只有有效的客户端IP才能得到响应。有效的IP也存储在后端 为了获得客户端的IP,我使用了纯旧的 $_SERVER['REMOTE_ADDR'] 这对大多数客户都适用。今天我遇到了一个装置 远程地址包含一个网络适配器的IP,该网络适配器不是执行该操作的网络适配器 我的应用程序的实际通信 在谷歌上搜索

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

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

为了获得客户端的IP,我使用了纯旧的

$_SERVER['REMOTE_ADDR']
这对大多数客户都适用。今天我遇到了一个装置 远程地址包含一个网络适配器的IP,该网络适配器不是执行该操作的网络适配器 我的应用程序的实际通信

在谷歌上搜索agve me:

不幸的是,这个问题依然存在

有没有人遇到过这种问题(事实上,我不认为我发现了一个全新的问题^^^^),并且对如何解决这个问题有过想法

编辑:

我在

  • PHP版本5.2.9-1
  • Apache/2.2.9(Win32)
通信通过常规LAN卡完成。现在,实际客户端有几个 设备更多。VMNet适配器等

我想知道客户端配置怎么会对web服务器造成如此大的“干扰”

短暂性脑缺血发作


K

不幸的是,您必须对所有IP信息持保留态度


IP地址是在请求期间通过考虑数据包和请求信息而收集的。遗憾的是,这些信息很容易被欺骗,甚至是不正确的(基于大量的网络概率),不应该被用于虚荣以外的任何目的。

您能在这里提供一些关于采用者和运行应用程序的服务器的详细信息吗。。我的意思是他们持有什么IP。所以示例场景在客户端可能看起来像这样:eth0-10.0.0.1 eth1-10.1.1.1然后在服务器上有10.1.1.2,当请求通过客户端而不是10.1.1.1时,它显示10.0.0.1?正确,eth1完成了任务,所以我想在remote_addr中有10.1.1.1。这真的很奇怪,我从未见过这样的行为,我认为这可能与客户端网络配置有关。如果存在路由,您可能需要检查网关配置等,可能需要关闭所有连接并逐个恢复,查看问题开始出现的位置,然后检查特定的网络采用者配置。。只要我的2美分。如果两者都在不同的子网上,那么这种情况根本不应该发生,至少我想不出发生这种情况的逻辑原因。Thx适用于这一次,但您有什么最佳做法可以推荐吗?您问题中的代码是我认为的“最佳选项”。在大多数情况下,它将捕获正确的IP。请理解,我不一定相信结果。我同意并接受了,但您能推荐一些关于apache如何实际设置远程地址等的阅读资料吗?我很想知道是什么给我带来了麻烦。短暂性脑缺血发作
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;
}