pt全名Private Tracker。很简单的说,就是“点”对”点“的文件传输,其中“点”可以理解为个人电脑。点与点的连接那就是pt站上的种子了。玩pt的宗旨是我为人人,人人为我。所以各大pt站的宗旨基本上都是不养闲人,如果你的上传量或者分享率低于一定数值就会封号。而鉴于国内目前家宽上传带宽不对等,最好的解决方法就是通过服务器来刷pt。而我又是个懒人,不想每天添加/删除种子,太麻烦了,所以找了一套完整的全自动刷pt流程,现记录如下。

一、服务器选择

一般优先选择美、欧的服务器,毕竟大家做种的机器一般是德国或者美国,离的近速度快点。配置上独服为佳,刷pt还挺吃服务器性能的,如果是amd锐龙的cpu那一核应该够了,如果是上古e5的那种洋垃圾建议至少2核以上。内存2G左右就足够了,硬盘越大越好,但要保证硬盘io,2tb的石头盘不如40GB的nvme硬盘,切记!

hetzner netcup等德国商家都不错,尤其是hz基本上都成了pt盒子专用服务器供应商了。但要注意某些pt站(比如馒头)会直接标记hz的IP为盒子IP,有不享受免费下载,分享率限制为3倍等限制。毕竟家宽用户抢上传不可能抢的过服务器用户,这也是为了平衡pt环境的无奈之举。如果IP被标记了也不用慌,连个代理就可以了。还有些小众商家也不错,就不一一推荐了。

二、准备工作系统环境 Debian11

1.启用BBR(Debian内核默认编译了bbr,直接启用即可)

echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf sysctl -p

2.安装Qbittorrent

apt-get update apt install qbittorrent-nox

3.启用Qbittorrent

qbittorrent-nox -d

到此为止,你可以通过浏览器打开 你的IP:8080 来登陆qb的web面板了,默认账号是admin,密码是adminadmin,请及时更改。

三、配置自动刷流

采用vertex进行管理,项目地址

docker安装见官方wiki页面

安装完成后打开你的IP:3000即可打开控制面板。

基本的刷pt流程为:通过rss获取种子列表=> 根据选种子规则,如果不满足规则删除,如果满足规则即添加至下载器(之前安装的qbittorrent)=> 开始下载,下载过程中判断种子是否满足删种规则,满足则删除,不满足则继续下载=> 下载完成后开始做种,做种至无上传流量则按规则自动删除并释放磁盘空间

下面详细介绍配置流程

1.在pt站获取rss链接

一般在pt站的右上角可以看到rss链接的图标

rss图标

选择你要的种子分类即可获取rss链接。需要注意的是,一般pt站会提供两个链接,这时候选择提示为“你可以在支持RSS訂閱功能的BT客戶端(如uTorrent)使用以下URL:”的这个链接(一般是第二个)。

2.配置Rss选种规则

Rss选种规则是用来判断是否添加种子到客户端,主要选择条件为种子大小和关键词。

在vertex界面选择右边任务栏—规则组件—rss规则

以下为规则举例,可根据需要自行更改

#仅添加10-100G范围内官种

别名: 官种-10-100

类型: 普通

条件:

  - 种子大小 - 大于 - 10*1024*1024*1024

  - 种子大小 - 小于 - 100*1024*1024*1024

  - 种子名称 - 包含 - Hares

3.配置删种规则

这部分是刷流的重要部分,配置好的删种规则可以起到事半功倍的效果。

!!不要在保种客户端运行任何删种规则,删除的种子不可恢复

Vertex自定义删种规则

节选自 殊途

(1)无效做种

无效做种是针对做种超过一个半小时的时候,并且上传小于512kb的种子。如果下载或者做种的种子本身过多,自行修改

(maindata, torrent) => {
const categoryList = ["keep"];
const stateList = ["uploading", "stalledUP"];
const { state, uploadSpeed, category, completedTime } = torrent;
if (categoryList.indexOf(category) !== -1) {
return false;
}
if (
stateList.indexOf(state) !== -1 &&
uploadSpeed <= util.calSize(512, "KiB") &&
moment().unix() - completedTime >= 5400
) {
return true;
}
return false;
};

