Just Sword Wang's Blog

node编辑BT种子

在又一波净-网行动之后,迅雷倒下了,虽然这期间它居然还神奇的上市成功,但已经彻底被曾经的会员所唾弃。就目前看来,诸如百度离线之类,替代品还是有一些。回归主题内容,bt种子的内容是会被侦测的,最简单的就是内容的标题,这也是下载软件对于“敏感词”的最基本的判定。要绕过去就需要去掉这些敏感的部分。

bt种子,即torrent文件,其简单的格式定义可以在维基百科中找到。torrent包含Tracker信息和文件信息两部分,而我们需要编辑的就是文件信息。

torrent的文件信息经过Bencode编码而成,所以,要修改最简单的方法就是使用bencode editor,展开文件内容后依次修改内容。这样做完全OK,只是效率未免太低。如果碰到一大波敏感,有种要改到死的感觉。这个时候,可以求助于网上的一些在线编辑器,可以做到批量修改。

当然,偶尔也会遇到在线工具抽风的情况,而且这类站点多为个人维护,作为一个小站长也深知维护之不易,那天挂掉并不稀奇。所以啊,准备好备用方案也不无道理。

最后方案还是选择了node——用node-torrent存取文件信息,再用blueimp-md5简单将所有内容名全部hash一遍,简单粗暴,但好用就可以了。下面就是随手写的代码:

var nt = require('nt');
var md5 = require('blueimp-md5').md5;
var fs = require('fs')

nt.read('src.torrent', function(err, torrent) {
	if (err) throw err;
	var info = torrent.metadata.info;
	
	if(info.files){ // multi files
		for(var i= 0;i< info.files.length;i++){
			var file = info.files[i];
			var len = file.path.length;

			var str = file.path[len - 1];
			var arr = str.split('.');
			var ext = '.' + arr[arr.length - 1];
			arr.pop();
			var fname = arr.join('.');

			file.path = [md5(fname) + ext];
			delete file['path.utf-8'];	
		}
		
		var name = info.name;
		info.name = md5(name);
		delete info['name.utf-8'];
		
		info['publisher'] = '';
		info['publisher-url'] = '';
		delete info['publisher-url.utf-8'];
		delete info['publisher.utf-8'];
	}else{ // single file
		var name = torrent.metadata.info.name;
		var arr = name.split('.');
		
		var name8 = torrent.metadata.info['name.utf-8'];
		var arr8 = name8.split('.');

		torrent.metadata.info.name = md5(torrent.metadata.info.name)+ '.' + arr[arr.length-1];
		torrent.metadata.info['name.utf-8'] = md5(torrent.metadata.info['name.utf-8'] )+ '.' + arr8[arr8.length-1];
	}

	// write to new file
	torrent.createWriteStream('src-hashed.torrent');
});

我只测试了一次,看到下载没有问题,就没再怎么修改。另外,有些种子设置了修改限制,修改会导致下载失败。除开这些,种子本身也不能太冷门,毕竟相比迅雷的无节操网络,网盘离线还是要弱很多的。

心血来潮一时兴起写的,不足之处难免。对于不知此方法的兄弟,我只能帮你到这儿了...


评论加载中...

Disqus提供评论支持,如果评论长时间未加载,请飞跃长城。