Общение с бицтирентным клиентом, слушающим порта?

StackOverflow https://stackoverflow.com/questions/2572634

  •  24-09-2019
  •  | 
  •  

Вопрос

У меня есть один из моих компьютеров, высевающих торрент-файл на порту 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
Это было полезно?

Решение

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

Azhandshake.java имеет детали того, что должно выглядеть сообщение.

С использованием Бенкуд Модуль от 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";

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top