- 版权类型
- 授权转载
- 插件中文名称
- TFS反假人
- 插件英文名称
- TFS AntiVPN / AntiBOT
- 支持的核心(代理-服务端)
- Bungee
- WaterFall
- Velocity
- Spigot
- PaperSpigot
- Folia
- Purpur
- PufferFish
- Leaves
- 其他核心
- 语言支持
- 多语言
- 适配版本(Java)
- 1.21
- 1.20
- 1.19
- 1.18
- 1.17
- 1.16
- 1.15
- 1.14
- 1.13
- 1.12
- 1.11
- 1.10
- 1.9
- 1.8
- 1.7
[MD]
# [功能介绍]
## 最先进的方法
TFS AntiVPN 并不基于游戏内的行为判断,而是采用最先进的人工智能技术,
包括图形神经网络 (GNN) 和混合专家 (MoE) 检测玩家 IP 的可信度,具有无与伦比的检测能力。
## 无与伦比的查询性能
TFS AntiVPN 专为高速环境设计,每秒可轻松处理 **数百万次查询 **(MQPS),单线程每次查询处理时间仅为 4 微秒。
## 闪电般快速的延迟
TFS AntiVPN 采用离线数据库模式,可确保将延迟降至最低,是延迟敏感型环境的最佳选择。
## 准确性值得信赖
**83%** 的住宅代理检测率
**98%** 的开放代理检测率
更重要的是:许多未检测到的代理服务器根本无法使用,这意味着实际准确率甚至比报告的还要高。
阻止黑客和机器人
## 无与伦比的跨平台兼容性
TFS AntiVPN 与所有主要服务器平台无缝集成,
包括 *Bukkit*、*Spigot*、*Paper*、*Folia*、*Bungee*、*Velocity* 和 *Nukkit*。
## 没有隐藏费用,只有高级保护
与其他项目不同,TFS AntiVPN 没有任何额外等级或费用。普通计划可让您完全离线访问我们的世界级数据库。
唯一的限制是透明的--您无法访问原始风险级别--只能根据您的阈值设置获得简单的布尔结果。
## 免费 API - 使用范围超出 Minecraft
您的解决方案需要 AntiVPN 库吗?TFS AntiVPN 的 API 是免费的,即使没有服务器软件也可使用。
无论您是运行游戏服务器还是构建应用程序,TFS AntiVPN 都能满足您的需求。
# 命令及配置
/avpn help : 显示帮助
/avpn reload : 重新加载配置
/avpn trust :信任一个 IP 地址
/avpn untrust :取消信任一个 IP 地址
avpn.command:使用命令。
## 配置文件
```yaml
# TFS Anti-VPN Configuration File
# --------------------------------- | Filtering rules | ---------------------------------
# Filter out the connections with a risk score higher than the threshold
# Typically, this value ranges from 0.0 to (no theoretical upper limit)
# The typical risk scores
# A real user: 0.2~0.8
# A "bypassing proxy" user: 1.0~5.0
# A typical VPN user: 5.0~20.0
# A typical open proxy user: 10.0~50.0
threshold: 1.0
# If we should allow a connection if we can't determine the risk score
# This is usually because:
# 1) The IP address is recently registered
# 2) The IP address is recently been assigned to a new owner
allow_unknown: false
# If we should allow a connection from a IPv6 addresses
# We are working really hard to support IPv6, but it's still not available yet :/
allow_ipv6: false
# ------------------------------------ | Languages | ------------------------------------
kick_message: "Connection lost"
```
## 为开发者准备的 API
```java
package iprisk;
import java.io.File;
import java.lang.reflect.Method;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.Scanner;
public class Play {
public static void main(String[] args) throws Exception {
File f = new File("AntiVPN.jar");
URLClassLoader classLoader = new URLClassLoader(new URL[]{f.toURI().toURL()});
Class<?> clazz = classLoader.loadClass("the.flare.star.ap.neutral.IpInfo");
Method m = clazz.getMethod("shouldAllow", String.class, double.class, boolean.class);
int hits = 0;
int misses = 0;
Scanner sc = new Scanner(new File("residental.txt"));
while (sc.hasNextLine()) {
String[] parts = sc.nextLine().split("//");
String ip = parts[parts.length - 1];
parts = ip.split(":");
ip = parts[0];
boolean shouldAllow = m.invoke(null, ip, 1, false).equals(true);
if (shouldAllow) {
misses++;
} else {
hits++;
}
}
sc.close();
double hitRate = (double) hits / (hits + misses);
System.out.println("Hit rate: " + String.format("%.2f", hitRate * 100) + "%");
long start = System.currentTimeMillis();
for (int i = 0; i < 1000000; i++) {
m.invoke(null, "1.1.1.1", 1, false);
}
long end = System.currentTimeMillis();
System.out.println("Time: " + ((end - start) / 1000.0) + "us per query");
}
}
```
[/MD]
# [功能介绍]
## 最先进的方法
TFS AntiVPN 并不基于游戏内的行为判断,而是采用最先进的人工智能技术,
包括图形神经网络 (GNN) 和混合专家 (MoE) 检测玩家 IP 的可信度,具有无与伦比的检测能力。
## 无与伦比的查询性能
TFS AntiVPN 专为高速环境设计,每秒可轻松处理 **数百万次查询 **(MQPS),单线程每次查询处理时间仅为 4 微秒。
## 闪电般快速的延迟
TFS AntiVPN 采用离线数据库模式,可确保将延迟降至最低,是延迟敏感型环境的最佳选择。
## 准确性值得信赖
**83%** 的住宅代理检测率
**98%** 的开放代理检测率
更重要的是:许多未检测到的代理服务器根本无法使用,这意味着实际准确率甚至比报告的还要高。
阻止黑客和机器人
## 无与伦比的跨平台兼容性
TFS AntiVPN 与所有主要服务器平台无缝集成,
包括 *Bukkit*、*Spigot*、*Paper*、*Folia*、*Bungee*、*Velocity* 和 *Nukkit*。
## 没有隐藏费用,只有高级保护
与其他项目不同,TFS AntiVPN 没有任何额外等级或费用。普通计划可让您完全离线访问我们的世界级数据库。
唯一的限制是透明的--您无法访问原始风险级别--只能根据您的阈值设置获得简单的布尔结果。
## 免费 API - 使用范围超出 Minecraft
您的解决方案需要 AntiVPN 库吗?TFS AntiVPN 的 API 是免费的,即使没有服务器软件也可使用。
无论您是运行游戏服务器还是构建应用程序,TFS AntiVPN 都能满足您的需求。
# 命令及配置
/avpn help : 显示帮助
/avpn reload : 重新加载配置
/avpn trust :信任一个 IP 地址
/avpn untrust :取消信任一个 IP 地址
avpn.command:使用命令。
## 配置文件
```yaml
# TFS Anti-VPN Configuration File
# --------------------------------- | Filtering rules | ---------------------------------
# Filter out the connections with a risk score higher than the threshold
# Typically, this value ranges from 0.0 to (no theoretical upper limit)
# The typical risk scores
# A real user: 0.2~0.8
# A "bypassing proxy" user: 1.0~5.0
# A typical VPN user: 5.0~20.0
# A typical open proxy user: 10.0~50.0
threshold: 1.0
# If we should allow a connection if we can't determine the risk score
# This is usually because:
# 1) The IP address is recently registered
# 2) The IP address is recently been assigned to a new owner
allow_unknown: false
# If we should allow a connection from a IPv6 addresses
# We are working really hard to support IPv6, but it's still not available yet :/
allow_ipv6: false
# ------------------------------------ | Languages | ------------------------------------
kick_message: "Connection lost"
```
## 为开发者准备的 API
```java
package iprisk;
import java.io.File;
import java.lang.reflect.Method;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.Scanner;
public class Play {
public static void main(String[] args) throws Exception {
File f = new File("AntiVPN.jar");
URLClassLoader classLoader = new URLClassLoader(new URL[]{f.toURI().toURL()});
Class<?> clazz = classLoader.loadClass("the.flare.star.ap.neutral.IpInfo");
Method m = clazz.getMethod("shouldAllow", String.class, double.class, boolean.class);
int hits = 0;
int misses = 0;
Scanner sc = new Scanner(new File("residental.txt"));
while (sc.hasNextLine()) {
String[] parts = sc.nextLine().split("//");
String ip = parts[parts.length - 1];
parts = ip.split(":");
ip = parts[0];
boolean shouldAllow = m.invoke(null, ip, 1, false).equals(true);
if (shouldAllow) {
misses++;
} else {
hits++;
}
}
sc.close();
double hitRate = (double) hits / (hits + misses);
System.out.println("Hit rate: " + String.format("%.2f", hitRate * 100) + "%");
long start = System.currentTimeMillis();
for (int i = 0; i < 1000000; i++) {
m.invoke(null, "1.1.1.1", 1, false);
}
long end = System.currentTimeMillis();
System.out.println("Time: " + ((end - start) / 1000.0) + "us per query");
}
}
```
[/MD]