Node.js 去掉种子(torrent)文件里的邪恶信息


Posted in Javascript onMarch 27, 2015

2012 年,一部名为 ABS-130 的日本影片引起了网络的震动,网络上纷纷出现了 “当初求种像条狗,如今*完嫌人丑”的现象,成为了 2012 年互联网的一件大事件。

2014年,净网行动如火如荼地进行,各大互联网公司都作出了表率,一时之间XX云、X雷都把万恶的种子拒之门外。净网行动万岁!!(还我苍老师!!)

各大网盘、下载应用都从种子当中提取关键信息,将种子拒之门外。这些关键信息究竟藏在哪里?让我们一探究竟。

种子文件结构

以下内容来自维基百科

.torrent种子文件本质上是文本文件,包含Tracker信息和文件信息两部分。Tracker信息主要是BT下载中需要用到的Tracker服务器的地址和针对Tracker服务器的设置,文件信息是根据对目标文件的计算生成的,计算结果根据BitTorrent协议内的Bencode规则进行编码。它的主要原理是需要把提供下载的文件虚拟分成大小相等的块,块大小必须为2k的整数次方(由于是虚拟分块,硬盘上并不产生各个块文件),并把每个块的索引信息和Hash验证码写入种子文件中;所以,种子文件就是被下载文件的“索引”。

Node.js 去掉种子(torrent)文件里的邪恶信息

上图是一个典型种子的结构,那些被识别出来的邪恶关键字就藏在 name 和 file 当中。name 包含了该种子的名字,如:abcd-123 性感XXXX。而 file 当中的 path 则包含了要下载的所有文件的信息,如:草X社区最新地址.txt等等。

Node.js 和 parse-torrent 库

为了寻找出种子当中的邪恶信息我们请出了 Node.js 和 parse-torrent库 作为助手。

实验准备:

种子一枚安装 Node.js 电脑一台

首先我们利用 npm 安装 parse-torrent 库,它帮助我们快速找到种子内的信息。

npm install parse-torrent
var fs = require("fs");
var parseTorrent = require('parse-torrent');

var info = parseTorrent(fs.readFileSync('my.torrent'));
console.log(info);

这个库会将种子的信息解析出来,以对象的形式返回给我们。

查看结果:

name:

Node.js 去掉种子(torrent)文件里的邪恶信息

files:

Node.js 去掉种子(torrent)文件里的邪恶信息

可以看到用 parse-torrent 库解析出来的 name 和 files 的信息都是以 Buffer 形式存储。

清洗种子

如何将种子里的邪恶信息清洗掉,把万恶的种子扼杀在摇篮之中,最重要的就算要清除调 name 和 files 里面 path 的信息。

function cleanInfo (info) {
 // 将种子名用 md5 加密
 info.name = md5(info.name);
 info['name.utf-8'] = md5(info['name.utf-8']);
 var files = info.files;
 for (var i = 0; i < files.length; i++) {
  var file = files[i];
  for (var key in file) {
   if (key == "path" || key == "path.utf-8") {
    for (var j = 0; j < file[key].length; j++) {
     var text = file[key][j].toString();
     var dotIndex = text.lastIndexOf(".");
     // 将种子名用 md5 加密
     file[key][j] = md5(text.slice(0,dotIndex)) + text.slice(dotIndex,text.length);
    }
   }
  }
 }
 return info;
}
// 将清洗干净后的 info 对象重新生成一个 torrent 文件
var buf = parseTorrent.toTorrentFile({
 info: cleanInfos[i]
});
fs.writeFile(dir + "/" + cleanInfos[i].name + ".torrent", buf);

经过这样之后,我们的邪恶种子文件就变成这样了:

Node.js 去掉种子(torrent)文件里的邪恶信息

实战阶段

首先准备一个种子,进行XX云的离线下载。

Node.js 去掉种子(torrent)文件里的邪恶信息

一开始它是被拒绝的。

Node.js 去掉种子(torrent)文件里的邪恶信息

然后运行脚本进行清洗。

node cleanTorrent IPTD-XXX.torrent

下载成功了!

Node.js 去掉种子(torrent)文件里的邪恶信息

脚本源码放在这里了,要去看一下我的下载内容了!!!

Node.js 去掉种子(torrent)文件里的邪恶信息

Node.js 去掉种子(torrent)文件里的邪恶信息

(**都脱了你给我看这个!!!)

最后

本文纯属技术讨论,感谢你的阅读,有不足之处请为我指出。

请您花一点时间将文章分享给您的朋友或者留下评论。我们将会由衷感谢您的支持!

