标签: bittorrent

是否允许在Mainline DHT中的同一ip:端口对后面运行几个不同的DHT节点?

是否允许在Mainline DHT中的同一ip:端口对后面运行几个不同的DHT节点?哪个节点应该回复DHT查询消息?全部或其中一个?

先感谢您.

bittorrent dht

4
推荐指数
1
解决办法
378
查看次数

构建分布式bittorrent-SQL数据库

我有一个分布式SQL数据库的想法,使用bittorrent协议来提取和写入其数据.

为了论证,我们假设这是一个消息传递应用程序,其中数千个用户运行包含消息传递窗口的程序,以及用于编写消息的输入框.

编写的每条消息都会对自己的sqlite DB进行INSERT.

如何做到这一点

  • 下载一个基本上包含用于创建数据库的模式/ DDL的.torrent文件,并在本地计算机上创建它.
  • 每当"写入"动作完成时(就像用户想要发送消息一样),INSERT行(有点像delta)会做两件事:
    • 写入自己的内部数据库
    • 从该行创建一个.torrent文件,名为messaging- [my-ip] - [UTC_timestamp] .torrent,并将其发布到跟踪器
  • 运行应用程序的每个人都在不断地在跟踪器上扫描这个特定名称的文件(可能在某个特定日期之后),下载.torrent并托管它,并在其本地数据库上运行INSERT命令.

你拥有的是大量的delta文件,所有的P2P托管都是为了冗余,在很多机器上更新本地的.sqlite数据库.

我遇到的一些问题

  • 如何刮取某个文件名的种子?我已经阅读了http bittorrent跟踪器规范,但您似乎只能根据其特定的信息名称查询文件.有没有办法查询一组文件,或基于文件名?

  • 如何从跟踪器下载.torrent文件?我是否需要在中央服务器上托管文件,还是可以使用跟踪器以某种方式下载文件?如果我必须自己托管.torrent文件......

    • 这不会破坏分散式数据库的目的,因为如果我的网站出现故障,应用程序将停止获取更新吗?

我在这里先向您的帮助表示感谢.

sql database sqlite bittorrent bittorrent-sync

4
推荐指数
1
解决办法
1287
查看次数

使用Node.JS下载Torrent

我想知道是否有人有一个如何使用NodeJS下载torrent的例子?基本上,我有一个种子的RSS Feed,我迭代并获取torrent文件URL,然后想在服务器上启动该torrent的下载.

我已经解析并在RSS中循环了,但是我已经尝试了几个npm包但它们要么已经崩溃,要么只是不稳定.如果有人有任何建议,例子,任何东西......我将非常感激.谢谢.

router.get('/', function(req, res) {
  var options = {};
  parser.parseURL('rss feed here', options, function(err, articles) {
    var i = 0;
    var torrent;
    for (var title in articles.items) {
      console.log(articles.items[i]['url']);
      //download torrent here
      i++;
    }
  });
});
Run Code Online (Sandbox Code Playgroud)

javascript rss bittorrent node.js

4
推荐指数
1
解决办法
8905
查看次数

Abort() 已被调用 - 连接函数多线程 Cpp

我正在尝试使用多线程来连接多个对等端 simultinaly。当我运行我的代码并运行一个线程时,程序在“连接”函数中崩溃并写道:“Abort() 已被调用”。

这是我调用线程的方式:

TcpPeers(OrderedMap<std::string, unsigned short> peers, std::string     infoHash)
   {
    this->peers = peers;
    peersArr = new Peer[peers.GetSize()];

    for (int i = 0; i < peers.GetSize(); i++)
    {
        Peer * pp = new Peer(peers.GetKeyByIndex(i), peers.GetValueByIndex(i), infoHash);
        *(peersArr + i) = *pp;
    }

    for (int i = 0; i < peers.GetSize(); i++)
    {
        std::thread t1(&Peer::CreateConnection, *(peersArr + i));
    }
}
Run Code Online (Sandbox Code Playgroud)

