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

 更新时间:2015年03月27日 08:56:43   投稿:hebedich  
torrent文件,又被称为种子,原来只是用于记录 bt下载当中所需信息的一种文件。但是随着互联网的极大发展,一些人士将一些邪恶的信息注入到了小小的 torrent文件当中,种子从此变成了邪恶的代名词。

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

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

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

种子文件结构

以下内容来自维基百科

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

上图是一个典型种子的结构,那些被识别出来的邪恶关键字就藏在 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:

files:

可以看到用 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);

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

实战阶段

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

一开始它是被拒绝的。

然后运行脚本进行清洗。

node cleanTorrent IPTD-XXX.torrent

下载成功了!

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

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

最后

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

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

相关文章

  • 详解一个基于套接字实现长连接的express

    详解一个基于套接字实现长连接的express

    这篇文章主要介绍了详解一个基于套接字实现长连接的express,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03
  • Node绑定全局TraceID的实现方法

    Node绑定全局TraceID的实现方法

    这篇文章主要介绍了Node 绑定全局 TraceID的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11
  • node.js事件循环机制及与js区别详解

    node.js事件循环机制及与js区别详解

    这篇文章主要为大家介绍了node.js事件循环机制及与js区别详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09
  • Node.js dgram模块实现UDP通信示例代码

    Node.js dgram模块实现UDP通信示例代码

    这篇文章主要介绍了Node.js dgram模块实现UDP通信示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • 使用Node操作文件夹的常用API

    使用Node操作文件夹的常用API

    这篇文章我们将学习Node对文件夹的操作,当我们学习完文件夹的操作后结合文件的操作我们就可以真正的通过Node在日常的工作生活中解决许多和文件相关的问题,这篇文章我们将首先讲解文件夹操作的几个API,然后完成一下最常见的文件夹递归的操作,需要的朋友可以参考下
    2024-08-08
  • 基于node实现websocket协议

    基于node实现websocket协议

    这篇文章主要介绍了基于node实现websocket协议的相关资料,需要的朋友可以参考下
    2016-04-04
  • nodejs个人博客开发第四步 数据模型

    nodejs个人博客开发第四步 数据模型

    这篇文章主要为大家详细介绍了nodejs个人博客开发的数据模型,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-04-04
  • 用Node.JS打造一个恶劣天气实时预警系统

    用Node.JS打造一个恶劣天气实时预警系统

    本文将从实战的角度出发,利用NodeJS以及聚合数据的第三方免费接口打造一个完整的天气实时预警项目系统,具有一定的参考价值,感兴趣的可以了解一下
    2021-12-12
  • nodejs开发微博实例

    nodejs开发微博实例

    本文给大家分享的是使用node.js实现开发微博的实例,主要是看了nodejs开发指南之后发现书上的代码很多已经不能用了,原因是express版本升级了,所以今天就尝试着吧开发微博的实例也升下级,推荐给大家。
    2015-03-03
  • 使用Nodejs开发微信公众号后台服务实例

    使用Nodejs开发微信公众号后台服务实例

    这篇文章主要介绍了使用Nodejs开发微信公众号后台服务实例,在这个实例中,主要使用到了express, wechat, mongodb, monk等模块,需要的朋友可以参考下
    2014-09-09

最新评论