Node.js 清洗萬惡的種子

萬惡的種子

torrent文件,又被稱爲種子,原來只是用於記錄 bt下載當中所需信息的一種文件。可是隨着互聯網的極大發展,一些人士將一些邪惡的信息注入到了小小的 torrent文件當中,種子今後變成了邪惡的代名詞。javascript

2012 年,一部名爲 ABS-130 的日本影片引發了網絡的震動,網絡上紛紛出現了 「當初求種像條狗,現在*完嫌人醜」的現象,成爲了 2012 年互聯網的一件大事件。java

2014年,淨網行動如火如荼地進行,各大互聯網公司都做出了表率,一時之間XX雲、X雷都把萬惡的種子拒之門外。淨網行動萬歲!!(還我蒼老師!!)node

各大網盤、下載應用都從種子當中提取關鍵信息,將種子拒之門外。這些關鍵信息究竟藏在哪裏?讓咱們一探究竟。git

種子文件結構

如下內容來自維基百科github

.torrent種子文件本質上是文本文件,包含Tracker信息和文件信息兩部分。Tracker信息主要是BT下載中須要用到的Tracker服務器的地址和針對Tracker服務器的設置,文件信息是根據對目標文件的計算生成的,計算結果根據BitTorrent協議內的Bencode規則進行編碼。它的主要原理是須要把提供下載的文件虛擬分紅大小相等的塊,塊大小必須爲2k的整數次方(因爲是虛擬分塊,硬盤上並不產生各個塊文件),並把每一個塊的索引信息和Hash驗證碼寫入種子文件中;因此,種子文件就是被下載文件的「索引」npm

2015-03_torrent-structure.PNG

上圖是一個典型種子的結構,那些被識別出來的邪惡關鍵字就藏在 name 和 file 當中。name 包含了該種子的名字,如:abcd-123 性感XXXX。而 file 當中的 path 則包含了要下載的全部文件的信息,如:草X社區最新地址.txt等等。服務器

Node.js 和 parse-torrent 庫

爲了尋找出種子當中的邪惡信息咱們請出了 Node.js 和 parse-torrent庫 做爲助手。網絡

實驗準備:ui

  • 種子一枚編碼

  • 安裝 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:

2015-03_torrent-info-name.PNG

files:

2015-03_torrent-info-files.PNG

能夠看到用 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);

通過這樣以後,咱們的邪惡種子文件就變成這樣了:

2015-03_clean-torren-info.PNG

實戰階段

首先準備一個種子,進行XX雲的離線下載。

2015-03_torrent.PNG

一開始它是被拒絕的。

2015-03_36000.PNG

而後運行腳本進行清洗。

node cleanTorrent IPTD-XXX.torrent

下載成功了!

2015-03_download-success.PNG

腳本源碼放在這裏了,要去看一下個人下載內容了!!!

2015-03_tips.PNG

2015-03_baoman.jpg

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

最後

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

本文同步於個人我的博客 http://blog.acwong.org/2015/03/25/clean-your-torrent-with-node/

相關文章
相關標籤/搜索