如何在tor / lighttpd上运行的PHP应用程序中获取退出节点ip

时间:2015-06-19 03:51:05

标签: php tor

我无法获取点击我的隐藏服务(PHP)的退出节点的IP地址。无论我尝试什么,它都会以本地(127.0.0.1)的形式返回,就像它通过代理一样。

我的Tor配置如下:

HiddenServicePort 80 127.0.0.1:9028

和Lighty一样:

server.port = 9028

这意味着对隐藏服务的命中应该通过虚拟端口80上的Tor到达,在Lightly上定向到9028,然后提供给最终用户。

我也安装了privoxy,但我不相信它与Tor隐藏服务有任何关系(我已经通过私有调试日志确认了这一点)。

我尝试过这样的代码:

if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
        return $_SERVER['HTTP_CLIENT_IP'];
} else if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) { 
    return $_SERVER['HTTP_X_FORWARDED_FOR'];
}
return $_SERVER['REMOTE_ADDR'];

但标题不包含任何转发IP信息。

我错过了什么?为什么不能轻易看到退出节点的IP地址?有没有办法在某处配置代理可能会改变标头并注入X-FORWARDED标头?我不在乎在公共数据库中查找退出节点 - 我只想要IP地址。

2 个答案:

答案 0 :(得分:0)

您需要检查更多服务器变量。我会做这样的事情:

$ipaddress = ”;
if ($_SERVER[‘HTTP_CLIENT_IP’] != ‘127.0.0.1’)
$ipaddress = $_SERVER[‘HTTP_CLIENT_IP’];
else if ($_SERVER[‘HTTP_X_FORWARDED_FOR’] != ‘127.0.0.1’)
$ipaddress = $_SERVER[‘HTTP_X_FORWARDED_FOR’];
else if ($_SERVER[‘HTTP_X_FORWARDED’] != ‘127.0.0.1’)
$ipaddress = $_SERVER[‘HTTP_X_FORWARDED’];
else if ($_SERVER[‘HTTP_FORWARDED_FOR’] != ‘127.0.0.1’)
$ipaddress = $_SERVER[‘HTTP_FORWARDED_FOR’];
else if ($_SERVER[‘HTTP_FORWARDED’] != ‘127.0.0.1’)
$ipaddress = $_SERVER[‘HTTP_FORWARDED’];
else if ($_SERVER[‘REMOTE_ADDR’] != ‘127.0.0.1’)
$ipaddress = $_SERVER[‘REMOTE_ADDR’];
else
$ipaddress = 'UNKNOWN';

希望这有帮助。

答案 1 :(得分:0)

它看到127.0.0.1的原因是因为当隐藏服务正在使用时 - 没有"退出节点"在传统意义上。

退出节点用于路由进出Tor网络的流量。由于对隐藏服务的命中来自Tor网络内部,因此实际上没有使用出口节点。相反,当Tor客户端想要访问您的隐藏服务时,它会为服务构建一个电路,并通过Tor网络连接到您的本地Tor客户端,然后该客户端将连接(超过127.0.0.1)代理到您的Web服务器。 / p>

只有您的隐藏服务通过互联网通过Tor(.onion提供隐藏服务时,您的隐藏服务才能看到退出节点IP。

例如,您可以像往常一样公开托管您的网站(例如https://torsite.yourdomain.com),以便常规& Tor客户端(使用退出节点)可以访问您的站点。此外,您可以设置本地Tor节点以代理隐藏服务(在这种情况下访问严格在Tor网络内)并通过localhost代理。

由于听起来您只是托管隐藏服务,因此来自Tor网络的所有点击将显示为127.0.0.1,从而表明他们正在通过Tor访问服务。由于Tor只是代理从网络到本地服务的连接,因此没有电路或Tor中继信息传递给lighttpd。

希望这是有道理的。

另请参阅:https://www.torproject.org/docs/hidden-services.html.en