如果您没有使用 VPN 进行连接,某些网站会将您重定向到其他地方或完全阻止您的连接。一个例子是 yts.mx(YIFY 种子下载网站);如果您没有使用 VPN 进行连接,此网站会将您重定向到警告不要使用您自己的 IP 的页面。
我猜这意味着该网站知道您是否连接了 VPN。这告诉我有一种方法可以知道用户是否通过 VPN 连接。
检测访问者是否位于 VPN 后面的 DIY 方法是获取所有 VPN 服务使用的所有 IP 列表,每天更新它们,因为它们不断变化,然后将访问者的 IP 与该列表进行比较。
你可以猜想,网站并没有这样做,因为维护工作量很大。相反,他们使用专门分析 IP 地址的实时 API,并拥有 VPN 服务使用的最新 IP 列表。
我的一个网站禁止 VPN 用户访问(因为地理位置很重要),所以我使用 Abstract IP Geolocation API https://www.abstractapi.com/ip-geolocation-api。它包含一个字段来指示该 IP 是否属于 VPN。
$ curl "https://ipgeolocation.abstractapi.com/v1/?api_key=KEY&ip_address=IP"
...
"security": {
"is_vpn": false
}
...
您可以使用每天更新最新代理数据的 IP2Proxy Web 服务。
如果您没有自己的 API 密钥,您可以从 https://www.ip2location.com/web-service/ip2proxy 获取它,但出于测试目的,您可以使用演示密钥。
<?php
$json = file_get_contents('http://api.ip2proxy.com/?ip=8.8.8.8&key=demo&package=PX10');
$arr = json_decode($json, true);
if ($arr['response'] == 'OK') {
if ($arr['proxyType'] == 'VPN') {
echo "IP address is a VPN.\n";
}
else {
echo "IP address is not a VPN.\n";
}
}
else {
echo "Error.\n";
}
?>
首先:没有万无一失的、有保证的 VPN 检测方法。检测 VPN 的一些方法可能是:
取决于他们使用什么来确定用户是通过 VPN 还是代理服务器连接。一种方法是根据已知的 VPN 或代理服务器 IP 范围检查用户连接的 IP 地址。许多 VPN 和代理服务使用静态 IP 地址,很容易被识别并阻止。
另一种方法是执行浏览器指纹识别,检查浏览器中特定于 VPN 或代理的某些属性,如果找到可以确定相同的属性。
此外,可以通过分析网络级信息来检测某些 VPN 服务,例如所使用的协议、发送的数据包的大小和类型以及所使用的特定 VPN 软件或服务。
如果您没有时间为自己构建 VPN 检测系统,您可以将您的网站连接到现有选项(例如 IPQualityScore)的 API 并进行实时查找。