Proxy 如何检测VPN或代理连接?
我想阻止与使用VPN或代理的服务器的所有连接。是否仍然可以检测到正在使用VPN或代理连接?如果没有,我是否可以检查使用VPN或代理的可能性?最后,我是否可以查询或提示用户检查他们是否使用VPN或代理,以便如果有人通过,我可以尝试执行其他验证?我不需要用户提供任何信息,如位置、真实IP或类似信息。我只想完全禁止来自VPN或代理的连接 编辑:我一直在想,我可能会运行一个测试,看看ping到VPN IP和客户端的可检测延迟之间是否存在一致的差异,但这听起来非常不可靠Proxy 如何检测VPN或代理连接?,proxy,vpn,Proxy,Vpn,我想阻止与使用VPN或代理的服务器的所有连接。是否仍然可以检测到正在使用VPN或代理连接?如果没有,我是否可以检查使用VPN或代理的可能性?最后,我是否可以查询或提示用户检查他们是否使用VPN或代理,以便如果有人通过,我可以尝试执行其他验证?我不需要用户提供任何信息,如位置、真实IP或类似信息。我只想完全禁止来自VPN或代理的连接 编辑:我一直在想,我可能会运行一个测试,看看ping到VPN IP和客户端的可检测延迟之间是否存在一致的差异,但这听起来非常不可靠 Edit2:代理服务器或VPN服务
Edit2:代理服务器或VPN服务器打开的端口可能比标准家庭连接多得多,因此我可以使用打开的端口数,通过运行连接人的端口扫描来帮助评估连接来自VPN的可能性。不幸的是,没有适当的技术方法来获取所需信息。您可能会发明一些测试,但这些测试与现实的相关性很低。所以要么你抓不到你想要的,要么你会有更多的误报。这两种说法都没有道理 通常不赞成从Internet服务器向后生成任何类型的流量以响应传入的客户端(端口扫描,甚至简单的ping)。或者,在端口扫描的情况下,对您来说可能更糟,例如当客户端位于中央公司防火墙后面时,最糟糕的情况是当客户端来自中央政府网络防火墙池后面时
坦率地说,基于IP的禁令(或者实际上,针对不完全拥有其公共IP地址的人的任何形式的限制:代理服务器、VPN、NAT设备等)在很长一段时间内都是不现实的,而且随着IPv4池在世界许多地区的耗尽,ISP将越来越多的客户置于大型NAT池之后(这是我国本周的新闻,德国电信的子公司,最大的ISP已经开始向客户提供私有IPv4地址作为标准的业务方式,人们必须明确要求提供商获得公共IP地址),因此,这样做的意义越来越小。如果要禁止客户端,应基于身份(帐户),而不是基于IP地址来禁止它们。您可以下载已知代理IP地址的列表,并在本地查找以查看是否为VPN,打开代理ETC
市场上有几种商品。是一个免费的,您可以立即尝试。最简单的方法是使用外部服务(如API)阻止VPN或代理用户 两者都是通过API提供的,您可能想尝试一下。GetIPIntel提供免费的API服务,所以我建议您先试试 对于OpenVPN,但设置很复杂,现在可能需要“修补” 你在编辑中提到的策略似乎不是一个好主意,因为你会遇到许多误报。每当端口扫描连接到您的服务时,发送端口扫描都需要花费大量的时间和资源才能得到结果。
- 获取(以某种方式)代理服务器的IP列表
- 测量到用户的往返ping时间。帮助在线websocket游戏。游戏可在50毫秒以下进行ping,因此您可以通过“对不起,ping太大”消息断开ping时间在100毫秒及以上的用户连接
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))
Tor出口节点的列表为。您只需要“退出节点”,它可以作为CSV提供。这应该是100%完整和准确的,因为它是直接从Tor目录生成的
可以从中获得免费的开放代理列表。一个免费列表,其中包含来自的开放代理、Tor节点和VPN端点
最后两个很可能覆盖范围和准确性有限,特别是在VPN出口节点方面——它们太多了。一些提供商采取另一种方法,考虑所有的“托管子网”(从ISP为其托管服务器分配其客户端IP的子网)作为某种VPN或代理,因为最终用户应该从“消费者”子网连接。 < P>在IPinfo,我们提供了一个,它将让您知道连接是否来自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!";
}
端口扫描VPN服务器是将自己列入黑名单的好方法。问题是你为什么要阻止人们代理请求?是一个Web服务器还是只是一些随机的套接字连接?我运行一个游戏服务器。没有人使用代理或VPN,除非是为了躲避IP禁令。@bvdb我运行的是一个Web服务器和游戏服务器。很多人出于其他原因使用VPN——比如居住在全国各地街区的外国人。有些区块甚至包括游戏网站,但我认为这通常是针对赌博相关网站。不幸的是,玩家可以随时更改任何标识符,因此基于他们的“身份”禁止根本没有帮助。@ZachSugano你可以要求他们创建一个帐户并验证他们的电子邮件地址。如果他们删除所有cookie并创建新帐户,你没有办法阻止他们。@ZachSugano好吧,如果你让他们支付一些小额费用,比如说Paypal支付0.50美元,你将拥有他们的身份,而不是那么容易伪造或伪造