2010-04-03 4 views
0

J'ai un de mes ordinateurs ensemençant un fichier torrent sur le port 45000. J'essaie d'écrire un petit client en python (ou peut-être perl) qui m'aide à déterminer les types de messages que ce client supporte pour lesquels je dois faire une poignée de main avec le client. Dans Azureus, ceci est fait en utilisant un appel comme peer.getSupportedMessages(). Est-il possible de le faire en utilisant une bibliothèque en python ou perl?Parler avec un client Bittorrent écoutant sur un port?

Un exemple des messages retournés ressemblerait à ceci:

BT_KEEP_ALIVE 
BT_PIECE 
BT_REQUEST 
BT_UNCHOKE 
BT_UNINTERESTED 
BT_SUGGEST_PIECE 
BT_HAVE_ALL 
BT_HAVE_NONE 
BT_REJECT_REQUEST 
BT_ALLOWED_FAST 
BT_LT_EXT_MESSAGE 
BT_DHT_PORT 
lt_handshake 
ut_pex 

Répondre

2

D'après ce que je peux dire, la liste des messages pris en charge est une partie d'un message de prise de contact personnalisé pris en charge que par Azureus (et peut-être un peu Azureus -compliant) et ne fait pas partie du système officiel BitTorrent. Cependant, vous pouvez probablement créer un handshake AZ bencodé, l'envoyer à votre semoir, décoder la réponse et voir quels sont les messages supportés.

AZHandshake.java a les détails de ce à quoi le message devrait ressembler.

L'utilisation du module Bencode de CPAN, vous pouvez faire quelque chose comme:

my $handshake = bencode { 
    identity => '', client => '', ... }; # All fields from AZHandshake.java 

    # send handshake to seeder and get a response 
    my $handshake_response = ... 

    my $dictionary = bdecode $handshake_response; 

    print join "\n", @{$dictionary->{messages}}, "\n"; 

Bien sûr, l'affaire sera dans la mise en place d'une poignée de main appropriée qui provoquera une réponse valable de la semeuse. Malheureusement, je ne connais rien qui puisse le faire sans nécessiter un peu de programmation.

Questions connexes