Node.js 去掉種子(torrent)文件里的邪惡信息
2012 年,一部名為 ABS-130 的日本影片引起了網(wǎng)絡(luò)的震動(dòng),網(wǎng)絡(luò)上紛紛出現(xiàn)了 “當(dāng)初求種像條狗,如今*完嫌人丑”的現(xiàn)象,成為了 2012 年互聯(lián)網(wǎng)的一件大事件。
2014年,凈網(wǎng)行動(dòng)如火如荼地進(jìn)行,各大互聯(lián)網(wǎng)公司都作出了表率,一時(shí)之間XX云、X雷都把萬(wàn)惡的種子拒之門外。凈網(wǎng)行動(dòng)萬(wàn)歲!?。ㄟ€我蒼老師!?。?/p>
各大網(wǎng)盤、下載應(yīng)用都從種子當(dāng)中提取關(guān)鍵信息,將種子拒之門外。這些關(guān)鍵信息究竟藏在哪里?讓我們一探究竟。
種子文件結(jié)構(gòu)
以下內(nèi)容來(lái)自維基百科
.torrent種子文件本質(zhì)上是文本文件,包含Tracker信息和文件信息兩部分。Tracker信息主要是BT下載中需要用到的Tracker服務(wù)器的地址和針對(duì)Tracker服務(wù)器的設(shè)置,文件信息是根據(jù)對(duì)目標(biāo)文件的計(jì)算生成的,計(jì)算結(jié)果根據(jù)BitTorrent協(xié)議內(nèi)的Bencode規(guī)則進(jìn)行編碼。它的主要原理是需要把提供下載的文件虛擬分成大小相等的塊,塊大小必須為2k的整數(shù)次方(由于是虛擬分塊,硬盤上并不產(chǎn)生各個(gè)塊文件),并把每個(gè)塊的索引信息和Hash驗(yàn)證碼寫入種子文件中;所以,種子文件就是被下載文件的“索引”。
上圖是一個(gè)典型種子的結(jié)構(gòu),那些被識(shí)別出來(lái)的邪惡關(guān)鍵字就藏在 name 和 file 當(dāng)中。name 包含了該種子的名字,如:abcd-123 性感XXXX。而 file 當(dāng)中的 path 則包含了要下載的所有文件的信息,如:草X社區(qū)最新地址.txt等等。
Node.js 和 parse-torrent 庫(kù)
為了尋找出種子當(dāng)中的邪惡信息我們請(qǐng)出了 Node.js 和 parse-torrent庫(kù) 作為助手。
實(shí)驗(yàn)準(zhǔn)備:
種子一枚安裝 Node.js 電腦一臺(tái)
首先我們利用 npm 安裝 parse-torrent 庫(kù),它幫助我們快速找到種子內(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);
這個(gè)庫(kù)會(huì)將種子的信息解析出來(lái),以對(duì)象的形式返回給我們。
查看結(jié)果:
name:
files:
可以看到用 parse-torrent 庫(kù)解析出來(lái)的 name 和 files 的信息都是以 Buffer 形式存儲(chǔ)。
清洗種子
如何將種子里的邪惡信息清洗掉,把萬(wàn)惡的種子扼殺在搖籃之中,最重要的就算要清除調(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 對(duì)象重新生成一個(gè) torrent 文件 var buf = parseTorrent.toTorrentFile({ info: cleanInfos[i] }); fs.writeFile(dir + "/" + cleanInfos[i].name + ".torrent", buf);
經(jīng)過(guò)這樣之后,我們的邪惡種子文件就變成這樣了:
實(shí)戰(zhàn)階段
首先準(zhǔn)備一個(gè)種子,進(jìn)行XX云的離線下載。
一開(kāi)始它是被拒絕的。
然后運(yùn)行腳本進(jìn)行清洗。
node cleanTorrent IPTD-XXX.torrent
下載成功了!
腳本源碼放在這里了,要去看一下我的下載內(nèi)容了?。?!
(**都脫了你給我看這個(gè)!?。。?/p>
最后
本文純屬技術(shù)討論,感謝你的閱讀,有不足之處請(qǐng)為我指出。
請(qǐng)您花一點(diǎn)時(shí)間將文章分享給您的朋友或者留下評(píng)論。我們將會(huì)由衷感謝您的支持!
- nodejs實(shí)現(xiàn)遍歷文件夾并統(tǒng)計(jì)文件大小
- Node.js 文件夾目錄結(jié)構(gòu)創(chuàng)建實(shí)例代碼
- Node.js查找當(dāng)前目錄下文件夾實(shí)例代碼
- Node.js 使用遞歸實(shí)現(xiàn)遍歷文件夾中所有文件
- Node.JS 循環(huán)遞歸復(fù)制文件夾目錄及其子文件夾下的所有文件
- nodejs遍歷文件夾下并操作HTML/CSS/JS/PNG/JPG的方法
- Nodejs實(shí)現(xiàn)多文件夾文件同步
- 對(duì)node通過(guò)fs模塊判斷文件是否是文件夾的實(shí)例講解
- 利用node 判斷打開(kāi)的是文件 還是 文件夾的實(shí)例
- node.js中fs文件系統(tǒng)目錄操作與文件信息操作
- nodejs實(shí)現(xiàn)獲取本地文件夾下圖片信息功能示例
相關(guān)文章
使用Puppeteer實(shí)現(xiàn)頁(yè)面遍歷的示例代碼
很多時(shí)候我們需要遍歷我們的頁(yè)面來(lái)檢查頁(yè)面是否存在問(wèn)題,以更好的保證可用性和安全性,下面就來(lái)講講如何使用puppeteer來(lái)實(shí)現(xiàn)頁(yè)面遍歷的功能吧2023-06-06基于nodejs+express(4.x+)實(shí)現(xiàn)文件上傳功能
通過(guò)一段時(shí)間的查閱資料發(fā)現(xiàn)實(shí)現(xiàn)上傳的方式有:1.express中間件multer模塊2.connect-multiparty模塊(但現(xiàn)在 官方不推薦 )3.使用multiparty模塊實(shí)現(xiàn)4.使用formidable插件實(shí)現(xiàn),本文給大家介紹nodejs+express(4.x+)實(shí)現(xiàn)文件上傳功能,需要的朋友參考下2015-11-11node.js 動(dòng)態(tài)執(zhí)行腳本
其中的Script對(duì)象,就與require('vm')返回的對(duì)象很相似,而實(shí)質(zhì)上,vm模塊就是對(duì)Script對(duì)象的封裝。2016-06-06三分鐘教你用Node做一個(gè)微信哄女友(基友)神器(面向小白)
這篇文章主要介紹了三步教你用Node做一個(gè)微信哄女友(基友)神器(面向小白),用node和wechaty微信網(wǎng)頁(yè)接口開(kāi)發(fā)的一款小工具,可以定時(shí)給女朋友發(fā)每天的天氣情況,天氣提醒,每日一句。通過(guò)配置機(jī)器人api后還可以實(shí)現(xiàn)微信機(jī)器人自動(dòng)陪女朋友聊天。,需要的朋友可以參考下2019-06-06Node.js系列之發(fā)起get/post請(qǐng)求(2)
這篇文章主要為大家詳細(xì)介紹了Node.js系列之發(fā)起get/post請(qǐng)求,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-08-08詳解如何使用Node.js連接數(shù)據(jù)庫(kù)ORM
這篇文章主要為大家介紹了詳解如何使用Node.js連接數(shù)據(jù)庫(kù)ORM示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12如何利用node.js開(kāi)發(fā)一個(gè)生成逐幀動(dòng)畫的小工具
這篇文章主要給大家介紹了關(guān)于如何利用node.js開(kāi)發(fā)一個(gè)生成逐幀動(dòng)畫小工具的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用node.js具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12nodejs連接mysql數(shù)據(jù)庫(kù)及基本知識(shí)點(diǎn)詳解
這篇文章主要介紹了nodejs連接mysql數(shù)據(jù)庫(kù),結(jié)合實(shí)例形式總結(jié)分析了nodejs連接與操作mysql數(shù)據(jù)庫(kù)的相關(guān)模板、配置及mysql數(shù)據(jù)庫(kù)查詢、添加數(shù)據(jù)等操作技巧,需要的朋友可以參考下2018-03-03