libtorrent DHT 同伴请求?

1 投票
1 回答
1587 浏览
提问于 2025-04-16 21:01

我最近在玩libtorrent/rasterbar的Python接口。我想做的是生成一个新的“节点ID”,然后把它重新宣布给其他节点。

我看到需要创建一个“bencoded字典”,我想这应该是用类似force_dht_reannounce的方式来宣布的,这样理解对吗?

1 个回答

4

你可以通过制作一个会话状态文件来强制libtorrent使用特定的节点ID,这个文件可以传给session::load_state()这个函数。完成这个步骤后,你还需要通过调用session::stop_dht()来重启DHT,然后再调用session::start_dht()

你需要制作的会话状态的相关部分格式如下(使用bencoded编码):

  {
    "dht state": {
      "node-id": "<20-byte binary node-ID>"
    }
  }

如果你想保留其他的会话状态,最好先调用session::save_state(),然后再简单地插入或覆盖node-id字段。

state = ses.save_state()
state["dht state"]["node-id"] = "<...>";
ses.load_state(state)
ses.stop_dht()
ses.start_dht()

撰写回答