请选择 进入手机版 | 继续访问电脑版
 找回密码
 立即注册
查看: 9080|回复: 20

uTorrent 自动屏蔽迅雷脚本

  • TA的每日心情
    开心
    2019-12-1 22:13
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    1

    主题

    4

    帖子

    0

    VC币

    高级会员

    Rank: 4

    积分
    24586
    shf19961008 发表于 2018-11-22 19:48:47 | 显示全部楼层 |阅读模式
    本帖最后由 shf19961008 于 2018-11-23 10:20 编辑

    uTorrent 自动屏蔽迅雷脚本
    GitHub: https://github.com/ShenHongFei/utorrent-block-xunlei


    功能
        每隔 3 分钟,自动检查 uTorrent 已连接的用户列表,找出迅雷客户端,强制断开,不给吸血雷上传任何数据,并将用户 IP 加入黑名单阻止其再次连接,把带宽留给正规 BT 客户端。


    屏蔽列表
        -XL0012-***
        Xunlei/***
        7.x.x.x
        Xfplay


    实现方法
        1.  根据 uTorrent 的 WebUI API 发送 http request 获取所有已连接用户(peers)信息
        2.  按照 client name 筛选出使用迅雷的 peer IP,写入 ipfilter.dat 文件
        3.  发送 http request 让 uTorrent 重新加载 ipfilter.dat
        4.  uTorrent 禁止 ipfilter.dat 中的 IP 连接


    脚本



    1. cheerio = require 'cheerio'
    2. request = require 'request-promise-native'
    3. Sugar   = require('sugar').extend()

    4. log = console.log.bind console

    5. # 自行修改脚本中 root_url, auth, ipfilter_path 相关内容
    6. # 检查间隔时间可在脚本中自定义,IP黑名单(ipfilter.dat) 建议每天清空一次。

    7. utorrent=
    8.     init: ->
    9.         @root_url= 'http://127.0.0.1:10000/gui/'
    10.         @cookies= request.jar()
    11.         token_html = await request
    12.             uri: @root_url + 'token.html'
    13.             auth:
    14.                 user: 'shf'
    15.                 pass: 'xxxxxx'
    16.             jar: @cookies
    17.         $ = cheerio.load token_html
    18.         @token = $('div').text()
    19.         await @get_torrents()
    20.         
    21.     call: ({api='', params, method='GET'}={})->
    22.         JSON.parse await request
    23.             uri: @root_url + api
    24.             method: method
    25.             qs:{
    26.                 token: @token
    27.                 params...
    28.             }
    29.             auth:
    30.                 user: 'shf'
    31.                 pass: 'xxxxxx'
    32.             jar: @cookies
    33.    
    34.     get_torrents: ->
    35.         @torrents = (await @call params: list: 1).torrents
    36.         @hashes = @torrents.map (x)-> x[0]
    37.         
    38.     get_peers: (hash)->
    39.         resp = await @call params:
    40.             action: 'getpeers'
    41.             hash: hash
    42.         resp.peers
    43.    
    44.     get_all_peers: ->
    45.         peers = []
    46.         for hash in @hashes
    47.             peers.append((await @get_peers hash)[1])
    48.         peers = for peer in peers
    49.             ip: peer[1]
    50.             client: peer[5]
    51.         peers.unique().sortBy 'client'
    52.         
    53.     block: ->
    54.         await @get_torrents()
    55.         peers = await @get_all_peers()
    56.         blocks = peers.filter (x)-> x.client.match /(-XL0012-)|(Xunlei)|(^7\.)|(Xfplay)/i
    57.         if blocks.isEmpty()
    58.             log 'no xunlei clients detected, current peers:'
    59.             log peers
    60.             return
    61.         log 'block', blocks
    62.         
    63.         ipfilter_path = 'C:/Users/shf/AppData/Roaming/uTorrent/ipfilter.dat'
    64.         fs.writeFileSync(ipfilter_path, fs.readFileSync(ipfilter_path, 'UTF8').trim().split('\n').append(x.ip for x in blocks).unique().join('\n') + '\n')
    65.         # log 'ipfilter.dat updated'
    66.         
    67.         await @call params:
    68.             action: 'setsetting'
    69.             s: 'ipfilter.enable'
    70.             v: '1'
    71.         # log 'ipfilter.dat reloaded'
    72.         
    73.     unblock: ->
    74.         await @call params:
    75.             action: 'setsetting'
    76.             s: 'ipfilter.enable'
    77.             v: '0'
    78.    
    79.     run: ->
    80.         await @block()
    81.         @task = setInterval =>
    82.             await @block()
    83.         , 3*60*1000
    84.         
    85.     stop: ->
    86.         clearInterval @task

    87. main= ->
    88.     await utorrent.init()
    89.     await utorrent.run()

    90. main()

    复制代码


    依赖
        uTorrent
            启用 uTorrent 网页界面
            在 uTorrent 目录下保证 ipfilter.dat 文件存在(若不存在则新建空白 ipfilter.dat 文件),脚本会在原有 ipfilter.dat 文件内容之后添加被屏蔽的迅雷 IP,不影响已有内容及其功能。
            高级选项
                ipfilter.enable: true
                bt.use_rangeblock: false
        Node.js
        CoffeeScript
        NPM Packages
            Sugar.js
            request-promise-native
            cheerio



    日志
        未检测到迅雷时
    1. 当前已连接用户
    2. [ { ip: '180.94.154.163', client: 'µTorrent/3.5.4.0' },
    3. { ip: '223.140.248.38', client: 'BitComet 1.53' },
    4. { ip: '101.88.108.19', client: 'µTorrent/2.2.1.0' },
    5. { ip: '39.161.242.50', client: 'Unknown FD/5.1.0.0' },
    6. { ip: '171.88.70.72', client: 'Transmission 2.94' },
    7. { ip: '218.79.69.196', client: '[FAKE] µTorrent/3.0.0.0' },
    8. { ip: '123.204.251.13', client: 'BitComet 1.51' },
    9. { ip: '154.103.221.22', client: 'qBittorrent 4.1.3' },
    复制代码

        检测到迅雷时
    1. 使用迅雷的用户
    2. [ { ip: '183.25.54.216', client: '-XL0012-溶S鑋亾#+4厓' },
    3. { ip: '223.81.192.235', client: '-XL0012-輓%??1涙鷉' },

    4. reading C:/Users/shf/AppData/Roaming/uTorrent/ipfilter.dat
    5. wrote C:/Users/shf/AppData/Roaming/uTorrent/ipfilter.dat
    6. ipfilter.dat updated
    7. ipfilter.dat reloaded
    复制代码

        uTorrent Log
            勾选 记录用户通讯信息 > 记录用户拦截连接
    1. [2018-11-22 19:03:43]  Loaded ipfilter.dat (51 entries)
    2. [2018-11-22 19:03:46]  IpFilter blocked peer 223.81.192.235
    3. [2018-11-22 19:03:49]  IpFilter blocked peer 223.81.192.235
    4. [2018-11-22 19:04:06]  IpFilter blocked peer 223.81.192.235
    5. [2018-11-22 19:04:21]  IpFilter blocked peer 183.25.54.216
    6. [2018-11-22 19:04:46]  IpFilter blocked peer 223.81.192.235
    7. ...
    复制代码









    评分

    参与人数 4活跃度 +24057 收起 理由
    johoco + 160
    tonyhsie + 16000 很给力!
    点点菌 + 120 非常感谢~
    yswysc + 7777 非常感谢~

    查看全部评分

    回复

    使用道具 举报

  • TA的每日心情
    无聊
    20 小时前
  • 签到天数: 2318 天

    [LV.Master]伴坛终老

    9

    主题

    327

    帖子

    58

    VC币

    版主

    Rank: 24Rank: 24Rank: 24Rank: 24Rank: 24Rank: 24

    积分
    554657

    不离不弃论坛管理组日积月累风雨无阻活跃达人

    yswysc 发表于 2018-11-22 22:08:49 | 显示全部楼层
    本帖最后由 yswysc 于 2018-11-23 09:46 编辑

    首先感谢楼主提供的脚本,非常有帮助。
    其次还是冒昧地问一下有没有什么办法能让此脚本搭配屏蔽离线服务器的过滤文件使用呢?
    还有论坛支持代码插入功能,如果能将代码放入代码框中那就更好了。
    再次感谢楼主的工作!
    贴一下我使用的屏蔽离线服务器的ipfilter.dat文件。

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2019-12-1 22:13
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    1

    主题

    4

    帖子

    0

    VC币

    高级会员

    Rank: 4

    积分
    24586
    shf19961008  楼主| 发表于 2018-11-23 00:19:37 | 显示全部楼层
    yswysc 发表于 2018-11-22 22:08
    首先感谢楼主提供的脚本,非常有帮助。
    其次还是冒昧地问一下有没有什么办法能让此脚本搭配屏蔽离线服务器 ...

    只要 ipfilter.dat 文件存在就可以了,脚本会在原有 ipfilter.dat 文件内容之后添加被屏蔽的迅雷 IP,不影响已有内容及其功能。

    其实屏蔽迅雷的 IP 和屏蔽离线服务器的 IP 原理上是一样的,都是用的这个文件。这个脚本不过是把动态添加迅雷 IP 这个操作自动化了,也就是看到一个封一个。
    如果离线服务器的客户端有相应的特征的话也可以动态的屏蔽,不过我没见过离线服务器的客户端,不知道它有什么特征。

    编辑器“添加代码文字”这个功能不管我怎么粘贴代码,不管我用空格还是 Tab,粘贴之后缩进都没了,实在没法用。
    测试添加代码文字”:
    1. 无缩进
    2. 1缩进
    3. 2缩进
    复制代码


    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    20 小时前
  • 签到天数: 2318 天

    [LV.Master]伴坛终老

    9

    主题

    327

    帖子

    58

    VC币

    版主

    Rank: 24Rank: 24Rank: 24Rank: 24Rank: 24Rank: 24

    积分
    554657

    不离不弃论坛管理组日积月累风雨无阻活跃达人

    yswysc 发表于 2018-11-23 05:49:20 | 显示全部楼层
    shf19961008 发表于 2018-11-23 04:19
    只要 ipfilter.dat 文件存在就可以了,脚本会在原有 ipfilter.dat 文件内容之后添加被屏蔽的迅雷 IP,不 ...

    可能论坛的编辑器出现了一些问题,直接粘贴的确会产生不预期的效果,对此造成的不便非常抱歉。
    下面提供一种解决办法:
    点开高级模式(已发出的帖子点击编辑按钮),在顶部的工具栏中找到纯文本(如没发现请点击“高级”展开工具栏)
    直接将代码粘贴进去,并用
    1. [code]正文(此处第二个“o”使用了特殊字符替代来举例以免bbcode失效)[/code]
    复制代码
    包住代码就可以啦。

    e.g:

    1.         1Tab
    2.     4Spaces
    复制代码



    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2016-4-3 22:42
  • 签到天数: 63 天

    [LV.6]常住居民II

    9

    主题

    108

    帖子

    0

    VC币

    中级会员

    Rank: 3Rank: 3

    积分
    2972
    ab222525 发表于 2018-11-23 09:30:25 | 显示全部楼层
    请问,qbittorrent可以用吗
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2019-12-1 22:13
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    1

    主题

    4

    帖子

    0

    VC币

    高级会员

    Rank: 4

    积分
    24586
    shf19961008  楼主| 发表于 2018-11-23 10:27:31 | 显示全部楼层
    ab222525 发表于 2018-11-23 09:30
    请问,qbittorrent可以用吗

    不能用,而且 qBittorrent 下载速度比 uTorrrent 慢,不推荐使用。

    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2018-3-20 23:05
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    2

    主题

    6

    帖子

    15

    VC币

    注册会员

    Rank: 2

    积分
    749
    点点菌 发表于 2018-11-23 11:54:15 | 显示全部楼层
    感谢楼主分享~

    贴一个启用WebUI的教程:
    https://tieba.baidu.com/p/2241281124?pn=1

    WebUI.zio下载(3.0版本以上不用下载,直接启用即可):
    (不需解压,直接放ut2的根目录下就行了)
    http://pan.baidu.com/share/link? ... 1&uk=2466846431
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2018-9-24 09:08
  • 签到天数: 1 天

    [LV.1]初来乍到

    0

    主题

    11

    帖子

    0

    VC币

    注册会员

    Rank: 2

    积分
    789
    c0re100 发表于 2018-11-23 13:38:43 | 显示全部楼层
    ab222525 发表于 2018-11-23 09:30
    请问,qbittorrent可以用吗

    qBit請直接食用 ლ(́◕◞౪◟◕‵ლ)
    github.com/c0re100/qBittorrent-Enhanced-Edition/releases
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-11-24 16:04
  • 签到天数: 1 天

    [LV.1]初来乍到

    6

    主题

    35

    帖子

    0

    VC币

    白金会员

    Rank: 12Rank: 12Rank: 12

    积分
    65288
    ltycomputer 发表于 2018-11-23 18:03:04 | 显示全部楼层
    我就在用楼上的那个增强版,支持屏蔽国产BT软件和国产离线下载服务器,很好用

    速度下行跑到100MB/s都没问题
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2018-5-4 17:46
  • 签到天数: 1 天

    [LV.1]初来乍到

    1

    主题

    27

    帖子

    0

    VC币

    注册会员

    Rank: 2

    积分
    884
    wuskyjian 发表于 2018-12-3 18:31:29 | 显示全部楼层
    ltycomputer 发表于 2018-11-23 18:03
    我就在用楼上的那个增强版,支持屏蔽国产BT软件和国产离线下载服务器,很好用

    速度下行跑到100MB/s都没问 ...

    一样,我这里utorrent很慢只能到20-30MB这样,用那个增强版的qtorrent可以跑到90-100MB/s, 而且也自动屏蔽吸血客户端。
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    快速回复 返回顶部 返回列表