转载:http://www.itdaan.com/blog/2012/09/12/c64c4732ec5c645adf2526e6e079ac74.html
【P2P网络】磁力链接转换为种子文件 magnet to torrent
作者:zxx
1.前言
将种子文件转换为磁力链接很简单,只需要在种子文件的infohash码前面加上magnet:?xt=urn:btih:即可,相信大家在迅雷,utorrent等主流软件上也都能发现这个功能。
但是将磁力链接转换为种子文件就不那么简单了,因为sha-1算法是不可逆的,但是BT协议确提供了这个功能,但是我在网上没有找到中文的介绍,这里就将自己的研究心得贡献一下。
下面还想废话2句,告诉大家使用磁链和种子的优缺点。其实磁力链接本身是没什么用的,不管在任何软件的磁链下载中,都必须要先通过磁链得到种子文件,再使用种子文件进行常规下载。因为种子文件才有分片信息,文件大小,文件名等必要信息。所以可以看出,种子其实是必不可少的,那你可能会觉得奇怪,为什么还需要磁链呢?这是因为现在对BT的封锁太严重,传播种子并不是那么简单的事了,动不动就被和谐了,所以磁链的作用就是便于传输,因为磁链就是一个小小的文本,而种子确是一个文件呢~所以总结一下他们的优缺点:
A.种子:稳定性高,信息多,不便于传播扩散
B.磁力链接:仍需要先获得种子,不稳定,可能在某时刻不能获取,但是很便于扩散。
2.磁力链接到种子转换的策略
本人现在的研究共发现3种策略:
A.利用BT的官方协议获取
B.从迅雷的种子库获取
C.从比特彗星的种子库获取
下面对三种策略做简单介绍:
第一种,利用BT的官方协议获取
性能特色:
这种策略可以获取最多的种子,但是速度最慢,因为是官方的协议,所以很稳定,但是如果这个种子是个冷门种子时,很可能会获取不到,因为当前没有DHT用户在线,所以当使用迅雷,utorrent等客户端软件提示无法获取种子时,你可以待会再试,过阵子可能有对应种子的用户上线,她如果加入了DHT网络,我们就可以获取种子了。
实现原理:
这个方法需要阅读官方的2个扩展协议:
http://www.bittorrent.org/beps/bep_0010.html
http://www.bittorrent.org/beps/bep_0009.html
翻译稿:http://blog.csdn.net/xxxxxx91116/article/details/8549454
理解并实现这2个协议后就可以获取种子了,下面是2个协议的翻译稿。
bep_0009翻译稿:http://blog.csdn.net/xxxxxx91116/article/details/8549454
好消息!我发现这个网站 http://btdigg.org/ 是使用extend协议进行解析,大家可以试用下~速度可能会很慢,但是应该可以解析很多库里面没有的种子。
第二种,从迅雷的种子库获取
性能特色:
这种策略获取种子的速度很快,当你有一批磁力链接时,可以先使用这种方法来获取大部分种子,对迅雷种子库没有的部分,再使用第一种方法获取。
实现原理:
非常简单,在浏览器中输入
http://bt.box.n0808.com/05/A5/05153F611B337A378F73F0D32D2C16D362D06BA5.torrent
即可获取种子,其中的 05153F611B337A378F73F0D32D2C16D362D06BA5是对应种子文件的infohash码,也就是磁链的btih:字段,/05/A5是hash的第一个和最后一个字节。
当你需要大规模获取时,就自己用C++构造一个报文内从去请求吧。
第三种,从比特彗星的种子库获取
性能特色:同第二种的性能特色,但是比特彗星的库里面种子更多。因为比特彗星可以制作种子,在制作的同时可能就上传到库里面了。
实现原理:
我还没有解析出来,大家可以参见文章:
http://www.cnblogs.com/UMU618/articles/2568579.html,但是这位牛人也忘记了hash字段是怎样加密的,我不知道怎样从hash到key。如果有人发现了,希望您能告诉我,谢谢!
攻城诗赋: 第三种比特彗星成功率也很高,而且貌似不净网。至于hash的算法是 hash转回20字节形式前加“bc”后加"torrent"共29字节做SHA1得到20字节转回可读40字节形式 |
第四种,从Vuze的种子库获取
这个也蛮厉害的,我搞了半天才搞出来......
比如对于infohash为03621694F0E8B2CE87216C99CB5CA3AF23029E37的磁力链接,构造下面的URL:
http://magnet.vuze.com/magnetLookup?hash=ANRBNFHQ5CZM5BZBNSM4WXFDV4RQFHRX
其中的ANRBNFHQ5CZM5BZBNSM4WXFDV4RQFHRX是03621694F0E8B2CE87216C99CB5CA3AF23029E37的base32码,但是不能直接去网上base32转,因为转码要用03621694F0E8B2CE87216C99CB5CA3AF23029E37的二进制数据
linux下可以这样转
echo -n 03621694F0E8B2CE87216C99CB5CA3AF23029E37 | xxd -r -p|./perl_32.pl
其中的 perl_32.pl 是一个源文件,内容如下:
#!/usr/bin/perl
use MIME::Base32 qw( RFC );
undef $/; # in case stdin has newlines
$string = <STDIN>;
$encoded = MIME::Base32::encode($string);
print "$encoded\n";
如果权限不对记得要
chmod 777 perl_32.pl
补充一些种子库:
http://torrage.com/torrent/66B106B04F931DA3485282C43CF66F6BD795C8C4.torrent
http://torcache.net/torrent/66B106B04F931DA3485282C43CF66F6BD795C8C4.torrent
http://zoink.it/torrent/66B106B04F931DA3485282C43CF66F6BD795C8C4.torrent
http://magnet2torrent.com/:最终重定向使用torrage.com进行下载
http://mag2tor.com/static/torrents/05/15/3f/05153f611b337a378f73f0d32d2c16d362d06ba5.torrent 缓存的种子很少
http://178.73.198.210/:torrage.ws:http://178.73.198.210/torrent/640FE84C613C17F663551D218689A64E8AEBEABE.torrent