我想阻止使用VPN或代理的服务器的所有连接。无论如何都检测到正在使用VPN或代理连接?如果没有,无论如何我可以检查VPN或代理的使用可能性吗?最后,是否有任何我可以查询或提示用户检查他们是否使用VPN或代理,以便如果有人通过,我可以尝试执行其他验证?我不需要用户提供任何信息,例如位置,真实IP或类似的信息。我只想完全禁止来自VPN或代理的连接。
编辑:我一直在想我可能会运行测试,看看ping到VPN IP与客户端的可检测延迟之间是否存在一致的差异,但这听起来非常不可靠。
Edit2:代理服务器或VPN服务器可能比标准家庭连接打开的端口多得多,因此我可以使用打开的端口数来帮助通过运行端口扫描来测量来自VPN的连接的可能性人连接。
答案 0 :(得分:15)
不幸的是,没有适当的技术方法来获取您想要的信息。您可能会发明一些测试,但这些测试与现实的相关性非常低。所以要么你没有抓住你想要的那些,要么你会有更多的误报。两者都没有被认为是有意义的。
通常不赞成从Internet服务器向后生成任何类型的流量以响应传入的客户端(端口扫描,甚至是简单的ping)。或者,在端口扫描的情况下,对您来说可能更糟糕,例如当客户端位于中央企业防火墙后面时,最糟糕的是客户端来自中央政府网络防火墙池后面...... < / p>
坦率地说,基于IP的禁令(或者实际上,任何类型的限制都集中在那些并非专门拥有其公共IP地址的人:代理服务器,VPN,NAT设备等)长期以来一直是不现实的,并且世界上许多地方的IPv4池已经枯竭,互联网服务提供商正在将越来越多的客户置于大型NAT池之后(本周我国最新的ISP,德意志电信的子公司,已经开始发布私有IPv4的消息)地址作为其客户的标准业务方式,人们必须明确要求提供商获取公共IP地址),因此这样做的目的越来越少。如果您想禁止客户,您应该根据身份(帐户)禁止它们,而不是基于IP地址。
答案 1 :(得分:6)
在IPinfo,我们提供了privacy detection API,它可以让您知道连接是来自VPN,匿名代理,tor出口节点还是托管提供商(可用于建立流量) 。这是一个示例:
$ curl ipinfo.io/43.241.71.120/privacy?token=$TOKEN
{
"vpn": true,
"proxy": false,
"tor": false,
"hosting": true
}
如果您想阻止从VPN到站点的连接,则可以发出API请求以获取此信息,并在检测到VPN时返回错误。在PHP中看起来像这样:
$ip = $_SERVER['REMOTE_ADDR'];
$url = "http://ipinfo.io/{$ip}/privacy?token={$IPINFO_API_TOKEN}";
$details = json_decode(file_get_contents($url));
// Just block VPNs
if($details->vpn) {
return echo "VPN Access Blocked!";
}
// Or we could block all the other types of private / anonymous connections...
if($details->vpn || $details->proxy || $details->tor || $details->hosting) {
return echo "Access Blocked!";
}
答案 2 :(得分:3)
最简单的方法是使用API之类的外部服务来阻止VPN或代理用户。
MaxMind和GetIPIntel都通过API提供,您可能需要尝试一下。 GetIPIntel提供免费的API服务,所以我建议你先试试。
对于OpenVPN,someone used unique MSS values to identify VPN connections但设置很复杂,可能会修补&#34;现在
您在编辑中提到的策略似乎不是一个好主意,因为您会遇到许多误报。在连接到您的服务时发送端口扫描将在您获得结果之前花费大量时间和资源。
答案 3 :(得分:2)
您可以使用能够跟踪IP地址的网络API,例如:http://xioax.com/host-blocker/
甚至还有Java Library:https://github.com/HiddenMotives/Java-VPNDetection
答案 4 :(得分:1)
是的,您可以使用Shodan检测IP是否属于VPN /代理。以下Python代码显示了如何执行此操作:
import shodan
# Setup the API wrapper
api = shodan.Shodan('YOUR API KEY') # Free API key from https://account.shodan.io
# Lookup the list of services an IP runs
ipinfo = api.host(VISITOR_IP)
# Check whether the IP runs a VPN service by looking for the "vpn" tag
if 'tags' in ipinfo and 'vpn' in ipinfo['tags']:
print('{} is connecting from a VPN'.format(VISITOR_IP))
您还可以查看端口列表,以确定访问者从HTTP代理连接的可能性:
if 8080 in ipinfo['ports']:
print('{} is running a web server on a common proxy port'.format(VISITOR_IP))
答案 5 :(得分:0)
答案 6 :(得分:0)
您可以下载已知代理IP地址列表并在本地查找以查看它是否为VPN,开放代理等。
市场上有几种商业产品。 IP2Proxy LITE是免费的,你可以立即尝试。
答案 7 :(得分:0)
Tor出口节点的列表为publicly available。您只需要“退出节点”,它可以CSV格式提供。它应该是100%完整且准确的,因为它是直接从Tor目录中生成的。
iblocklist.com提供了免费的开放代理列表。一个免费列表,其中包含来自ip2location.com的开放代理,Tor节点和VPN端点。
最后两个覆盖范围和准确性极有可能受到限制,尤其是在涉及VPN出口节点时-它们太多了。一些提供商采用另一种方法,并将所有“托管子网”(ISP从其为客户端分配客户端IP的子网作为托管服务器的子网)视为某种VPN或代理,因为最终用户应从“消费者”子网进行连接。
答案 8 :(得分:-1)