【P2P网络】磁力链接转换为种子文件 magnet to torrent(转)

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

 

 

转自:http://blog.csdn.net/xxxxxx91116/article/details/7971134

Android 使用NDK编译过程中遇到的问题

1.遇到 error: undefined reference to ‘调用方法名’

此问题原因是你所调用的.c/.cpp没有添加到LOCAL_SRC_FILES中或调用的第三方so库没有编译进去

2.使用第三方so库

需要在LOCAL_PATH:= $(call my-dir)下面编译第三方so库,如:

include $(CLEAR_VARS)
LOCAL_MODULE := test
LOCAL_SRC_FILES := $(MY_APP_FFMPEG_OUTPUT_PATH)/libtest.so
include $(PREBUILT_SHARED_LIBRARY)

下方使用的地方添加LOCAL_SHARED_LIBRARIES

include $(CLEAR_VARS)
................
LOCAL_SHARED_LIBRARIES := test
LOCAL_MODULE := test1
.................
include $(PREBUILT_SHARED_LIBRARY)

这样就能生成一个libtest.so一个test1.so

Linux下调整根目录的空间大小

一、目的

在使用CentOS6.3版本linux系统的时候,发现根目录(/)的空间不是很充足,而其他目录空间有很大的空闲,所以本文主要是针对现在已有的空间进行调整。首先,先来查看一下系统的空间分配情况:

[root@CentOS-78 /]# df -h  
Filesystem            Size  Used Avail Use% Mounted on  
/dev/mapper/vg_centos-lv_root  
                       50G   14G   34G  30% /  
tmpfs                 1.9G     0  1.9G   0% /dev/shm  
/dev/sda1             485M   37M  423M   8% /boot  
/dev/mapper/vg_centos-lv_home  
                      404G  670M  382G   1% /home  

下面的详细步骤部分将从vg_centos-lv_home分区下取出100G的空间添加到/vg_centos-lv_root分区上去。

二、详细步骤

1、卸载vg_centos-lv_home分区

[root@CentOS-78 /]# umount /home

此时在用df命令查看将会发现/home目录已经看不见了,如下所示:

[root@CentOS-78 /]# df -h  
Filesystem            Size  Used Avail Use% Mounted on  
/dev/mapper/vg_centos-lv_root  
                       50G   14G   34G  30% /  
tmpfs                 1.9G     0  1.9G   0% /dev/shm  
/dev/sda1             485M   37M  423M   8% /boot 

2、从新设定vg_home-lv_home的大小

[root@CentOS-78 /]# resize2fs -p /dev/mapper/vg_centos-lv_home 282G  
resize2fs 1.41.12 (17-May-2010)  
Please run 'e2fsck -f /dev/mapper/vg_centos-lv_home' first.

这一步设定vg_home-lv_home大小没有成功,系统提示我们先运行下面的命令,操作如下:

[root@CentOS-78 /]# e2fsck -f /dev/mapper/vg_centos-lv_home  
e2fsck 1.41.12 (17-May-2010)  
Pass 1: Checking inodes, blocks, and sizes  
Pass 2: Checking directory structure  
Pass 3: Checking directory connectivity  
Pass 4: Checking reference counts  
Pass 5: Checking group summary information  
/dev/mapper/vg_centos-lv_home: 1386/26836992 files (0.9% non-contiguous), 1855856/107344896 blocks  

从新设定vg_home-lv_home的大小:

[root@CentOS-78 /]# resize2fs -p /dev/mapper/vg_centos-lv_home 282G  
resize2fs 1.41.12 (17-May-2010)  
Resizing the filesystem on /dev/mapper/vg_centos-lv_home to 73924608 (4k) blocks.  
Begin pass 2 (max = 43)  
Relocating blocks             XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  
Begin pass 3 (max = 3276)  
Scanning inode table          XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  
Begin pass 4 (max = 266)  
Updating inode references     XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  
The filesystem on /dev/mapper/vg_centos-lv_home is now 73924608 blocks 

检查是否成功:

[root@CentOS-78 /]# mount /home  
[root@CentOS-78 /]#  
[root@CentOS-78 /]# df -h  
Filesystem            Size  Used Avail Use% Mounted on  
/dev/mapper/vg_centos-lv_root  
                       50G   14G   34G  30% /  