peer 是我在尝试实现 bittorent 协议时需要连接的另一个客户端。

同样,当有一个线程时一切正常,当我有两个以上的同行时,一切都崩溃了。

c++ sockets multithreading bittorrent thread-safety

4
推荐指数
1
解决办法
7806
查看次数

如何在uTorrent中计算出torrent的可用性

uTorrent有一个可用性指示器,显示有多少你所连接的同伴拥有多少洪流.如果它小于1,则您连接到的所有对等组合都没有整个torrent.然而,对于"健康"的洪流,此数字通常大于1,表明即使某些种子断开连接,数据流也不会完全中断.

可用性指数究竟是如何计算的?

bittorrent utorrent

4
推荐指数
1
解决办法
1695
查看次数

如何在使用aria2c完成下载后立即关闭连接?

偶尔,我会在完成下载后留下aria2c连接种子,然后跳上不喜欢我播种的网络.

我想在完成下载后立即关闭连接,防止我播种.我怎样才能做到这一点?

bittorrent download seed aria2 torrent

4
推荐指数
1
解决办法
1401
查看次数

BitTorrent DHT 详细规范

在我的新周末项目中,我决定从头开始编写一个 BitTorrent 客户端,根本没有准备好使用库。经过两天寻找文档后,我已经准备放弃了:smile:。我知道有BEP,但它们远远不足以理解所有规范。在阅读了更多内容之后,我认为跟踪器和对等协议似乎很旧并且易于理解/实现(是的,我知道,要编写具有平衡、对等选择、优化的良好代码,这并不容易,正如我刚才所说的,但我只想做基础知识来学习,而不是与那里的数十个优秀客户竞争。)

因此,我决定从 DHT 开始,这似乎是更复杂的部分,而且文档也更少。当您停止寻找 bittorrent DHT 或主线 DHT 并开始寻找 kademlia DHT 时,您会获得更多信息,但如何将它们组合在一起并不那么明显。

以下是我到目前为止的理解(还有一些我希望填补的空白):

  1. 我从我的 DHT 树开始为空
  2. find_nodes在我的引导节点上使用
  3. 将接收到的节点添加到我自己的树中,这样我就可以选择更接近我自己的 ID 的节点
  4. 开始find_nodes向选定的人发出并将他们的回复添加到我的树中
  5. 返回 3 直到我停止接收未知/新节点
  6. 如果我收到一个announce_peer带有 an 的info_hash信息,我应该将其信息保存在本地数据库上(发送者的 info_hash 和 ip/端口)
  7. 如果一个节点get_peersinfo_hash我数据库中的节点一起使用,那么我发送信息,否则我应该发送我自己的树中更接近的节点列表(最接近该 info_hash)
  8. 当我get_peers在其他节点上使用时,我将收到对等点或节点,在后一种情况下,我认为这些节点更接近,info_hash而不是我自己的nodeId,所以,我应该将这些节点添加到我的树中还是基于它们启动一个新树?
  9. 当我想宣布我感兴趣的是info_hash我应该在任何地方使用还是只在更接近目标的announce_peer节点上使用?距离多少才算足够近?nodeIdinfo_hash

此时我有很多ID与我自己的ID更接近的节点,而有关info_hash的信息我并不真正感兴趣。

我担心我有一个巨大的愚蠢问题:我为什么这么做?

我的意思是:我做所有这些工作的自私原因是找到我感兴趣的 info_hash 的对等点。我知道一个 info_hash 的信息可能保存在 ID 更接近该 info_hash 的节点上。因此,如果我创建一棵更接近 info_hash 而不是更接近我自己的 ID 的节点树,我找到其信息的机会就会更大(此时,如果您知道主题,您已经注意到我有多么迷失)。

我应该创建多棵树吗?一棵适合我(保存人们发送给我的更接近我的nodeID的info_hashes信息),另一棵更接近我的目标info_hashes的信息,以便我可以检索他们的信息?

