首頁 >web前端 >js教程 >Node.js 去掉種子(torrent)檔案裡的邪惡訊息_node.js

Node.js 去掉種子(torrent)檔案裡的邪惡訊息_node.js

WBOY
WBOY原創
2016-05-16 16:07:252417瀏覽

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 函式庫,它幫助我們快速找到種子內的資訊。

<code>npm install parse-torrent</code>
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雲的離線下載。

一開始它是被拒絕的。

然後執行腳本進行清洗。

<code>node cleanTorrent IPTD-XXX.torrent</code>

下載成功了!

腳本原始碼放在這裡了,要去看我的下載內容了! ! !

(**都脫了你給我看這個!!!)

最後

本文純屬技術討論,感謝你的閱讀,有不足之處請為我指出。

請您花一點時間將文章分享給您的朋友或留下評論。我們將由衷感謝您的支持!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn