找回密码
 立即注册
查看: 17768|回复: 20

uTorrent 自动屏蔽迅雷脚本

1

主题

3

回帖

0

VC币

高级会员

Rank: 4

积分
24714
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 非常感谢~

查看全部评分

回复

使用道具 举报

9

主题

413

回帖

58

VC币

版主

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

积分
764230

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

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

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

使用道具 举报

1

主题

3

回帖

0

VC币

高级会员

Rank: 4

积分
24714
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缩进
复制代码


回复

使用道具 举报

9

主题

413

回帖

58

VC币

版主

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

积分
764230

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

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
复制代码



回复

使用道具 举报

10

主题

103

回帖

0

VC币

中级会员

Rank: 3Rank: 3

积分
3469

活跃达人

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

使用道具 举报

1

主题

3

回帖

0

VC币

高级会员

Rank: 4

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

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

回复

使用道具 举报

2

主题

4

回帖

15

VC币

注册会员

Rank: 2

积分
928
点点菌 发表于 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
回复

使用道具 举报

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
回复

使用道具 举报

6

主题

29

回帖

0

VC币

白金会员

Rank: 12Rank: 12Rank: 12

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

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

使用道具 举报

1

主题

26

回帖

0

VC币

注册会员

Rank: 2

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

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

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

使用道具 举报

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

本版积分规则

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