通过PHP检测代理

时间:2017-06-12 05:01:15

标签: php proxy

我想检测一个人是否使用代理访问我的网站,如果确实如此,则限制他访问该网站。我在某个地方发现了这段代码,但我不确定它是否会起作用。有人可以解释一下它是否足够,或者我是否需要添加其他内容以及这段代码如何工作?

if (
      $_SERVER['HTTP_X_FORWARDED_FOR']
   || $_SERVER['HTTP_X_FORWARDED']
   || $_SERVER['HTTP_FORWARDED_FOR']
   || $_SERVER['HTTP_CLIENT_IP']
   || $_SERVER['HTTP_VIA']
   || in_array($_SERVER['REMOTE_PORT'], array(8080,80,6588,8000,3128,553,554))
   || @fsockopen($_SERVER['REMOTE_ADDR'], 80, $errno, $errstr, 30))
{
    exit('Proxy detected');
}

感谢您的帮助:)

2 个答案:

答案 0 :(得分:1)

端口扫描不是很准确,并且不能很好地工作。许多代理不会在您正在查看的标准化端口上运行。最重要的是,仅仅因为有人在端口80上运行某些东西并不意味着它是代理IP。

总的来说,代理/ VPN检测是一个需要解决的复杂问题。有GetIPIntel制作的免费API,它使用机器学习和概率论技术来生成IP作为代理/ VPN的可能性。 Maxmind也提供一个,但它被视为"遗产"服务并且它不是免费的。

答案 1 :(得分:0)

您的算法存在缺陷,扫描HTTP / s端口80和443,这对所有服务器都很常见。确实有些VPN提供商正在使用这些端口来隐藏他们的服务。

您应该采用黑名单方法,根据已知的代理服务器或VPN列表查询访问者的IP地址。一个免费数据库正在使用IP2Proxy LITE,它是IP2Proxy每日更新列表的子集。还提供Web服务,可以简化您的日常数据库更新。产品页面中提供免费样品代码。