uTorrent 的 uTorrentPartFile.dat 的结构

Posted

技术标签:

【中文标题】uTorrent 的 uTorrentPartFile.dat 的结构【英文标题】:The structure of the uTorrent's uTorrentPartFile.dat 【发布时间】:2018-06-25 10:48:56 【问题描述】:

我正在尝试制作一个小型实用程序,可以自动执行uTerrent 的种子池的一些维护任务。为了验证部分下载的共享的哈希值,我必须从~uTorrentPartFile_XXX.dat 保存它们的~uTorrentPartFile_XXX.dat 文件中检索未完全包含在下载文件中的部分。这提出了两个问题:

    给定某个.torrent文件,我如何计算对应的~uTorrentPartFile_XXX.dat文件的名称(即uTorrent使用的十六进制字符串代替我的XXX) 在哪里可以找到有关文件内部结构的信息,以便从中检索所需数据? Google 未能提供帮助。

【问题讨论】:

utorrent 将其大部分状态存储在编码文件中。因此您可能可以在经过编码的部分文件中找到元数据。 @the8472 uTorrenr 存储的数据在 settings.dat 和 resume.dat 中。他们的内容很清楚。前者与共享无关,后者对于每个种子,都包含一个位图,指示下载了哪些部分(除其他外)。我正在编写的程序读取并解析它。那里没有关于零件位置的信息。零件文件的确切名称也没有提及。 【参考方案1】:

BiglyBT 团队在创建迁移插件时对 ~uTorrentPartFile_XXXX.dat 格式进行了逆向工程。https://www.biglybt.com/download/utMigratehttps://github.com/BiglySoftware/BiglyBT-plugin-migratetorrentapp

发件人:https://github.com/BiglySoftware/BiglyBT-plugin-migratetorrentapp/blob/master/src/com/biglybt/plugins/migratetorrentapp/utorrent/PartFile.java

/**
 * uTorrent partfile
 * Basically, torrent data is split into 64k parts.  Header has 4 byte index for
 * each part, pointing to data if index is > 0.  
 * After the header is the 64k data chunks, first data chunk is 1, second is 2, etc. 
 * Last data chunk may be smaller than 64k.
 * 
 * ~uTorrentPartFile_*<hexsize>*.dat
 *   <Header>, <data>
 *   
 * hexsize
 *   torrent data length in bytes in hex with no leading 0
 *
 * Header
 *   <DataIndex>[<Num64kParts>]
 *   Raw header length = <Num64kParts> * 4
 *
 * Num64kParts
 *   How many parts is required if you split torrent data length into 64k sections. 
 *   ie. Math.ceil(torrent data length in bytes / 64k)
 *
 * DataIndex
 *   4 byte little endian integer.  Values:
 *      0 
 *        No data for this 64k part
 *      1..<num64Parts>
 *        1-based positional index in <data>
 *        Location in part file can be calculated with
 *          (Header Size) + ((value - 1) * 64k)
 *   
 * data
 *   <DataPart>[up to <num64kParts>]
 *   
 * DataPart
 *   64k byte array containing torrent data.  
 *   Bytes in <DataPart> that are stored elsewhere in real files will be 0x00. 
 *   ie. non-skipped files sharing the 64k part will be 0x00. 
 *   Last <DataPart> may be less than 64k, which means the rest of the 64k would
 *   be 0x00 (and part of a non-skipped file)
 *     
 */

奖金

这里的代码 cmets 中的 resume.datsettings.dat 中的内容也有一些有用的信息:

https://github.com/BiglySoftware/BiglyBT-plugin-migratetorrentapp/blob/master/src/com/biglybt/plugins/migratetorrentapp/utorrent/ResumeConstants.javahttps://github.com/BiglySoftware/BiglyBT-plugin-migratetorrentapp/blob/master/src/com/biglybt/plugins/migratetorrentapp/utorrent/SettingsConstants.java

【讨论】:

以上是关于uTorrent 的 uTorrentPartFile.dat 的结构的主要内容,如果未能解决你的问题,请参考以下文章

WIN7 计划任务 指定的开机时运行程序(例如uTorrent等),无交互式窗口?

uTorrent 的 uTorrentPartFile.dat 的结构

通过 .NET 使用 uTorrent Web API

用uTorrent下载bt很慢

手动去除uTorrent中广告的步骤(V3.4.9依然有效)

全球最受欢迎的BT下载工具排行:2/3网友在用uTorrent迅雷不在前十