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 相关文章推荐
js 利用image对象实现图片的预加载提高访问速度
Mar 29 Javascript
JS控制阿拉伯数字转为中文大写示例代码
Sep 04 Javascript
iframe父页面获取子页面参数的方法
Feb 21 Javascript
JQuery boxy插件在IE中边角图片不显示问题的解决
May 20 Javascript
分享五个有用的jquery小技巧
Oct 08 Javascript
jQuery UI结合Ajax创建可定制的Web界面
Jun 22 Javascript
vue 1.x 交互实现仿百度下拉列表示例
Oct 21 Javascript
webpack4简单入门实例
Sep 06 Javascript
JavaScript ES6中的简写语法总结与使用技巧
Dec 30 Javascript
vue与bootstrap实现简单用户信息添加删除功能
Feb 15 Javascript
vue拖拽组件 vuedraggable API options实现盒子之间相互拖拽排序
Jul 08 Javascript
vue将后台数据时间戳转换成日期格式
Jul 31 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
删除无限级目录与文件代码共享
2006/07/12 PHP
Windows下部署Apache+PHP+MySQL运行环境实战
2012/08/31 PHP
PHP字符串word末字符实现大小写互换的方法
2014/11/10 PHP
PHP+redis实现的悲观锁机制示例
2018/06/12 PHP
PHP设计模式之观察者模式定义与用法分析
2019/04/04 PHP
Mac下关于PHP环境和扩展的安装详解
2019/10/17 PHP
jQuery live( type, fn ) 委派事件实现
2009/10/11 Javascript
js textarea自动增高并隐藏滚动条
2009/12/16 Javascript
从零开始学习jQuery (十) jQueryUI常用功能实战
2011/02/23 Javascript
jquery focus(fn),blur(fn)方法实例代码
2011/12/16 Javascript
推荐40个简单的 jQuery 导航插件和教程(下篇)
2012/09/14 Javascript
javascript生成json数据简单示例分享
2014/02/14 Javascript
JSON.parse()和JSON.stringify()使用介绍
2014/06/20 Javascript
jQuery中的insertBefore(),insertAfter(),after(),before()区别介绍
2016/09/01 Javascript
简单理解vue中Props属性
2016/10/27 Javascript
基于js中style.width与offsetWidth的区别(详解)
2017/11/12 Javascript
vue2.0 循环遍历加载不同图片的方法
2018/03/06 Javascript
vue + vuex todolist的实现示例代码
2018/03/09 Javascript
angularJs中跳转到指定的锚点实例($anchorScroll)
2018/08/31 Javascript
如何在vue里面优雅的解决跨域(路由冲突问题)
2019/01/20 Javascript
微信小程序授权登录解决方案的代码实例(含未通过授权解决方案)
2019/05/10 Javascript
ES6 Generator基本使用方法示例
2020/06/06 Javascript
[02:37]2015国际邀请赛选手档案—LGD.Xiao8
2015/07/28 DOTA
使用Python获取CPU、内存和硬盘等windowns系统信息的2个例子
2014/04/15 Python
python实现的登陆Discuz!论坛通用代码分享
2014/07/11 Python
python 写的一个爬虫程序源码
2016/02/28 Python
python3实现读取chrome浏览器cookie
2016/06/19 Python
python中利用Future对象回调别的函数示例代码
2017/09/07 Python
大学学年自我鉴定
2013/10/28 职场文书
美容院营销方案
2014/03/05 职场文书
小学爱国卫生月活动总结
2014/06/30 职场文书
学习党的群众路线剖析材料
2014/10/09 职场文书
2014年妇幼卫生工作总结
2014/12/09 职场文书
SpringBoot2 参数管理实践之入参出参与校验的方式
2021/06/16 Java/Android
pd.drop_duplicates删除重复行的方法实现
2022/06/16 Python
windows10声卡驱动怎么安装?win10声卡驱动安装操作步骤教程
2022/08/05 数码科技