Javascript 相关文章推荐
JQuery jsonp 使用示例代码
Aug 12 Javascript
CSS+jQuery实现的一个放大缩小动画效果
Sep 24 Javascript
js 获取页面高度和宽度兼容 ie firefox chrome等
May 14 Javascript
jQuery实现返回顶部功能适合不支持js的浏览器
Aug 19 Javascript
javascript 实现 原路返回
Jan 21 Javascript
JavaScript中split与join函数的进阶使用技巧
May 03 Javascript
jQuery实现倒计时(倒计时年月日可自己输入)
Dec 02 Javascript
Vue.js移动端左滑删除组件的实现代码
Sep 08 Javascript
30分钟快速入门掌握ES6/ES2015的核心内容(上)
Apr 18 Javascript
基于Vue-Cli 打包自动生成/抽离相关配置文件的实现方法
Dec 09 Javascript
JS实现简单打字测试
Jun 24 Javascript
JS图片懒加载技术实现过程解析
Jul 27 Javascript
jQuery使用attr()方法同时设置多个属性值用法实例
Mar 26 #Javascript
jQuery使用prepend()方法在元素前添加内容用法实例
Mar 26 #Javascript
jQuery使用append在html元素后同时添加多项内容的方法
Mar 26 #Javascript
jQuery使用before()和after()在元素前后添加内容的方法
Mar 26 #Javascript
jQuery使用after()方法在元素后面添加多项内容的方法
Mar 26 #Javascript
jQuery使用empty()方法删除元素及其所有子元素的方法
Mar 26 #Javascript
jquery使用remove()方法删除指定class子元素
Mar 26 #Javascript
You might like
destoon出现验证码不显示时的紧急处理方法
2014/08/22 PHP
php 命名空间(namespace)原理与用法实例小结
2019/11/13 PHP
jQuery操作Select选择的Text和Value(获取/设置/添加/删除)
2013/03/06 Javascript
让网页跳转到指定位置的jquery代码非书签
2013/09/06 Javascript
5秒后跳转到另一个页面的js代码
2013/10/12 Javascript
超简单JS二级、多级联动的简单实例
2014/02/18 Javascript
在jquery中的ajax方法怎样通过JSONP进行远程调用
2014/04/04 Javascript
Javascript非构造函数的继承
2015/04/27 Javascript
js+div实现文字滚动和图片切换效果代码
2015/08/27 Javascript
Javascript BOM学习小结(六)
2015/11/26 Javascript
基于jQuery实现弹出可关闭遮罩提示框实例代码
2016/07/18 Javascript
纯JS实现可拖拽表单的简单实例
2016/09/02 Javascript
jQuery复合事件结合toggle()方法的用法示例
2017/06/10 jQuery
node.js中TCP Socket多进程间的消息推送示例详解
2018/07/10 Javascript
VUE组件中的 Drawer 抽屉实现代码
2019/08/06 Javascript
基于JS正则表达式实现模板数据动态渲染(实现思路详解)
2020/03/07 Javascript
[55:11]完美世界DOTA2联赛PWL S2 SZ vs LBZS 第一场 11.26
2020/11/30 DOTA
浅析Python中else语句块的使用技巧
2016/06/16 Python
python爬虫入门教程--HTML文本的解析库BeautifulSoup(四)
2017/05/25 Python
Python3 翻转二叉树的实现
2019/09/30 Python
使用python的turtle函数绘制一个滑稽表情
2020/02/28 Python
Python QTimer实现多线程及QSS应用过程解析
2020/07/11 Python
如何将Pycharm中调整字体大小的方式设置为&quot;ctrl+鼠标滚轮上下滑&quot;
2020/11/17 Python
css3加js做一个简单的3D行星运转效果实例代码
2017/01/18 HTML / CSS
全球知名巧克力品牌:Godiva
2016/07/22 全球购物
台湾森森购物网:U-mall
2017/10/16 全球购物
美国时尚配饰品牌:Dooney & Bourke
2017/11/14 全球购物
Burt’s Bees英国官网:世界领先的天然个人护理品牌
2020/08/17 全球购物
光盘行动倡议书
2014/02/02 职场文书
公司营业员的自我评价
2014/03/04 职场文书
汉语言文学毕业生自荐信范文
2014/03/24 职场文书
中国在我心中演讲稿
2014/09/13 职场文书
2014年仓库管理员工作总结
2014/11/18 职场文书
高中开学感言
2015/08/01 职场文书
村党总支部公开承诺书2016
2016/03/25 职场文书
Win11远程连接不上怎么办?Win11远程桌面用不了的解决方法
2022/08/05 数码科技