尝试了解/逆向工程种子/跟踪器对话。我设法让一些简单的代码运行,命中跟踪器并打印响应;
>>> import urllib2
>>> import urllib
>>> import binascii
>>> hash = "0221caf96aa3cb94f0f58d458e78b0fc344ad8bf"
>>> url = "http://torrent.ubuntu.com:6969/scrape?info_hash="
>>> url += urllib.quote(binascii.a2b_hex(hash))
>>> f=urllib2.urlopen(url).read()
>>> print f
d5:filesd20:☻!╩∙jú╦ö≡⌡ìEÄx░ⁿ4J╪┐d8:completei4e10:downloadedi0e10:incompletei1e4:name20:dapper-dvd-amd64.isoeee
根据BitTorrent Tracker Protocol,我扩展了代码以尝试获取对等列表;这些参数是从wirehark嗅探中逐字逐句提取的(更多内容见下文)。
>>> hash = "0221caf96aa3cb94f0f58d458e78b0fc344ad8bf"
>>> url = "http://torrent.ubuntu.com:6969/announce?info_hash="
>>> url += urllib.quote(binascii.a2b_hex(hash))
>>> url +="&peer_id=-UT3320-_vO%21lS%a7%07%876%18%99&port=53965&uploaded=0&downloaded=18874368&left=2850752512&corrupt=0&key=F0E51CD9&event=stopped&numwant=0&compact=1&no_peer_id=1"
>>> f=urllib2.urlopen(url).read()
>>> print f
d8:completei4e10:incompletei2e8:intervali1800e5:peerslee
使用wireshark,我闻到了一个已知的工作"来源(相同的torrent / info_hash信息,但利用utorrent),然后嗅到我愚蠢的小程序;在这两种情况下,跟踪器以3个数据包([ACK],[PSH,ACK]和[FIN ACK]的形式响应一组类似的数据;但是在我的python程序中,我没有看到任何超过第一个[ACK]的东西。
网络或数据包操作不是特别流畅,所以我很感激任何指针!
答案 0 :(得分:0)
托特在这里做了一个derp。刚刚注意到这部分URL片段......
&numwant=0
...当更改为1或更高时,修复所有内容。