【问题标题】:Why is fopen() giving me a different IP than $_SERVER['SERVER_ADDR']?为什么 fopen() 给我的 IP 与 $_SERVER['SERVER_ADDR'] 不同?
【发布时间】:2012-10-05 04:20:31
【问题描述】:

使用此代码:

在服务器 A 我有这个:

$handle = fopen('http://www.server_b.com/get_ip.php', 'r'); //This is just a PHP file that echoes the REMOTE_ADDR
echo "IP looks like ".fread($handle, '100000')." to external server.\n";
fclose($handle);
echo "IP looks like ".$_SERVER['SERVER_ADDR']." to this server.";

在服务器 B 我有这个:

echo $_SERVER['REMOTE_ADDR'];

我从服务器 A 得到以下输出:

IP looks like xxx.xxx.223.90 to external server. //xxx.xxx on both lines are the same
IP looks like xxx.xxx.223.94 to this server.

为什么我会得到两个不同的 IP?请注意,我们确实拥有 .90-.94 的 IP 范围

【问题讨论】:

  • 那么,你得到了一台远程机器的 IP 地址,你想知道为什么它与当前机器的地址不同?
  • “服务器 A”是多宿主的,即有多个网卡吗?
  • 也许“A”正在通过 .90 机器进行代理?
  • @IgnacioVazquez-Abrams 不,这根本不是我要做的。

标签: php ip ip-address fopen


【解决方案1】:

由于它是 VPS,您在 server_b 上看到的可能是运行 server_a 的 VPS 主机的 IP 地址。

要么这样,要么有其他一些代理机制在运行。

可能有办法解决这个问题:

在 server_b 上执行 print_r()$_SERVER

根据所涉及的各种服务器的配置,除了REMOTE_ADDR,您还可能获得类似$_SERVER['HTTP_FORWARDED'] 的值。这将是代理传递的原始计算机的 IP 地址,应该是您所期望的。

这个问题可能会对您有所帮助:What is the most accurate way to retrieve a user's correct IP address in PHP?

【讨论】:

    猜你喜欢
    • 2011-08-31
    • 1970-01-01
    • 1970-01-01
    • 2021-06-04
    • 1970-01-01
    • 2011-10-24
    • 2015-08-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多