我有一个 Base32 信息哈希。例如IXE2K3JMCPUZWTW3YQZZOIB5XD6KZIEQ,我需要将其转换为 base16。
我怎样才能用 PHP 做到这一点?
我的代码如下所示:
$hash32=strtolower($hash32);
echo $hash32; // shows - IXE2K3JMCPUZWTW3YQZZOIB5XD6KZIEQ
$hash32=sha1($hash32);
$hash16=base_convert($hash32, 32, 16);
echo "</br>";
echo $hash16 // shows - 3ee5e7325a282c56fe2011125e0492f6ffbcd467
Run Code Online (Sandbox Code Playgroud)
在我的代码中,基于 16 的信息哈希无效。
有效的信息哈希是45C9A56D2C13E99B4EDBC43397203DB8FCACA090
如何获得有效的信息哈希?
谢谢
libtorrent 是否提供内置跟踪器?我正在查看 API 文档和示例,但在这些行中找不到任何内容。
其他库(如 BitTorando、Snark 等)也公开了跟踪器。
任何人对此有任何想法,或者是否有任何代码可以帮助我用 libtorrent 本身启动跟踪器。
我想知道是否有可能,拥有一个torrent集合(IE包含多个文件的torrent)来提取单个文件,生成一个几乎全新的torrent /磁力链接,只下载该单个文件但使用相同的来源(宣布等)而不是下载整个洪流,然后选择下载或不下载.
谢谢你的任何提示.
我正在尝试使用BitTorrent UDP 跟踪器协议从公共 UDP 跟踪器(例如 tracker.publicbt.com 或 tracker.openbittorrent.com)执行 UDP 抓取。我的应用程序向跟踪器发送一个 connection_id 请求,并使用该 ID 执行抓取。抓取响应从跟踪器返回,没有错误表明数据包格式错误,但无论我使用什么 info_hash,我都会返回“0”作为播种者、吸血者和完成者的数量。
我已经彻底检查了数据包的大小是否正确,info_hash 是否以正确的偏移量开始,以及数据是否全部正确。据我所知,创建和发送数据包没有问题。这个问题几天来一直没有得到解答,所以我更新并编辑了下面的代码示例,希望有人能提供帮助。
我已将 info_hash 硬编码到以下示例中。在命令行上运行时,此代码应连接到跟踪器,获取 connection_id,然后在 Ubuntu 种子 info_hash 上执行抓取,将各种信息输出到控制台。
connection_id 被分成 2 部分,因为它是一个 64 位整数。
var dgram = require('dgram'),
server = dgram.createSocket("udp4"),
connectionIdHigh = 0x417,
connectionIdLow = 0x27101980,
交易 ID,
行动,
trackerHost = "tracker.publicbt.com",
跟踪端口 = 80,
infoHash = "",
ACTION_CONNECT = 0,
ACTION_ANNOUNCE = 1,
ACTION_SCRAPE = 2,
ACTION_ERROR = 3,
sendPacket = 函数(缓冲区,主机,端口){
“严格使用”;
server.send(buf, 0, buf.length, port, host, function(err, … 当我下载时,说一个 ISO 映像,使用 torrent;我还应该验证文件的完整性(例如,通过计算 sha256 哈希),还是在下载时自动完成?
我从这里下载了 ubuntu 17.10 的 torrent 文件:https : //www.ubuntu.com/download/alternative-downloads
这是里面的内容:
TorrentInfo{Created By: null
Main tracker: http://torrent.ubuntu.com:6969/announce
Comment: Ubuntu CD releases.ubuntu.com
Info_hash: f07e0b0584745b7bcb35e98097488d34e68623d0
Name: ubuntu-17.10.1-desktop-amd64.iso
Piece Length: 524288
Pieces: 2866
Total Size: 1502576640
Is Single File Torrent: true
File List:
Tracker List:
http://torrent.ubuntu.com:6969/announce
http://ipv6.torrent.ubuntu.com:6969/announce
Run Code Online (Sandbox Code Playgroud)
我尝试过的:
我发送:(仅洪流信息哈希)
并收到:
你寄给我垃圾 - id 不是 20
我发送了:(种子信息哈希和我的对等 ID)
并收到:
你给我发了垃圾 - 基数为 10 的 long() 无效文字:''
规格:
https://wiki.theory.org/index.php/BitTorrentSpecification#Tracker_HTTP.2FHTTPS_Protocol
BitTorrent协议不指定块(块)大小。这是留给用户的。(我见过相同内容的不同 torrent 有 3 个或更多不同的选择。)
\n我正在考虑提交BitTorrent 增强提案,该提案需要为整个 torrent 以及单个文件(其中BTv2 (BEP 52))强制指定特定的块大小 \xe2\x80\x94指定 bs=16KiB)强制指定特定的块大小 \xe2\x80\x94 。
\n我发现唯一接近的是 rsync 块大小算法Tridgell & Mackerras 技术论文中的 rsync 块大小算法中的 rsync 块大小算法。它们的 bs=300-1100 B(# 字节不是 2 的幂)。
\n然而,Torrent通常 使用bs=64kB\xe2\x80\x9316MB(# bytes 是 2 的幂,比 rsync 大得多)(对于 BTv2,文件使用 16KiB)。
\n指定的块大小不需要是常量。当然,它可能是事物散列大小的函数(就像 rsync 中的那样)。它也可以是文件类型的函数;例如,可能有一些块大小更适合使部分视频/存档/等文件更可用。
\n\n所以\xe2\x80\xa6
\nTorrent永远不会取代HTTP,甚至FTP下载选项.这就是说,为什么在更多网站上这些选项旁边没有torrent链接?
我正在想象一个网络系统,下载的文件可以通过HTTP下载,比如说http://example.com/downloads/files/myFile.tar.bz2,种子可以廉价自动生成并存储/downloads/torrents/myFile.tar.bz2.torrent,跟踪器可能是/downloads/tracker/.
跟踪器是一个明确定义的问题,并且实现起来并不难以置信,并且已经存在许多替代方案.我想在这里定制一个可以做到这一点并不困难.
自动生成的torrent文件可以包含普通的HTTP服务器作为永久种子,大多数(如果不是全部)主要的torrent客户端都很好地支持这样做的扩展,并且不需要在服务器端重新配置或使用特殊的东西(它使用库存标准HTTP范围标题).
就个人而言,如果我设置这样一个系统,我会将/downloads/files/目录速度限制在合理的范围内,比如说40-50kb/s,具体取决于你究竟要服务的内容.
这样的文件传送系统是否存在?你是否会使用它:对你的个人,公司或其他网站?
我正在使用C++开发一个torrent客户端.我无法理解与同行的消息结构.如何使用C++创建简单的握手消息,如何读取响应?问题是我必须发送的数据的结构,然后是我必须阅读的结构.我想向种子发送一个握手消息,发送一个BlockBuf示例.我如何创建BlockBuf的内容?问题是我必须用于消息而不是对等连接的结构...... :(
嗯,我正在一个bittorent客户端上,我试图通过下载特定的一块,并从中提取图像生成的视频文件的缩略图,但我一直没能想出一个办法这样做.谢谢
bittorrent ×10
c++ ×3
http ×3
libtorrent ×2
p2p ×2
checksum ×1
http-get ×1
info-hash ×1
javascript ×1
magnet-uri ×1
metadata ×1
node.js ×1
php ×1
rsync ×1
tracker ×1
udp ×1