2009-11-05 12 views
7

Przeczytałem specyfikację Bit-torrent i wykonałem wiele wyszukiwań, próbując dowiedzieć się, w jaki sposób mogę pobrać dane o nasionach/peerach/pobranych z trackera torrentów (używając Pythona). Mogę obliczyć hash informacji z Torrenta bez problemu, który pasuje do hasha informacji podanego przez różne działające aplikacje torrentowe.Jak obliczyć skasowany adres URL torrenta

Jednak, gdy staram się uzyskać informacje od trackera ja albo Timeout (tracker działa) lub uzyskać pustych danych, w zależności od tego, co forma umieścić adres URL w:

http://tracker.openbittorrent.com/scrape?info_hash=a8c482902b1c735de462479721b011dc7b3d3558 - timeout

Powiedziano mi, że powinno to być 20 znaków, więc wziął podciąg, ale to daje puste dane.

http://tracker.openbittorrent.com/scrape?info_hash=a8c482902b1c735de462 - D5: filesdee

myślę, że źle coś jak mam zakodować lub dokonać infohash dla adresu URL złom, ale nie dla życia mnie zobaczyć, gdzie.

Odpowiedz

6

Przechodzisz w postaci znaku heksadecymalnego z hasłem info_hash. Powinien to być reprezentacja binarna. Aby uzyskać niezadrukowane bajtów do użycia kodowania URL URL:

/scrape?info_hash=%A8%C4%82%90%2B%1Cs%5D%E4bG%97%21%B0%11%DC%7B%3D5X 

(Chciałbym również unikać kodującego _ w parametrze info_hash ... nie to, że nie jest poprawne, ale jest to rodzaj co chciałbym oczekiwać pewne pisemne-for-speed trackerów bałagan)

+1

W języku Python 3 użyj adresu urllib.parse.quote (infohash). W Pythonie 2 użyj adresu urllib.quote (infohash). – Mead

+1

Jeśli masz tylko szesnastkową wersję infohash, przekonwertuj ją z powrotem na plik binarny za pomocą 'binascii.a2b_hex (hexinfohash)'. Być może będziesz musiał wywołać 'binascii.a2b_hex (hexinfohash.encode (" utf-8 "))' jeśli jesteś w Pythonie 3. – Mead

3

Moje rozwiązanie.

import binascii 

binary_info_hash = binascii.unhexlify('79b193385de5b967175ca86073670fce0e45a324') 
print binary_info_hash 

Wynik:

y%B1%938%5D%E5%B9g%17%5C%A8%60sg%0F%CE%0EE%A3%24 

Więcej informacji: binascii.unhexlify