2012-10-03 144 views
2

我正在调解从客户端A到服务器B的请求。客户端A可能是手机或笔记本电脑。服务器B想要知道客户端A的IP地址,但他们正在寻找$_SERVER['REMOTE_ADDR']。因为我打到服务器B,他们得到$_SERVER['REMOTE_ADDR']的“错误”值 - 他们正在获取我的服务器的IP地址。我可以做些什么来让服务器B在他们的端点上访问$_SERVER['REMOTE_ADDR']时看到客户端的IP地址?

回答

5

这发生在一个无法被PHP脚本覆盖的图层上。 X-Forwarded-For标头存在用于中继真正的客户端IP,但远程服务器必须支持这个容易被欺骗的值。

$header = "X-Forwarded-For: {$_SERVER['REMOTE_ADDR']}, {$_SERVER['SERVER_ADDR']}"; 
curl_setopt($curl_handle, CURLOPT_HTTPHEADER, array($header)); 
+0

+1打我吧:) - 此外,请参阅此处了解服务器B如何检测客户端A的IP(注意REMOTE_ADDR是您查看的最后一个地方) - http://stackoverflow.com/questions/1634782/what - 是最准确的方式检索一个用户正确的ip地址在php – deizel

0

编辑:之前的答案是完美的。这仅适用于您自己的dev-ip干扰客户端统计信息的情况。

在没有更多的信息,在最基本的层面上,你应该删除自己的“开发者的IP”,所以,你没有任何统计数据/数据/日志包括...

你的IP可能与所讨论的服务器不同:

<?php 

$dev_ip = '217.12.14.14' // your dev IP address 

if ($_SERVER['REMOTE_ADDR'] == $dev_ip){ 
    // do nothing 
} else { 
    // do|show|log something 
} 

这不考虑动态IP地址分配(而不是静态IP)。动态IP通常由ISP分配,这是导致更多问题的原因。

+2

我认为你误解了这个问题。 – deceze

+0

啊......所以我们正在谈论IP到客户端的转换并作为一个网关! (对不起,评论+1!) – nickhar

+0

Upvote to other answer - 完全正确地使用X-forwarded-for,-1给我误解最初的问题。我错过了网关元素:) – nickhar

相关问题