我无法获取点击我的隐藏服务(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地址。
答案 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