V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
SHF
V2EX  ›  分享发现

uTorrent 自动屏蔽迅雷脚本(uTorrent block xunlei/thunder)

  •  3
     
  •   SHF · 2018-11-19 17:10:27 +08:00 · 14825 次点击
    这是一个创建于 2201 天前的主题,其中的信息可能已经有所发展或是发生改变。

    uTorrent 自动屏蔽迅雷脚本

    GitHub: https://github.com/ShenHongFei/utorrent-block-xunlei

    方法

    1. 根据 uTorrent 的 WebUI API 发送 http request 获取到所有种子的 peers 信息
    2. 按照 client name 筛选出使用迅雷的 peer IP,写入 ipfilter.dat 文件
    3. 发送 http request 让 uTorrent 重新加载 ipfilter.dat

    屏蔽列表

    -XL0012-***

    Xunlei/***

    7.x.x.x

    Xfplay

    效果

    每隔一段时间,已连接用户中使用迅雷客户端的 IP 将会被封锁

    脚本

    utorrent=
        init: ->
            @root_url= 'http://127.0.0.1:10000/gui/'
            @cookies= request.jar()
            token_html = await request
                uri: @root_url + 'token.html'
                auth:
                    user: 'admin'
                    pass: 'xxxxxx'
                jar: @cookies
            $ = cheerio.load token_html
            @token = $('div').text()
            await @get_torrents()
            
        call: ({api='', params, method='GET'}={})->
            JSON.parse await request
                uri: @root_url + api
                method: method
                qs:{
                    token: @token
                    params...
                }
                auth:
                    user: 'admin'
                    pass: 'xxxxxx'
                jar: @cookies
        
        get_torrents: -> 
            @torrents = (await @call params: list: 1).torrents
            @hashes = @torrents.map (x)-> x[0]
            
        get_peers: (hash)->
            resp = await @call params:
                action: 'getpeers'
                hash: hash
            resp.peers
        
        get_all_peers: ->
            peers = []
            for hash in @hashes
                peers.append((await @get_peers hash)[1])
            for peer in peers
                ip: peer[1]
                client: peer[5]
            
        block_xunlei: ->
            peers = await @get_all_peers()
            blocks = peers.filter (x)-> x.client.match /(-XL0012-)|(Xunlei)|(^7\.)|(Xfplay)/i
            if blocks.isEmpty()
                log 'no xunlei clients detected'
                log peers
                return
            else
                log blocks
            ipfilter = new File 'C:/Users/shf/AppData/Roaming/uTorrent/ipfilter.dat'
            ipfilter.data += (x.ip for x in blocks).join('\n') + '\n'
            ipfilter.save()
            log 'ipfilter.dat updated'
            await @call params:
                action: 'setsetting'
                s: 'ipfilter.enable'
                v: '1'
            log 'ipfilter.dat reloaded'
    
        run: ->
            await @init()
            await @block_xunlei()
            @task = setInterval => 
                await @block_xunlei()
            , 3*60*1000
    
            
        stop: ->
            @task.clearInterval()
    

    日志

    未检测到迅雷时

    no xunlei clients detected
    当前已连接 peers
    [ { ip: '180.94.154.163', client: 'µTorrent/3.5.4.0' },
      { ip: '223.140.248.38', client: 'BitComet 1.53' },
      { ip: '101.88.108.19', client: 'µTorrent/2.2.1.0' },
      { ip: '39.161.242.50', client: 'Unknown FD/5.1.0.0' },
      { ip: '171.88.70.72', client: 'Transmission 2.94' },
      { ip: '218.79.69.196', client: '[FAKE] µTorrent/3.0.0.0' },
      { ip: '123.204.251.13', client: 'BitComet 1.51' },
      { ip: '118.150.188.121', client: 'μTorrent 3.5.3' },
      { ip: '118.150.188.121', client: 'μTorrent 3.5.3' },
      { ip: '118.150.188.121', client: 'μTorrent 3.5.3' } ]
    [ { ip: '222.164.100.163', client: '7.9.34.4908' } ]
    

    检测到迅雷时

    使用迅雷的 peers
    [ { ip: '183.25.54.216', client: '-XL0012-溶 S 鑋亾#+4 厓' } ]
    reading C:/Users/shf/AppData/Roaming/uTorrent/ipfilter.dat
    wrote C:/Users/shf/AppData/Roaming/uTorrent/ipfilter.dat
    ipfilter.dat updated
    ipfilter.dat reloaded
    

    uTorrent Log

    [2018-11-19 16:50:25] Loaded ipfilter.dat (51 entries)

    第 1 条附言  ·  2018-12-24 15:12:23 +08:00
    v1.0 正式发布:
    1. 发布压缩包,解压修改配置后可直接运行。
    2. 修改屏蔽逻辑
    3. 减少 ipfilter.dat 文件的读写

    下载及使用说明见 https://github.com/ShenHongFei/utorrent-block-xunlei
    另有 Python 脚本的实现(见 #34 楼),感谢 @fengyeso
    38 条回复    2019-10-11 03:57:38 +08:00
    zmj1316
        1
    zmj1316  
       2018-11-19 17:32:28 +08:00
    这个好,可惜 utorrent 的 web API 上次爆出漏洞,不太敢开了......
    SHF
        2
    SHF  
    OP
       2018-11-19 17:51:59 +08:00
    @zmj1316 怕危险的话限制来源 IP 为 本机 IP 127.0.0.1 就可以仅本机访问了,uTorrent 设置 > 高级 > 只允许下列 IP 地址 访问。
    kslr
        3
    kslr  
       2018-11-19 19:07:35 +08:00 via Android
    目前有数据分析吗?迅雷比例是多少
    Vanctol
        4
    Vanctol  
       2018-11-19 19:58:13 +08:00 via iPhone
    Nice. 其他下载软件有这个功能吗? 比如 fdm
    SHF
        5
    SHF  
    OP
       2018-11-19 20:10:59 +08:00
    @kslr 不同的种子迅雷的比例不太一样,国外的种子比较少,国内的 60% 都是吸血雷。你可以随便找个种子下载,看看用户列表就有直观感受了。
    xxhjkl
        6
    xxhjkl  
       2018-11-19 20:16:04 +08:00
    这么使用啊 这个脚本
    SHF
        7
    SHF  
    OP
       2018-11-19 20:18:07 +08:00
    @Vanctol FDM 是基于 Aria2 的,我看了看 Aria2 的 repo 里有人体力这个 issue 但是没解决,估计没有这个功能。https://github.com/aria2/aria2/issues/1146
    qBittorrent 有一个 Enhanced Edition 也可以自动屏蔽迅雷,但是试了很多次 qBittorrent 比 uTorrent 慢太多了,跑不满带宽。
    SHF
        8
    SHF  
    OP
       2018-11-19 20:19:10 +08:00
    @xxhjkl 需要一些编程基础,暂时没有那种一键就能用的。
    yanghong502
        9
    yanghong502  
       2018-11-19 22:02:57 +08:00
    ……之前在 pt 站的客户端列表看到一个迅雷。
    Wenpo
        10
    Wenpo  
       2018-11-20 01:30:51 +08:00 via Android
    屏蔽了又怎样呢
    lovestudykid
        11
    lovestudykid  
       2018-11-20 02:03:39 +08:00
    迅雷客户端不给 bt 网络上传吗?
    vB4h3r2AS7wOYkY0
        12
    vB4h3r2AS7wOYkY0  
       2018-11-20 02:18:32 +08:00
    另外还有一个 qBittorrent 的也挺好用
    https://github.com/c0re100/qBittorrent-Enhanced-Edition/releases
    xmtudgzy
        13
    xmtudgzy  
       2018-11-20 06:53:50 +08:00
    就是因为 uTorrent 2.2.1 不能屏蔽渣雷为首的吸血鬼,所以在公网 BT 上不敢用这个客户端 。
    大声的问一句:老师,你这个脚本该怎么用?
    chih758
        14
    chih758  
       2018-11-20 09:18:09 +08:00 via Android
    chih758
        15
    chih758  
       2018-11-20 09:19:27 +08:00 via Android
    好东西,我研究下看能不能移植到 qBittorrent 的 webUI
    Removable
        16
    Removable  
       2018-11-20 09:30:16 +08:00
    @yanghong502 #9 啊?是怎么通过验证的?
    SHF
        17
    SHF  
    OP
       2018-11-20 10:24:18 +08:00
    @lovestudykid 是的,吸血雷只从 BT 网络下载资源,然后只在迅雷用户之间内部分享(也许先分享给开了会员的人),破坏了 P2P 网络的公平性。
    SHF
        18
    SHF  
    OP
       2018-11-20 10:25:57 +08:00
    @MayKiller qBittorrent 比 uTorrent 慢太多了,跑不满带宽,你可以用一个热门的种子比如 ubuntu 镜像的种子试试,我这 qBittorrent 最快只有带宽的 30%,而 utorrent 能到带宽的 80% 以上。
    edsheeran
        19
    edsheeran  
       2018-11-20 10:37:04 +08:00 via iPhone
    @SHF tracker 問題?
    SHF
        20
    SHF  
    OP
       2018-11-20 10:40:45 +08:00
    @edsheeran 应该是 tracker 没有把迅雷的 client id 检测出来然后屏蔽掉,反而正常把其它做种的 peers 的 IP 给返回了。
    imn1
        21
    imn1  
       2018-11-20 11:14:50 +08:00
    这其实是个哲学话题
    有两个圈子,BT 和 XL,XL 从 BT 获取资源,但没有反向分享
    但不能说 XL 完全没有分享,XL 平台是有向 XL 圈子分享的,否则 BT 无源的老旧资源,XL 也下载不了
    所以说,只是两个圈子打架的事

    其实我自己也在做类似的行为,我从 BT 下载(限速上传),但却扔到 emule 里面上传(下载极少,上传带宽多两倍)
    我这样做是因为 emule 可以一次挂着上千个文件,BT 做不到(或者说机器承受不了),但从 BT 用户角度,我这也是在吸血

    这个事情看立场、角度如何吧

    @SHF
    我 qbt 长期 10+MB/s,不知道你为何会慢
    Cu635
        22
    Cu635  
       2018-11-20 16:21:10 +08:00
    @imn1
    胡扯哲学话题。
    “ XL 平台是有向 XL 圈子分享的”这就叫吸血。
    这就和这件事性质一样:你的朋友管你借钱,借钱完了该还的时候他有钱不还给你,同时他却向他的“朋友们”放贷——就算不收利息他也会赢得他朋友们的名声。如果说这件事你也是认为“不能说他完全没有名声,只是他是有向他那个圈子分享”的,再过来说“哲学话题”。
    imn1
        23
    imn1  
       2018-11-20 17:08:40 +08:00
    @Cu635
    和你说的例子相似又不同,相似是生利,就是 XL 自定的规则盖过了 P2P 圈的共享精神
    不同是 XL 也不能完全说无本,能存放更久的资源也需要付出,就看这个本和利是否对称合理了

    如果 XL 完全封杀免费用户,那就没得说了
    免费用户也是能下到一些久远的内容的,单从这点看,它免费分发的量是大于获取的量的,这点不能否认

    如果朋友拿了我的钱,一半放贷,一半资助别人,赚了名声,我什么也没捞着,确实不爽
    但如果我那些钱本来就打算资助别人,就要另外看了
    到底是痛骂这个朋友,还是睁眼闭眼过去,各自衡量
    BT 圈就能保证更多的人分享么?分给谁不是分呢?区别只是分多少,怎么分而已

    10 年前问过别人一个问题:婊子捐的钱收不收?
    问自己没用,问灾民
    精神是否大于物质,理想是否高于现实,说的就是这个哲学问题

    今年刚从 XL 退会了,观察后续情况如何吧,至少这个月还下了两个 bt 拖不动的上世纪的咚咚,只是慢点,挂了一周多
    SHF
        24
    SHF  
    OP
       2018-11-20 18:10:01 +08:00
    @imn1 解决这个问题最好方法是设计一个客户端同时支持这些协议,把所有的 BT, XL, emule 圈子合并在一起,这样整个圈子就扩大了,下载文件的时候从各个来源下载加快速度。
    Cu635
        25
    Cu635  
       2018-12-06 23:22:13 +08:00
    @imn1
    你搞差了,不是“ XL 完全封杀免费用户”的问题,而是说这些 bt 下载软件是有客户端标识的,软件会知道跟它连接的其它客户端是什么软件、版本号是多少,浏览器这个标识叫 user-agent,bt 我不清楚叫啥了,这样的话,XL 在技术是可以从所有类型的客户端下载( deluge、utorrent、其它 XL 等),但是只给 XL 的其它客户端上传,这个区分不是免费不免费用户的问题。然后因为迅雷下载快,用户们都选择使用迅雷,等着资源只有 XL 才有而其它的都没有的时候,再来一个免费用户限速之类的限制,这不就是垄断了么。
    而且由于技术原因,存放的成本几乎可以忽略不计。

    我特意强调“借钱完了该还的时候他有钱不还给你”,这个就是告诉你他故意赖的。

    “如果朋友拿了我的钱,一半放贷,一半资助别人,赚了名声,我什么也没捞着,确实不爽”,我的那个例子还有这他当老赖的情节呢……
    而他得名声,你却什么也没得着,还被人老赖连本金都没有拿回来,你说“问自己没用,问灾民”也对,那要是你这个时候家人(或者干脆就你自己)正要动手术需要医疗费救命呢?他仍然赖着,仍然拿着他老赖的钱去当“及时雨”呢?
    Cu635
        26
    Cu635  
       2018-12-06 23:23:10 +08:00
    @SHF
    那是迅雷故意吸血的,不是技术问题能解决的。
    imn1
        27
    imn1  
       2018-12-07 01:42:29 +08:00
    @Cu635
    我没有搞差,我说的免费用户和你这里说的一样,只是他们是 XL 圈内的免费用户而已
    如果 XL 所有用户都要付费(破解那些不计算),才是我前面说的「 XL 完全封杀免费用户」,但它没有这样做,就是说 XL 也是有免费分发的
    一个现实状况是:XL 免费分发出去要比我个人多得多,所以我只把它视为一个渠道商而已

    如果我的钱本就打算捐出去,例如通过 red cross,rc 收了 10%作为行政费,90%分给其他人
    当我需要手术,估计就不存在捐出去这个打算了
    而且,捐了给 rc 后的话,我要手术救命,难道还去向 rc 讨回来么?捐赠本来就不求回报的,只要不是骗钱给自己享乐,它获取部分利益(美其名「行政费」),我不介意

    我 emule 没有屏蔽什么用户,只要对方是需要的,我不去计较他的本意是什么
    P2P 没问题,P2B2P 我也觉得没问题,多了一层中转而已,如果 P2B2C,后面这个 2C 没有免费途径,我才会介意
    如果哪天 XL 不给钱不让下,我也会屏蔽它的

    其实说到底,我和你看法的区别是,你把 XL 的免费用户没有归入共享圈,我则无视他们头上的 XL 标签,也视为共享圈内有资源需求的人

    @SHF
    我 bt 下完跑,但挂 emule 就是这个原因,10~20TB 挂 bt 我的机器会死的,emule 就没问题
    SHF
        28
    SHF  
    OP
       2018-12-08 12:35:51 +08:00
    @imn1 所以说如果客户端能在遇到对方是迅雷用户的时候伪装成迅雷,这样就好了,从技术上说这个也不难实现啊,根据已有的开源的客户端修改一下逻辑挺简单的吧,不知道为什么没有人去开发这个。
    Maskeney
        29
    Maskeney  
       2018-12-13 21:43:42 +08:00
    @SHF #7 看来 aria2 无望屏蔽了 刚刚还在你的 repo 上提了个 issue sad
    dt743
        30
    dt743  
       2018-12-14 09:16:18 +08:00
    楼主这么一讲我也注意到了,qb 增强版屏蔽迅雷,同时会误杀。
    我就说怎么同个种子,增强版的用户会大量减少
    1265578519
        31
    1265578519  
       2018-12-14 23:20:38 +08:00
    烦死这群 utorrent 吸血鬼了,只下载不上传,特别是老外。
    关于迅雷这方面,是完全遵守 BT 网络的,不会出现评论中说的什么只会上传给迅雷相同客户的问题,这种事情自己抓包测试就行,不用跟风造谣。
    总结,还是看人,特别是老外,尼玛就是喜欢限速 1KB 上行。
    1265578519
        32
    1265578519  
       2018-12-14 23:25:23 +08:00
    关于各大客户端的速度方面,感兴趣的话可以看看: http://bbs.itzmx.com/thread-88860-1-1.html
    具体各位也可以仔细测试下,来探讨下,说实在的 utorrent 基本上没什么存在的必要了,,代码太屎了,要推倒格式化重新用 iocp 模型完全开发一遍才行,这样才能提高性能。
    ???发回复还要铜板?吓得我去充了 200 块才发成功这条回复
    maogang39
        33
    maogang39  
       2018-12-23 16:42:39 +08:00
    几乎被 xl 给把上传都给霸占了,
    还有两个 xl 在给我上传。2.0.4 可以使用这个吗?真小白还是看不明白怎么使用这个脚本。
    [![捕获.JPG]( https://i.loli.net/2018/12/23/5c1f49c0884e4.jpg)]( https://i.loli.net/2018/12/23/5c1f49c0884e4.jpg)
    fengyeso
        34
    fengyeso  
       2018-12-24 04:07:19 +08:00
    撸了个 python 版的,应该可以跑起来。顺便感谢楼主造福人类
    https://github.com/yefengo/utorrent-block-xunlei
    SHF
        35
    SHF  
    OP
       2018-12-24 15:14:55 +08:00
    @xxhjkl @maogang39

    v1.0 正式发布:
    1. 发布压缩包,解压修改配置后可直接运行。
    2. 修改屏蔽逻辑
    3. 减少 ipfilter.dat 文件的读写

    下载及使用说明见 https://github.com/ShenHongFei/utorrent-block-xunlei
    另有 Python 脚本的实现(见 #34 楼),感谢 @fengyeso
    Suzutan
        36
    Suzutan  
       2019-02-14 20:52:06 +08:00
    ![无标题.png]( https://i.loli.net/2019/02/14/5c656423a7c64.png)

    迅雷这个不算吸血算什么?
    pedoer
        37
    pedoer  
       2019-10-10 18:04:37 +08:00
    请问怎么屏蔽 7.8.9.4550 这种无客户端标记的?
    SHF
        38
    SHF  
    OP
       2019-10-11 03:57:38 +08:00 via Android
    @pedoer 类似 7.x.x.xxxx 这样的客户端直接当做迅雷屏蔽
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3178 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 14:03 · PVG 22:03 · LAX 06:03 · JFK 09:03
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.