Proxy 如何检测VPN或代理连接?

Proxy 如何检测VPN或代理连接?,proxy,vpn,Proxy,Vpn,我想阻止与使用VPN或代理的服务器的所有连接。是否仍然可以检测到正在使用VPN或代理连接?如果没有,我是否可以检查使用VPN或代理的可能性?最后,我是否可以查询或提示用户检查他们是否使用VPN或代理,以便如果有人通过,我可以尝试执行其他验证?我不需要用户提供任何信息,如位置、真实IP或类似信息。我只想完全禁止来自VPN或代理的连接 编辑:我一直在想,我可能会运行一个测试,看看ping到VPN IP和客户端的可检测延迟之间是否存在一致的差异,但这听起来非常不可靠 Edit2:代理服务器或VPN服务

我想阻止与使用VPN或代理的服务器的所有连接。是否仍然可以检测到正在使用VPN或代理连接?如果没有,我是否可以检查使用VPN或代理的可能性?最后,我是否可以查询或提示用户检查他们是否使用VPN或代理,以便如果有人通过,我可以尝试执行其他验证?我不需要用户提供任何信息,如位置、真实IP或类似信息。我只想完全禁止来自VPN或代理的连接

编辑:我一直在想,我可能会运行一个测试,看看ping到VPN IP和客户端的可检测延迟之间是否存在一致的差异,但这听起来非常不可靠


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毫秒及以上的用户连接

是的,您可以使用来检测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))
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美元,你将拥有他们的身份,而不是那么容易伪造或伪造