(2)分享率

(maindata, torrent) => {
    const categoryList = [
        "keep",
        "chdbits",
        "ourbits",
        "hdhome",
        "lemonhd",
        "pter",
        "audiences",
        "hdchina",
        "hdsky",
        "hddolby",
    ];
    const { uploaded, size, category } = torrent;
    if (categoryList.includes(category)) {
        return false;
    }
    if (uploaded / size >= 3) {
        return true;
    }
    return false;
};

分享率达到3删种,更改categoryList参数即可

(3)最长下载时间

最长下载时间到达16小时自动删种

(maindata, torrent) => {
    const categoryList = ["keep"];
    const stateList = ["downloading", "stalledDL"];
    const { state, addedTime, category, uploadSpeed } = torrent;

    if (categoryList.includes(category)) {
        return false;
    }

    if (
        stateList.includes(state) &&
        moment().unix() - addedTime >= 57600 &&
        uploadSpeed <= util.calSize(5, "MiB")
    ) {
        return true;
    }

    return false;
};

(4)慢车,持续40秒

1.在0点-8点这个时间段,种子数量小于10个时跳过,下载人数大于100时跳过,保证夜间不误删,能有足够的种子。
2.进度大于10%,上传速度小于250kb持续40的跳车。

(maindata, torrent) => {
    const categoryList = ["keep"];
    const stateList = ["downloading", "stalledDL"];
    const { state, uploadSpeed, progress, category, leecher } = torrent;

    if (categoryList.includes(category)) {
        return false;
    }

    if (
        (moment().hour() >= 0 && moment().hour() <= 8) ||
        maindata.leechingCount <= 10 ||
        leecher >= 100
    ) {
        return false;
    }

    if (
        stateList.includes(state) &&
        uploadSpeed <= util.calSize(250, "KiB") &&
        progress >= 0.1
    ) {
        return true;
    }

    return false;
};

(5)长时间未开始

1.删除0-8点这个时间段,超过五小时并且进度小于5%的种子。
2.删除常规时间段,超过四小时并且进度小于5%的种子。

(maindata, torrent) => {
    const categoryList = ["keep"];
    const { state, category, progress, addedTime } = torrent;

    if (categoryList.includes(category)) {
        return false;
    }

    if (
        moment().hour() >= 0 &&
        moment().hour() <= 8 &&
        state === "stalledDL" &&
        progress <= 0.05 &&
        moment().unix() - addedTime >= 18000
    ) {
        return true;
    }

    if (
        state === "stalledDL" &&
        progress <= 0.05 &&
        moment().unix() - addedTime >= 14400
    ) {
        return true;
    }

    return false;
};

(6)空一小时跳车

(maindata, torrent) => {
    const categoryList = ["keep"];
    const { state, category, progress } = torrent;
    const { eta } = torrent.originProp;

    if (categoryList.includes(category)) {
        return false;
    }

    if (
        state === "downloading" &&
        category === "hdsky" &&
        progress >= 0.05 &&
        progress <= 0.2 &&
        (eta / 60) <= 70
    ) {
        return true;
    }

    return false;
};

4.添加RSS任务

vertex侧边栏 任务配置-rss任务

按要求配置即可。

注意:部分站点有流控,rss链接不能短时间内请求太多次数。比如馒头只能6分钟请求一次,请留意社区规则

四、配置通知工具

以telegram bot为例

1.在@botfather处新建一个bot,记录下token

2.新建一个频道

3.在频道里随便发一条信息,然后转发到 @getmyid_bot 即可获取频道chat ID

4.重复步骤三,给每个下载器创建一个单独的监控频道和一个独立的通知频道。因为telegram api限制,如果多个下载器共用一个监控频道会报错

5.在vertex 下载器配置里填入token和ID即可

五、小结

刷pt比我想象中更吃服务器性能,netcup 4核8G的root serve基本上在上传流量跑到几十mb/s的时候负载就满了,cpu占用基本在60%以上,垃圾小鸡就别干这个了,等会儿别因为长期占用cpu/带宽被清退了...