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 相关文章推荐
常用的JavaScript验证正则表达式汇总
Nov 26 Javascript
jquery实现邮箱自动填充提示功能
Nov 17 Javascript
JS JSOP跨域请求实例详解
Jul 04 Javascript
学习vue.js计算属性
Dec 03 Javascript
Angular4 中常用的指令入门总结
Jun 12 Javascript
使用Bootrap和Vue实现仿百度搜索功能
Oct 26 Javascript
基于cropper.js封装vue实现在线图片裁剪组件功能
Mar 01 Javascript
微信小程序block的使用教程
Apr 01 Javascript
webpack打包非模块化js的方法
Oct 24 Javascript
vue使用原生swiper代码实例
Feb 05 Javascript
js+audio实现音乐播放器
Sep 13 Javascript
vue用ant design中table表格,点击某行时触发的事件操作
Oct 28 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
PHP自动生成月历代码
2006/10/09 PHP
全局记录程序片段的运行时间 正确找到程序逻辑耗时多的断点
2011/01/06 PHP
基于php冒泡排序算法的深入理解
2013/06/09 PHP
php实现根据url自动生成缩略图的方法
2014/09/23 PHP
PHP判断数组是否为空的常用方法(五种方法)
2017/02/08 PHP
javascript 嵌套的函数(作用域链)
2010/03/15 Javascript
超越Jquery_01_isPlainObject分析与重构
2010/10/20 Javascript
jQuery选择器中含有空格的使用示例及注意事项
2013/08/25 Javascript
JQuery分屏指示器图片轮换效果实例
2015/05/21 Javascript
js简单实现标签云效果实例
2015/08/06 Javascript
解决JS组件bootstrap table分页实现过程中遇到的问题
2016/04/21 Javascript
mvvm双向绑定机制的原理和实现代码(推荐)
2016/06/07 Javascript
js创建数组的简单方法
2016/07/27 Javascript
基于JavaScript实现前端文件的断点续传
2016/10/17 Javascript
原生js实现弹出层效果
2017/01/20 Javascript
jQuery.cookie.js使用方法及相关参数解释
2017/03/06 Javascript
nodejs搭建本地服务器轻松解决跨域问题
2018/03/21 NodeJs
Vue页面骨架屏的实现方法
2018/05/22 Javascript
Bootstrap 按钮样式与使用代码详解
2018/12/09 Javascript
如何使用less实现随机下雪动画详解
2019/01/02 Javascript
图文讲解用vue-cli脚手架创建vue项目步骤
2019/02/12 Javascript
[54:05]DOTA2-DPC中国联赛定级赛 SAG vs iG BO3第一场 1月9日
2021/03/11 DOTA
django admin 添加自定义链接方式
2020/03/11 Python
Python如何使用正则表达式爬取京东商品信息
2020/06/01 Python
解决TensorFlow调用Keras库函数存在的问题
2020/07/06 Python
基于python实现监听Rabbitmq系统日志代码示例
2020/11/28 Python
南非领先的在线旅行社:Travelstart南非
2016/09/04 全球购物
优质飞蝇钓和渔具:RiverBum
2020/05/10 全球购物
总经理司机岗位职责
2014/02/06 职场文书
实习生评语
2014/04/26 职场文书
清洁工岗位职责
2015/02/13 职场文书
计算机专业自荐信范文
2015/03/26 职场文书
2015年语文教学工作总结
2015/05/25 职场文书
辣妈辣妹观后感
2015/06/10 职场文书
交通事故责任认定书
2015/08/06 职场文书
MySQL 存储过程的优缺点分析
2021/05/20 MySQL