libtorrent DHT 同伴请求?
我最近在玩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()