检测用户是否在代理后面

时间:2009-06-16 11:35:48

标签: php http proxy

我正在试图弄清楚如何检测登录我网站的人是否在代理之后。我已经读过你可以通过可嵌入对象(Flash和Java)检测一个人的真实IP地址。但是,我实际上找不到任何示例或来源。

我正在使用PHP而且我已经读过寻找$_SERVER['HTTP_X_FORWARDED_FOR'], $_SERVER['HTTP_CLIENT_IP']等会检测到大多数代理但是到目前为止我还没能通过TOR测试(可能TOR没有标记那些,但我已经读过匿名代理仍显示HTTP_X_FORWARDED)。如果可能的话,我想尝试使用java servlet。任何人都可以指出我正确的方向(最好用例子?)我在ha.ckers.org上看到了一些代码,但它们只显示了客户端而不是服务器端。

6 个答案:

答案 0 :(得分:5)

TOR不提供任何服务器标头,例如X_FORWARDED_FOR,因此最好的办法是使用所有已知退出节点的列表。列表可以在https://torstat.xenobite.eu/找到。

对于其他代理,您可以查看服务器标头。可能感兴趣的服务器标头包括:

HTTP_VIA 
HTTP_X_FORWARDED_FOR
HTTP_FORWARDED_FOR 
HTTP_X_FORWARDED
HTTP_FORWARDED 
HTTP_CLIENT_IP
HTTP_FORWARDED_FOR_IP 
VIA
X_FORWARDED_FOR 
FORWARDED_FOR
X_FORWARDED FORWARDED
CLIENT_IP
FORWARDED_FOR_IP
HTTP_PROXY_CONNECTION

在PHP中,您可以在$_SERVER[] superglobal

中获取这些字段的值

答案 1 :(得分:2)

通过查找以下标题字段,您应该使用一些代理。

VIA
FORWARDED
USERAGENT_VIA
X_FORWARDED_FOR
PROXY_CONNECTION
XPROXY_CONNECTION
HTTP_PC_REMOTE_ADDR
HTTP_CLIENT_IP

至于阻止TOR,你最好用iptables阻止TOR出口节点。

如果你真的必须确定你可以尝试一些“半恶意”的东西,比如在你的页面中嵌入一些flash或java,它会把你送回真正的客户端ip。但这只是有限的范围,因为你可能只是获得本地IP,如果他在例如局域网你得到像192.168.1.x

答案 2 :(得分:2)

如果要检查天气,用户是否正在使用代理,可以进行端口扫描并在发出请求时检查标头。如果代理是不透明的,则这些方法将显示公共IP(通过这种方式,IP地址有公共IP地址和私有IP地址两种类型)。但是,如果它是透明代理,则将无法正常工作。

JobLaunchingGateway

第二种方法是通过使用DNS服务器,为每个用户分配子域。

您还可以检查此站点proxy checker,即使您使用代理,该站点也将显示公共和私有IP地址。

答案 3 :(得分:1)

如果是选项,您可以尝试使用https。然后,您应该可以看到用户IP。但是,不了解SSL代理背后的办公用户。

答案 4 :(得分:1)

Java Applet或Flash都不应泄漏客户端IP。我知道旧版本的Flash存在安全漏洞,使其成为可能。很可能现在已经修补了。

我从未使用过TOR,但从我读到的内容看来它似乎是作为一种VPN实现的,因此浏览器根本不会意识到它。

为什么您需要知道用户是否在代理服务器后面?

答案 5 :(得分:-1)

一旦有了客户端IP地址,最简单的方法就是将其传递给维护TOR出口节点最新列表的服务。例如,您可以使用Ipregistry(免责声明:我正在运行该服务):

https://api.ipregistry.co/89.187.143.81?key=tryout

其中89.187.143.81必须替换为客户端IP,tryout必须替换为API密钥。

在输出中,查看字段security -> is_tor_exit。如果布尔值为true,则您的客户端正在使用Tor。