首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
探索世界的好奇心万岁
Udacity
网易公开课
Godel, Escher, Bach: An Eternal Golden Braid
宝塔
V2EX  ›  分享发现

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

  •  3
     
  •   SHF · 361 天前 · 7389 次点击
    这是一个创建于 361 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

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

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

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

    “如果朋友拿了我的钱,一半放贷,一半资助别人,赚了名声,我什么也没捞着,确实不爽”,我的那个例子还有这他当老赖的情节呢……
    而他得名声,你却什么也没得着,还被人老赖连本金都没有拿回来,你说“问自己没用,问灾民”也对,那要是你这个时候家人(或者干脆就你自己)正要动手术需要医疗费救命呢?他仍然赖着,仍然拿着他老赖的钱去当“及时雨”呢?
        26
    Cu635   343 天前
    @SHF
    那是迅雷故意吸血的,不是技术问题能解决的。
        27
    imn1   343 天前
    @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 就没问题
        28
    SHF   342 天前
    @imn1 所以说如果客户端能在遇到对方是迅雷用户的时候伪装成迅雷,这样就好了,从技术上说这个也不难实现啊,根据已有的开源的客户端修改一下逻辑挺简单的吧,不知道为什么没有人去开发这个。
        29
    Maskeney   336 天前
    @SHF #7 看来 aria2 无望屏蔽了 刚刚还在你的 repo 上提了个 issue sad
        30
    dt743   336 天前
    楼主这么一讲我也注意到了,qb 增强版屏蔽迅雷,同时会误杀。
    我就说怎么同个种子,增强版的用户会大量减少
        31
    1265578519   335 天前
    烦死这群 utorrent 吸血鬼了,只下载不上传,特别是老外。
    关于迅雷这方面,是完全遵守 BT 网络的,不会出现评论中说的什么只会上传给迅雷相同客户的问题,这种事情自己抓包测试就行,不用跟风造谣。
    总结,还是看人,特别是老外,尼玛就是喜欢限速 1KB 上行。
        32
    1265578519   335 天前
    关于各大客户端的速度方面,感兴趣的话可以看看: http://bbs.itzmx.com/thread-88860-1-1.html
    具体各位也可以仔细测试下,来探讨下,说实在的 utorrent 基本上没什么存在的必要了,,代码太屎了,要推倒格式化重新用 iocp 模型完全开发一遍才行,这样才能提高性能。
    ???发回复还要铜板?吓得我去充了 200 块才发成功这条回复
        33
    maogang39   327 天前
    几乎被 xl 给把上传都给霸占了,
    还有两个 xl 在给我上传。2.0.4 可以使用这个吗?真小白还是看不明白怎么使用这个脚本。
    [![捕获.JPG]( https://i.loli.net/2018/12/23/5c1f49c0884e4.jpg)]( https://i.loli.net/2018/12/23/5c1f49c0884e4.jpg)
        34
    fengyeso   326 天前
    撸了个 python 版的,应该可以跑起来。顺便感谢楼主造福人类
    https://github.com/yefengo/utorrent-block-xunlei
        35
    SHF   326 天前
    @xxhjkl @maogang39

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

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

    迅雷这个不算吸血算什么?
        37
    pedoer   36 天前
    请问怎么屏蔽 7.8.9.4550 这种无客户端标记的?
        38
    SHF   35 天前 via Android
    @pedoer 类似 7.x.x.xxxx 这样的客户端直接当做迅雷屏蔽
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3028 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 24ms · UTC 10:19 · PVG 18:19 · LAX 02:19 · JFK 05:19
    ♥ Do have faith in what you're doing.