Разговаривая с клиентом Bittorrent, слушающим порт? - PullRequest
0 голосов
/ 04 апреля 2010

У меня есть один из моих компьютеров, заполняющий торрент-файл через порт 45000. Я пытаюсь написать небольшой клиент на python (или, возможно, perl), который помогает мне определить типы сообщений, которые этот клиент поддерживает, для которых мне нужно сделать рукопожатие с клиентом. В Azureus это делается с помощью вызова, подобного peer.getSupportedMessages (). Можно ли сделать это, используя какую-нибудь библиотеку в python или perl?

Пример возвращаемых сообщений будет выглядеть следующим образом:

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

1 Ответ

2 голосов
/ 04 апреля 2010

Из того, что я могу сказать, список поддерживаемых сообщений является частью настраиваемого сообщения рукопожатия, поддерживаемого только Azureus (и, возможно, некоторыми инструментами, совместимыми с Azureus), и не является частью официальной системы BitTorrent. Однако вы, вероятно, можете создать рукопожатие AZ с кодировкой, отправить его своему получателю, расшифровать ответ и посмотреть, какие сообщения поддерживаются.

AZHandshake.java содержит подробную информацию о том, как должно выглядеть сообщение.

Используя модуль Bencode из CPAN, вы можете сделать что-то вроде:

  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";

Конечно, хитрость будет в том, чтобы установить правильное рукопожатие, которое вызовет действительный ответ от сеялки. К сожалению, я не знаю ничего, что могло бы сделать это, не требуя немного программирования.

...