tmpfs                 1.9G     0  1.9G   0% /dev/shm  
/dev/sda1             485M   37M  423M   8% /boot  
/dev/mapper/vg_centos-lv_home  
                      278G  663M  263G   1% /home  
[root@CentOS-78 /]#  

3、将lv_home逻辑分区减小到指定大小

[root@CentOS-78 /]# lvreduce -L 282G /dev/mapper/vg_centos-lv_home  
  WARNING: Reducing active and open logical volume to 282.00 GiB  
  THIS MAY DESTROY YOUR DATA (filesystem etc.)  
Do you really want to reduce lv_home? [y/n]: y  
  Reducing logical volume lv_home to 282.00 GiB  
  Logical volume lv_home successfully resized  
[root@CentOS-78 /]#  

我认为这个命令是将已经减少的100G空间拿到系统公共的区域,可以被其他分区加载和利用。

查询卷组的信息:

[root@CentOS-78 /]# vgdisplay  
  --- Volume group ---  
  VG Name               vg_centos  
  System ID  
  Format                lvm2  
  Metadata Areas        1  
  Metadata Sequence No  5  
  VG Access             read/write  
  VG Status             resizable  
  MAX LV                0  
  Cur LV                3  
  Open LV               3  
  Max PV                0  
  Cur PV                1  
  Act PV                1  
  VG Size               465.27 GiB  
  PE Size               4.00 MiB  
  Total PE              119109  
  Alloc PE / Size       86472 / 337.78 GiB  
  Free  PE / Size       32637 / 127.49 GiB  
  VG UUID               1k4ooN-RFV9-uyf1-uMYf-aERG-YaGs-ZNoSD6  

Free PE / Size指定的应该是现在可在分配的空间。

4、增加vg_centos-lv_root分区的大小

将可用的空间添加到vg_centos-lv_root分区上面:

[root@CentOS-78 /]# lvextend -L +127.40G /dev/mapper/vg_centos-lv_root  
  Rounding up size to full physical extent 127.40 GiB  
  Extending logical volume lv_root to 177.40 GiB  
  Logical volume lv_root successfully resized  
[root@CentOS-78 /]#  

从新设定该分区的大小:

[root@CentOS-78 /]# resize2fs -p /dev/mapper/vg_centos-lv_root  
resize2fs 1.41.12 (17-May-2010)  
Filesystem at /dev/mapper/vg_centos-lv_root is mounted on /; on-line resizing required  
old desc_blocks = 4, new_desc_blocks = 12  
Performing an on-line resize of /dev/mapper/vg_centos-lv_root to 46504960 (4k) blocks.  
The filesystem on /dev/mapper/vg_centos-lv_root is now 46504960 blocks long.

5、再次查看分区大小

[root@CentOS-78 /]# df -h  
Filesystem            Size  Used Avail Use% Mounted on  
/dev/mapper/vg_centos-lv_root  
                      175G   14G  153G   9% /  
tmpfs                 1.9G     0  1.9G   0% /dev/shm  
/dev/sda1             485M   37M  423M   8% /boot  
/dev/mapper/vg_centos-lv_home  
                      278G  663M  263G   1% /home  

我们发现vg_centos-lv_root分区的空间已经增加了125G,之所以比lv_home减少的空间要多25G主要是由于我们把系统所有的可用的空间都加在了lv_root分区。

三、所遇到的问题

1、在卸载/home目录的时候失败

可先执行如下fuser命令,然后再umount即可:

[root@CentOS-78 /]# fuser -m /home  
[root@CentOS-78 /]#  

2、设定完lv_home的大小,再次mount该分区时,发现用df命令无法看到给分区,此时只要在mount一次即可

3、在设定lv_root的大小时,不要把Free PE / Size的空间全部都用上,这很可能会出现Free PE空间不足的现象,建议保留一点Free PE的空间。
==================================================================

参考:

http://hi.baidu.com/%B7%E7%B6%C0/blog/item/c4aa9a81b204dbc89023d956.html

http://qianxunniao.iteye.com/blog/1393726