如何解码二进制模型中的对等列表

时间:2014-09-21 19:36:04

标签: binary bittorrent peer

我正在尝试创建一个python BitTorrent客户端,但是我在理解跟踪器的答案时遇到了一些困难:我收到一些不可理解的内容(在bencode中),并且在我使用bencode库解码后,我有这个:

{'min interval': 1800, 'peers': 'N\xe7\x9b\xb1\x91\tS\x9e\x1e\\\x1a\xe1\\Xl4A\x17N}\xeb\xe2\xe7\x86R\xebS\xd9w:H\x0b\xa3\xf6\xddc[Ey\xae\xef\xf7\x02\x00&\x9e\x98\xcdR\xedyc\x126\\\x9c\xe9j2H\x02\x06\x95=\xd3\x83m\x11\x13r\xe1p]\x00\x98\xfe0=Z\x11i]X\xe4Z\x00\xad\x1fx?R\xfb\xe5\xc2\x1e#\xc5\xcd7e\x96\xbc[[\x0c\x05\xeam)\x88&f\x1a\xe1J8\x80)\xc5DS\xc0\xd20\x83"\xb4\xb4\x01\xbf\xc5D\\\x92\xcc\xa8)\xa2ilA\xec\xb9\xc0N\xef_N\xdf4\x9e\xffe\xa25gio?\x05\xb6iV\xd6tq\xeeZPvHl\xf7\xd9R\xf4\xff\xca~KY\\\xeb\xd5\xf63\xbcM*\x15T\xd3\xb0\xbd2\x18\x9aWP\x0c\xd5)PLYW\x00 y\xf3)R\x92/L\x0b\\\x91c$\x9e\x8bm\xd6\x95#@\x05X\x8a$\xb0Bc\x95\x9a\xcas\x1a\xe1M\x82\x07\x04\xb3_Z\x16\x93\xe5\xf1H\\\x86%\xe5V\x0c\xc5\xcd\xfbY\xd6\xb4\xaf\x9e\x97\xf2i\x1aR\xf5\xd3\xfc\x84UTf\xc9\'\xc8\xd5\xb0\xbd\'\x9b\xd5\x87QB6\xbe\x93pN\xed(\x86x\x0c', 'interval': 1800, 'complete': 1034, 'incomplete': 262}

如何解码['peer']项目?听起来它是二进制模型编码,但我找不到任何解码它...

2 个答案:

答案 0 :(得分:2)

BEP 23 (tracker returns compact peer list)中介绍了这一点。

每6个字节是一个对等体,4个用于IPv4 IP地址,2个用于端口。

答案 1 :(得分:0)

我正在添加我曾经拥有的代码:

    from bencode import *

debugModeActivated=False

import requests
r = requests.get("http://www.smartorrent.com:2710/announce?info_hash=%10Y%91%a5%fb%be18%ea%a2y%0c%95%98%de%20%e1%c1%bf%a1%10&peer_id=-TR2820-7ynd5qd1ct1g&port=51413&uploaded=0&downloaded=0&left=1476537925&numwant=80&key=24a78997&compact=0&supportcrypto=1&event=started")
trackerResponse= str(r.content)
if debugModeActivated:
  print"request result:", r.content, "\n"


trackerResponse=bdecode(trackerResponse)
print trackerResponse