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 一个自定义长度的文本自动换行的函数
Aug 19 Javascript
非常强大的 jQuery.AsyncBox 弹出对话框插件
Aug 29 Javascript
js自定义事件及事件交互原理概述(一)
Feb 01 Javascript
jQuery实现列表自动循环滚动鼠标悬停时停止滚动
Sep 06 Javascript
实例详解jQuery Mockjax 插件模拟 Ajax 请求
Jan 12 Javascript
BootStrap智能表单实战系列(七)验证的支持
Jun 13 Javascript
详解Javascript函数声明与递归调用
Oct 22 Javascript
JavaScript制作简易计算器(不用eval)
Feb 05 Javascript
JavaScript实现简单评论功能
Aug 17 Javascript
微信小程序支付之c#后台实现方法
Oct 19 Javascript
vue中实现methods一个方法调用另外一个方法
Feb 08 Javascript
Nuxt 嵌套路由nuxt-child组件用法(父子页面组件的传值)
Nov 05 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中使用cURL实现Get和Post请求的方法
2013/03/13 PHP
WordPress中获取页面链接和标题的相关PHP函数用法解析
2015/12/17 PHP
PHP preg_match实现正则表达式匹配功能【输出是否匹配及匹配值】
2017/07/19 PHP
jQuery阻止同类型事件小结
2013/04/19 Javascript
checkbox全选所涉及到的知识点介绍
2013/12/31 Javascript
jQuery-1.9.1源码分析系列(十)事件系统之事件体系结构
2015/11/19 Javascript
JavaScript隐式类型转换
2016/03/15 Javascript
jquery中的常见问题及快速解决方法小结
2016/06/14 Javascript
window.open不被拦截的简单实现代码(推荐)
2016/08/04 Javascript
微信小程序 轮播图swiper详解及实例(源码下载)
2017/01/11 Javascript
微信禁止下拉查看URL的处理方法
2017/09/28 Javascript
vuejs项目打包之后的首屏加载优化及打包之后出现的问题
2018/04/01 Javascript
微信小程序实现同一页面取值的方法分析
2019/04/30 Javascript
详解vue中v-bind:style效果的自定义指令
2020/01/21 Javascript
Vue自定义render统一项目组弹框功能
2020/06/07 Javascript
[00:47]TI7不朽珍藏III——沙王不朽展示
2017/07/15 DOTA
Python中的默认参数详解
2015/06/24 Python
PyCharm使用教程之搭建Python开发环境
2016/06/07 Python
Python字符串格式化%s%d%f详解
2018/02/02 Python
Python爬虫爬取新浪微博内容示例【基于代理IP】
2018/08/03 Python
浅谈Django的缓存机制
2018/08/23 Python
解决django服务器重启端口被占用的问题
2019/07/26 Python
Python企业编码生成系统总体系统设计概述
2019/07/26 Python
opencv3/C++实现视频背景去除建模(BSM)
2019/12/11 Python
Python+OpenCV实现图像的全景拼接
2020/03/05 Python
详解基于Jupyter notebooks采用sklearn库实现多元回归方程编程
2020/03/25 Python
python数据库编程 ODBC方式实现通讯录
2020/03/27 Python
python爬虫中抓取指数的实例讲解
2020/12/01 Python
请说出这段代码执行后a和b的值分别是多少
2015/03/28 面试题
联谊活动策划书
2014/01/26 职场文书
健康家庭事迹材料
2014/05/02 职场文书
英文推荐信格式范文
2014/05/09 职场文书
体育课外活动总结
2014/07/08 职场文书
党的群众路线学习笔记
2014/11/06 职场文书
巾帼文明岗汇报材料
2014/12/24 职场文书
机关单位2016年法制宣传日活动总结
2016/04/01 职场文书