Node.js 去掉種子(torrent)文件里的邪惡信息
2012 年,一部名為 ABS-130 的日本影片引起了網(wǎng)絡(luò)的震動,網(wǎng)絡(luò)上紛紛出現(xiàn)了 “當(dāng)初求種像條狗,如今*完嫌人丑”的現(xiàn)象,成為了 2012 年互聯(lián)網(wǎng)的一件大事件。
2014年,凈網(wǎng)行動如火如荼地進行,各大互聯(lián)網(wǎng)公司都作出了表率,一時之間XX云、X雷都把萬惡的種子拒之門外。凈網(wǎng)行動萬歲?。。ㄟ€我蒼老師?。。?/p>
各大網(wǎng)盤、下載應(yīng)用都從種子當(dāng)中提取關(guān)鍵信息,將種子拒之門外。這些關(guān)鍵信息究竟藏在哪里?讓我們一探究竟。
種子文件結(jié)構(gòu)
以下內(nèi)容來自維基百科
.torrent種子文件本質(zhì)上是文本文件,包含Tracker信息和文件信息兩部分。Tracker信息主要是BT下載中需要用到的Tracker服務(wù)器的地址和針對Tracker服務(wù)器的設(shè)置,文件信息是根據(jù)對目標(biāo)文件的計算生成的,計算結(jié)果根據(jù)BitTorrent協(xié)議內(nèi)的Bencode規(guī)則進行編碼。它的主要原理是需要把提供下載的文件虛擬分成大小相等的塊,塊大小必須為2k的整數(shù)次方(由于是虛擬分塊,硬盤上并不產(chǎn)生各個塊文件),并把每個塊的索引信息和Hash驗證碼寫入種子文件中;所以,種子文件就是被下載文件的“索引”。

上圖是一個典型種子的結(jié)構(gòu),那些被識別出來的邪惡關(guān)鍵字就藏在 name 和 file 當(dāng)中。name 包含了該種子的名字,如:abcd-123 性感XXXX。而 file 當(dāng)中的 path 則包含了要下載的所有文件的信息,如:草X社區(qū)最新地址.txt等等。
Node.js 和 parse-torrent 庫
為了尋找出種子當(dāng)中的邪惡信息我們請出了 Node.js 和 parse-torrent庫 作為助手。
實驗準(zhǔn)備:
種子一枚安裝 Node.js 電腦一臺
首先我們利用 npm 安裝 parse-torrent 庫,它幫助我們快速找到種子內(nèi)的信息。
npm install parse-torrent
var fs = require("fs");
var parseTorrent = require('parse-torrent');
var info = parseTorrent(fs.readFileSync('my.torrent'));
console.log(info);
這個庫會將種子的信息解析出來,以對象的形式返回給我們。
查看結(jié)果:
name:

files:

可以看到用 parse-torrent 庫解析出來的 name 和 files 的信息都是以 Buffer 形式存儲。
清洗種子
如何將種子里的邪惡信息清洗掉,把萬惡的種子扼殺在搖籃之中,最重要的就算要清除調(diào) 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);
經(jīng)過這樣之后,我們的邪惡種子文件就變成這樣了:

實戰(zhàn)階段
首先準(zhǔn)備一個種子,進行XX云的離線下載。

一開始它是被拒絕的。

然后運行腳本進行清洗。
node cleanTorrent IPTD-XXX.torrent
下載成功了!

腳本源碼放在這里了,要去看一下我的下載內(nèi)容了?。?!


(**都脫了你給我看這個?。。。?/p>
最后
本文純屬技術(shù)討論,感謝你的閱讀,有不足之處請為我指出。
請您花一點時間將文章分享給您的朋友或者留下評論。我們將會由衷感謝您的支持!
- nodejs實現(xiàn)遍歷文件夾并統(tǒng)計文件大小
- Node.js 文件夾目錄結(jié)構(gòu)創(chuàng)建實例代碼
- Node.js查找當(dāng)前目錄下文件夾實例代碼
- Node.js 使用遞歸實現(xiàn)遍歷文件夾中所有文件
- Node.JS 循環(huán)遞歸復(fù)制文件夾目錄及其子文件夾下的所有文件
- nodejs遍歷文件夾下并操作HTML/CSS/JS/PNG/JPG的方法
- Nodejs實現(xiàn)多文件夾文件同步
- 對node通過fs模塊判斷文件是否是文件夾的實例講解
- 利用node 判斷打開的是文件 還是 文件夾的實例
- node.js中fs文件系統(tǒng)目錄操作與文件信息操作
- nodejs實現(xiàn)獲取本地文件夾下圖片信息功能示例
相關(guān)文章
nodejs實現(xiàn)獲取本地文件夾下圖片信息功能示例
這篇文章主要介紹了nodejs實現(xiàn)獲取本地文件夾下圖片信息功能,涉及node.js針對文件、目錄的遍歷、讀取等相關(guān)操作技巧,需要的朋友可以參考下2019-06-06
我的Node.js學(xué)習(xí)之路(二)NPM模塊管理
npm 是 Node.js 的模塊依賴管理工具。作為開發(fā)者使用的工具,主要解決開發(fā) Node.js 時會遇到的問題。如同 RubyGems 對于 Ruby 開發(fā)者和 Maven 對于 Java 開發(fā)者的重要性,npm 對與 Node.js 的開發(fā)者和社區(qū)的重要性不言而喻。2014-07-07
Node.js對MongoDB數(shù)據(jù)庫實現(xiàn)模糊查詢的方法
模糊查詢是數(shù)據(jù)庫的基本操作之一,下面這篇文章主要給大家介紹了利用Node.js對MongoDB數(shù)據(jù)庫實現(xiàn)模糊查詢的方法教程,文中給出了詳細(xì)的介紹和示例代碼,對大家具有一定的參考價值,需要的朋友們下面來一起看看吧。2017-05-05
Node.JS 循環(huán)遞歸復(fù)制文件夾目錄及其子文件夾下的所有文件
在Node.js中,要實現(xiàn)目錄文件夾的循環(huán)遞歸復(fù)制也非常簡單,使用fs模塊即可,僅需幾行,而且性能也不錯,我們先來實現(xiàn)文件的復(fù)制,需要的朋友可以參考下2017-09-09

