AviatorScript 引擎
PeerBanHelper 允许用户加载 AviatorScript 用户脚本。
简述
AviatorScript 允许用户加载一个用户脚本,以便在 PBH 检测 Peer 时执行自定义的代码。支持反射、实例创建等高级操作,拥有完整编程能力。
有时 PBH 遇到新变种时,在无法发布新版本 PBH 的情况下,会向社区公开 AviatorScript 脚本,以便在不更新 PBH 的情况下进行检查和封禁。
安装 AviatorScript 脚本
AviatorScript 脚本以 .av
结尾。将其放入 data/scripts/
目录即可加载。
制作 AviatorScript 脚本
要使 AviatorScript 脚本可被 PBH 加载,则需要在文件开头加入元数据头:
## @NAME PeerID/ClientName 伪装检查
## @AUTHOR PBH-BTN Community
## @CACHEABLE true
## @VERSION 1.0
## @THREADSAFE true
字段示意:
@NAME
脚本名称@AUTHOR
脚本作者@CACHEABLE
结果是否对相同 Peer 可缓存,如果你的脚本需要对一个 Peer 持续进行检查(而非只检查一次),则需要将其设置为 false。@VERSION
版本号@THREADSAFE
是否是线程安全的脚本
预设变量
一些变量在执行前就已提前注入到 AviatorScript 运行时,您可以直接使用它们,参见配置文件。
返回值
AviatorScript 支持如下返回值。不同的类型和值对应不同的行为:
- String: 以
@
开头:以指定理由跳过其它用户规则 不以@
开头:以指定理由封禁Peer - Boolean:
false
=不采取任何操作true
=封禁Peer - Integer:
0
=不采取任何操作1
=封禁Peer2
=跳过其它用户规则 - com.ghostchu.peerbanhelper.module.PeerAction:
NO_ACTION
=不采取任何操作BAN
=封禁SKIP
=跳过其它用户规则 - com.ghostchu.peerbanhelper.module.BanResult: 按照对象内的描述进行操作
可以查看 src/resources/scripts
中的脚本文件查看真实世界的示例。
配置文件
# 规则引擎,支持 AviatorScript 语言 - User script, support AviatorScript
# 提供在 PBH 上自行编程编写规则的能力 - Provide programming ability on PBH
expression-engine:
# 规则列表 - Rule lists
# 在 AviatorScript 执行时,PBH 会注入以下环境变量,您可以自由使用它们:
# You can feel free use them in AviatorScript files
# peer - 一个 com.ghostchu.peerbanhelper.peer.Peer 对象,您可以使用这个对象下面的任何属性,这些是您可能用到的:
# peer - an com.ghotchu.peerbanhelper.peer.Peer instance, you can access any property under this object, these is you might will used
# peer.peerAddress.ip - 字符串型 IP 地址 - IP address in String
# peer.peerAddress.port - 整型端口号 - Port in int
# peer.peerAddress.address - IPAddress 对象,可提供高级功能 - IPAddress object
# peer.peerId - 字符串型 PeerID,在不支持的下载器上可能为空字符串,使用 isEmpty 判断 - PeerID in String, may be empty string on not supported downloader, check them with isEmpty
# peer.clientName - 客户端名称,在不支持的下载器上可能为空字 符串,使用 isEmpty 判断 - PeerID in String, may be empty string on not supported downloader, check them with isEmpty
# peer.downloadSpeed - 您的下载器从该 Peer 下载数据的速率(bytes) - Download rate from Peer
# peer.uploadSpeed - 您的下载器向该 Peer 上传数据的速率(bytes) - Upload rate to Peer
# peer.downloaded - 您的下载器从该 Peer 下载的数据的累计数据量(bytes),在不支持的下载器上为 -1 - Downloaded bytes from Peer, -1 on not supported downloader
# peer.uploaded - 您的下载器从该 Peer 上传的数据的累计数据量(bytes),在不支持的下载器上为 -1 - Uploaded bytes to Peer, -1 on not supported downloader
# peer.progress - 此 Peer 汇报的自己的下载进度,浮点型数据,0.00=0%,1.00=100% - The percentage that Peer reporting, percent in float
# peer.flags - 由您的下载器汇报的此 Peer 的 Flags 状态,各下载器对其定义可能有所不同, Peer flags
# torrent - 一个 com.ghostchu.peerbanhelper.torrent.Torrent 对象,您可以使用这个对象下面的任何属性 - an com.ghotchu.peerbanhelper.torrent.Torrent instance, you can access any property under this object, these is you might will used
# torrent.id - 在您的下载器内,此 Torrent 的对应内部 ID 标识符 - Torrent Identifier in Downloader internal
# torrent.name - 此 Torrent 的名称 - Torrent name
# torrent.hash - 此 Torrent 的 InfoHash,具体是 v1 还是 v2,由您使用的下载器的偏好而定 - Torrent info hash
# torrent.progress - 您的下载器上,此 Torrent 的任务进度 - Torrent progress on your downloader
# torrent.size - 此 Torrent 的任务大小 - Torrent size
# torrent.rtUploadSpeed - 您的下载器上的此任务的当前上传速率(bytes) - Torrent task upload rate
# torrent.rtDownloadSpeed - 您的下载器上的此任务的当前下载速率(bytes) - Torrent task download rate
# torrent.hashedIdentifier - 此 Torrent 的匿名哈希标识符 - Torrent identifier (generated by PBH for privacy and BTN usage)
# peerbanhelper - PBH 主实例 (Main instance)
# HTTPUtil - 提供脚本对网络的访问能力,但请注意,脚本通常只有 1500ms 的执行时间,网络请求也包含在内 - Util for request network
# JsonUtil - 提供脚本对 JSON 内容的解析能力 - Util for parse Json
# IPAddressUtil - 提供将字符串的 IP/CIDR 转换为 IPAddress 对象的工具 - Util for processing IPAddress
# Main - 启动主类,可用于访问配置文件 - Main instance
# 对于其它的常用函数,语法等,参见 AviatorScript 文档:https://www.yuque.com/boyan-avfmj/aviatorscript/cpow90
# For more details, check AviatorScript documentation: https://www.yuque.com/boyan-avfmj/aviatorscript/cpow90
# 规则引擎支持 AviatorScript 的全部能力,您可以自由使用反射或者动态创建特性
# PBH support full ability, feel free to use reflect or dynamic creating.
#
# 每个规则必须提供一个返回值,PBH 会根据您提供的返回值,决定此 Peer 是否封禁。支持的返回值如下:
# Every single rule must provide a return code, PBH will determine if we need ban this peer, supported return code listed below:
# Boolean: [false=不采取任何操作, true=封禁Peer] - Boolean [false = No action will be taken, true = Peer will be banned]
# Integer: [0=不采取任何操作,1=封禁Peer,2=跳过其它用户规则] - Integer [0 = No action will be taken, 1 = Peer will be banned, 2 = Skip other rules]
# com.ghostchu.peerbanhelper.module.PeerAction: [NO_ACTION, BAN, SKIP]
# com.ghostchu.peerbanhelper.module.BanResult
#
# 所有的脚本文件默认放置在 data/scripts 目录内,您也可以修改已有的、或者新建新的脚本文件
# All script files will put in data/scripts, you can modify exists scripts or create your own scripts/
# 是否启用
enabled: true
# 封禁时间,单位:毫秒,使用 default 则跟随全局设置
ban-duration: default