2013-12-10 19 views
0

試圖瞭解/逆向工程的洪流/追蹤器對話。我已經設法得到一些簡單的代碼運行,打出一個跟蹤器並打印響應;追蹤器對話中丟失的部分

>>> 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,我擴展了代碼以嘗試獲得同級列表;這些參數是從一個wireshark sniff逐字地拉(更多在下面)。

>>> 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的,我聞了聞一「之稱工作」源(同洪流/ info_hash信息,但使用uTorrent的),然後聞了聞我的愚蠢的小程序;在這兩種情況下,跟蹤器都以3個數據包([ACK],[PSH,ACK]和[FIN ACK])的形式響應一組類似的數據;但在我的python程序中,我沒有看到任何過去第[ACK]。

不是特別流利與網絡或數據包處理,所以我會很感激任何指針!

+0

一些HTTP跟蹤器可以不如果* regular * announce請求之間的間隔小於第一個跟蹤器通告查詢響應的* interval *字段的值,則響應。 –

+0

自從應用「解決方法」以來,我還沒有遇到過這個問題,但是當我下一次碰到牆上時會記住這一點。謝謝(你的)信息! –

回答

0

手提包由這裏DERP。只注意到了URL片段的這一部分...

&numwant=0 

...,當改變爲1或更高,修復一切。