我是否应该创建一棵更接近我的节点 ID 的树,并在查询该树以获得我需要的 …

bittorrent dht kademlia

4
推荐指数
1
解决办法
1039
查看次数

Bitfield Torrent 的混乱

我对bittorrent中的位字段消息有点困惑。我已经注意到下面问题形式的混乱。

  1. 可选与必需

握手序列完成后立即发送的位字段

我假设这是强制性的,即握手后必须遵循位字段消息。正确的?

  1. 什么时候需要位域?

位域消息只能在握手序列完成后、发送任何其他消息之前立即发送

假设我清楚地阅读了此消息,尽管它是可选消息。对等方仍然可以在任何消息(如请求、choke、uncoke 等)之前广播位字段消息。正确的 ?

  1. 第一个字节的高位对应片索引0

如果我是正确的,位字段代表状态,即对等方是否拥有给定的块。

假设我的位域是[1,1,1,1,1,1,1,1,1,1 ..]. 我确定对等点丢失了第 10 块,如果位字段看起来像这样,[1,1,0,1,1,1,1,1,1,1 ..]则对等点丢失了第 3 块。那么第一个字节的高位对应的片索引0意味着什么。

  1. 备用钻头

末尾的备用位设置为零

这是什么意思 ?我的意思是,如果末尾有一个位为 0,并不意味着同行将其作为缺失的部分。为什么使用备用位。

  1. 最重要的是位字段的用途是什么。

我对此的预感是,位字段可以更轻松地找到合适的对等点,以了解对等点可用的信息,但我对此是否正确?

@Encombe

这是我的位字段有效负载的样子

\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF \xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF \xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF \xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF \xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF \xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFE

bittorrent bit-fields

4
推荐指数
1
解决办法
2334
查看次数

如果 torrent 包含多个文件,如何知道每个文件对应哪一块?

我正在用 Java 构建一个 BitTorrent 客户端应用程序,我有两个小问题:

  1. torrent 可以包含文件夹吗?递归?
  2. 如果 torrent 包含n文件(不是目录 - 为简单起见),我是否需要创建n具有相应大小的文件?当我从同行那里收到一个片段时,我如何知道它(该片段)属于哪个文件?

例如,这是一个包含 2 个文件的 torrent:

TorrentInfo{Created By: ruTorrent (PHP Class - Adrien Gibrat)
Main tracker: http://tracker.hebits.net:35777/tracker.php?do=announce&passkey=5d3ab309eda55c1e7183975099958ab2
Comment: null
Info_hash: c504216ca4a113d26f023a10a1249ca3a6217997
Name: Veronica.2017.1080p.BluRay.DTS-HD.MA.5.1.x264-HDH
Piece Length: 16777216
Pieces: 787
Total Size: null
Is Single File Torrent: false
File List:
TorrentFile{fileLength=13202048630, fileDirs=[Veronica.2017.1080p.BluRay.DTS-HD.MA.5.1.x264-HDH.mkv]}
TorrentFile{fileLength=62543, fileDirs=[Veronica.2017.1080p.BluRay.DTS-HD.MA.5.1.x264-HDH.srt]}
Run Code Online (Sandbox Code Playgroud)

文档没有说太多:https : //wiki.theory.org/index.php/BitTorrentSpecification

bittorrent

4
推荐指数
1
解决办法
1518
查看次数

有什么方法可以从 Telegram 机器人打开应用程序吗?

我编写了一个 Telegram 机器人 (python-telegram-bot),我想知道是否有办法从该机器人打开应用程序。

更准确地说,机器人搜索 torrent 链接,最初的想法是将该链接直接发送到用户计算机中的 qBitTorrent,但不幸的是我陷入了这一步,所以目前我想给用户提供磁力链接,所以它可以粘贴到 qBitTorrent 应用程序中。问题是,如果能够从机器人自动打开应用程序,那就太棒了。

提前致谢!

python bittorrent python-3.x python-telegram-bot

4
推荐指数
1
解决办法
3221
查看次数