2009-11-05 3 views
7

J'ai lu la spécification Bit-torrent et fait un certain nombre de recherches, en essayant de trouver comment je peux obtenir les graines/pairs/les données téléchargées à partir d'un tracker torrent (en utilisant Python). Je peux calculer le hash d'information à partir d'un Torrent sans problème, ce qui correspond au hachage d'informations donné par diverses applications de torrent de travail.Comment calculer l'URL de scrape pour un torrent

Cependant, lorsque je tente d'obtenir les informations du suivi que je soit délai d'attente (le tracker est en marche) ou obtenir des données vides, selon quelle forme je mets l'URL dans:

http://tracker.openbittorrent.com/scrape?info_hash=a8c482902b1c735de462479721b011dc7b3d3558 - délai d'attente

On m'a dit que cela devrait être de 20 caractères, donc j'ai pris une sous-chaîne, mais cela donne des données vides.

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

Je pense avoir mal compris quelque chose que je devrais encoder ou faire le infohash pour l'URL de scrape, mais ne peut pas pour la vie de me voir où.

Répondre

6

Vous passez dans une représentation hexadécimale de info_hash. Ce devrait être une représentation binaire. Pour obtenir des octets non imprimables dans l'utilisation d'URL codage URL:

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

(je aussi essayer d'éviter codant pour la _ dans le paramètre info_hash ... pas que ce n'est pas correct, mais il est le genre de chose que j'attendre à des trackers écrit-pour-vitesse gâcher)

+1

En Python 3, utilisez urllib.parse.quote (infohash). En Python 2, utilisez urllib.quote (infohash). – Mead

+1

Si vous avez seulement la version hexadécimale de l'infohash, convertissez-la en binaire avec 'binascii.a2b_hex (hexinfohash)'. Vous devrez peut-être appeler 'binascii.a2b_hex (hexinfohash.encode (" utf-8 "))' si vous êtes en Python 3. – Mead

3

Ma solution:.

import binascii 

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

Résultat:

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

Plus d'informations: binascii.unhexlify

Questions connexes