2

我有两个问题:

1) 在 PHP 中,当程序员使用“REMOTE_ADDR”变量获取 Web 客户端的 IP 地址时,该 IP 地址是从 HTTP 标头中的字段获取的吗?或者从哪里来?

2) 如果客户端的 IP 地址是从 HTTP 标头中获取的,那么 Web 客户端可以“欺骗”或“更改”HTTP 标头以隐藏其真实 IP 地址吗?

非常感谢。

4

3 回答 3

5

REMOTE_ADDR取自 TCP/IP 连接,很难欺骗。

但是,如果您的服务器位于反向代理后面,则可能不准确。在这种情况下,您必须阅读X-Forwarded-For标头,如果您的代理并不总是覆盖它,它很容易被欺骗

于 2013-01-29T22:56:10.963 回答
3

$_SERVER["REMOTE_ADDR"] :如前所述,从 TCP 连接中的 IP 套接字获取 IP... 欺骗真实 IP 的方法很容易使用远程服务器,例如:'TOR 网络'。

示例: 如果我想向站点服务器发送请求(但我需要欺骗我的 IP),我使用:

<?php

$ip = '127.0.0.1';
$port = '9051';
$auth = 'PASSWORD';
$command = 'signal NEWNYM';
$fp = fsockopen($ip,$port,$error_number,$err_string,10);
if(!$fp) { echo "ERROR: $error_number : $err_string";
    return false;
          } else {
                     fwrite($fp,"AUTHENTICATE \"".$auth."\"\n");
                     $received = fread($fp,512);
                     fwrite($fp,$command."\n");
                     $received = fread($fp,512);
                 }
 fclose($fp);
 $ch = curl_init();
 curl_setopt($ch, CURLOPT_URL, "http://whatismyip.org"); //ipimg.php
 curl_setopt($ch, CURLOPT_PROXY, "127.0.0.1:9050");
 curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
 curl_setopt($ch, CURLOPT_VERBOSE, 0);
 $response = curl_exec($ch);
 curl_close($ch);
 echo $response;
?>

此代码演示了我如何使用 TOR 服务来欺骗我的 IP,该服务使用 SOCKS5 / SOCKS4 在不使用我的真实 IP 的情况下向另一台服务器发送请求。我正在使用 whatismyip.org 对其进行测试以查看 IP 更改。

玩得开心。

于 2013-03-29T17:02:18.390 回答
0

1)$_SERVER["REMOTE_ADDR"]直接来自 TCP 连接。

2)$_SERVER["REMOTE_ADDR"]只能在非 SSL TCP 连接上使用中间人攻击进行欺骗(SSL 握手有一些防止 IP 欺骗的保护)。

2)$_SERVER来自 HTTP 标头的变量带有前缀,HTTP_是的,如果它们包含 IP 地址,它们可以被调用者轻而易举地欺骗。您永远不应信任$_SERVER["HTTP_*"]包含 IP 地址的变量。

于 2013-01-29T22:56:57.707 回答