相信每一位 BT 用户都会碰到过 Dead Seed (无源种子) 的情况,特别是下载多年以前发布的老旧种子时碰到这种情况的几率特别高。
对于我来说,碰到 Dead Seed 时不得不使用 某雷(吸血软件)、eMule 来尝试下载,运气好的时候可以完成下载,但绝大多数时候都没机会。
另外一个经常碰到的情况是,有些发布种子的人其实很多时候都是先从其它 BT 种子源下载完,接着修改文件名、删些文件、加几个自己另外创建的文件,然后再次发布新的种子。——也就是说其实很多种子的主要文件内容是完全一致的,这个结论通过下载完不同的种子任务后对比文件的 sha1 可以得到确认。
BitComet 目前已经支持从 ED2K 网络下载数据,建议再进一步支持跨 BT 种子下载文件。
简单来说就是以“文件的 ED2K hash” 作为依据,加上在 BitComet 用户间交换 “文件哈希对应数据库”(file_hash_db) ,即可实现跨 BT 种子下载文件。
具体想法如下:
一. 对于 用户A1
(1) 用户A1 有文件目录结构如下
UserA1_files/ file1.txt file2.jpg file3.mp4
(2) 用户A1 现在使用 BitComet 制作 Torrent 文件得到了 seedA1.torrent ,假设该 torrent 的特征码是 seedA1_torrent_hash
(3) BitComet 再对 UserA1_files 目录下每一个文件单独生成它自己的 ED2K hash
(4) 经过上述步骤,用户A1 有了 “文件哈希对应数据库” (UserA1_file_hash_db),该 file_hash_db 内容如下
File Path File Torrent Hash ED2K File ID ED2K AICH Hash ---------------------------------------------------------------------------------------------- UserA1_files/file1.txt seedA1_torrent_hash ed2k_file_id1 ed2k_aich_hash1 UserA1_files/file2.jpg seedA1_torrent_hash ed2k_file_id2 ed2k_aich_hash2 UserA1_files/file3.mp4 seedA1_torrent_hash ed2k_file_id3 ed2k_aich_hash3
(5) 用户A1 发布种子给别人下载
二. 对于 用户A2
(1) 用户A2 下载 用户A1 发布的种子,在 BitComet 添加任务,通过 DHT 网络连接到了 用户A1,用户A1 将自己本地的 “文件哈希对应数据库” (UserA1_file_hash_db) 里面跟 seedA1_torrent_hash 相关的内容发送给 用户A2。—— 这里再次特别说明:只发送跟 seedA1_torrent_hash 相关的内容。
(2) 用户A2 将收到的 UserA1_file_hash_db 数据跟自己本地的 file_hash_db 合并。
(3) 用户A2 下载完后,他可能会另外做种,例如重新修改了目录结构、文件名称、删除了某些文件:
UserA2_haha/ movie_A2.mp4 说明:这里的 UserA2_haha/movie_A2.mp4 其实跟 UserA1_files/file3.mp4 是同一个文件。
(4) 用户A2 现在使用 BitComet 制作 Torrent 文件得到了 seedA2.torrent ,假设该 torrent 的特征码是 seedA2_torrent_hash
(5) BitComet 再对 UserA2_haha 目录下每一个文件单独生成它自己的 ED2K hash
(6) 经过上述步骤,用户A2 有了 “文件哈希对应数据库” (UserA2_file_hash_db),该 file_hash_db 内容如下
File Path File Torrent Hash ED2K File ID ED2K AICH Hash ---------------------------------------------------------------------------------------------- UserA1_files/file1.txt seedA1_torrent_hash ed2k_file_id1 ed2k_aich_hash1 UserA1_files/file2.jpg seedA1_torrent_hash ed2k_file_id2 ed2k_aich_hash2 UserA1_files/file3.mp4 seedA1_torrent_hash ed2k_file_id3 ed2k_aich_hash3 UserA2_haha/movie_A2.mp4 seedA2_torrent_hash ed2k_file_id3 ed2k_aich_hash3 说明:这时 用户A2 的 file_hash_db 有了一条文件对应关系 ( UserA1_files/file3.mp4 <==> UserA2_haha/movie_A2.mp4 )
(6) 用户A2 发布新种子给别人下载
三. 对于 用户B1
(1) 用户B1 下载的是 用户A1 发布的种子,在 BitComet 添加任务,通过 DHT 网络连接到了 用户A1,得到了 UserA1_file_hash_db 相关内容,用户B1 将相关内容合并到自己的 file_hash_db
(2) 用户B1 按照目前的 BitComet 下载任务的方式从 用户A1 处下载全部文件的数据
(3) 用户B1 通过 DHT 网络向其他 BitComet 用户询问 ed2k_file_id1、ed2k_file_id2、ed2k_file_id3 ,用户A2 收到询问后回答自己有 ed2k_file_id3,将自己的 UserA2_file_hash_db 相关内容发给了 用户B1,用户B1 将相关内容合并到自己的 file_hash_db
(4) 用户B1 现在可以从 用户A2 处下载单个文件 (ed2k_file_id3 对应的文件) 的数据 —— 现在这里就实现了跨 BT 种子下载。
四. 对于 用户B2,他下载的是 用户A2 发布的种子,他通过跟类似的方式可连接到 用户A1 来下载相应文件的数据。
最后,实现跨 BT 种子下载其实还有很多附带好处,例如:
(1) 等于是在 BitComet 用户之间实现了次级 ED2K 网络,加上有了 “文件哈希对应数据库”(file_hash_db) 就可以在 BitComet 中实现类似 eMule 的搜索功能。
(2) 以后碰到 BT 种子中有路径特别长的文件,用户操作系统不支持长路径,用户可以将该文件(改名或)移动到其它位置,然后再用 BitComet 对该文件做种,即使不发布到网络,其它用户也能够下载。