在Bittorrent中获取IP地址
我想获取一份正在提供或下载某个文件的IP地址列表。我做的第一步是联系一个像openbittorrent.com这样的追踪器,获取了以下内容(作为抓取文件的一部分):
B%00%00%0C%5F%B1%B1l%CAGa%84S%CB%B0%9BG%84%3BE:0:1
现在,开头的那串长字符串是信息哈希。接下来,我做了这个:
http://tracker.sometracker.com/announce?info_hash=B%00%00%0C%5F%B1%B1l%CAGa%84S%CB%B0%9BG%84%3BE
它给了我以下内容。到目前为止,一切顺利。这个消息包含了:
d8:completei0e10:downloadedi0e10:incompletei2e8:intervali1931e12:min intervali965e5:peers12:U���ٿ��ӣǣ^@^@e
有人能告诉我接下来该怎么做,以获取当前正在提供或下载这个文件的IP地址吗?
1 个回答
3
这不是一个种子文件,而是一个公告响应。它们都是用一种叫做bencode的格式编码的(可以用bencode来解码),不过这个公告响应只包含了对等方的信息。仅有这些信息是不够的,无法下载种子里的内容;要下载内容,你需要种子文件本身。
bencoded字典中的peers
部分包含了一组组6个字节的数据,你可以用struct
来解包。前四个字节是IP地址,后面两个字节是端口号。这是一个紧凑的公告响应,这种格式很常见(但显然只支持IPv4)。你也可能会看到非紧凑的响应,它们会提供一个透明的字典。
现在很多追踪器不会接受你发送的非特定的抓取公告,或者不包含compact
、port
或event
的初始公告请求。你可能应该先看看这个协议,再继续深入了解。