与在端口上收听的Bittorrent客户交谈?

时间:2010-04-03 20:51:02

标签: python perl p2p bittorrent

我有一台计算机在端口45000上播种了一个torrent文件。我正在尝试用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 个答案:

答案 0 :(得分:2)

据我所知,支持的消息列表是Azureus仅支持的自定义握手消息的一部分(可能还有一些与Azureus兼容的工具),并且不是官方BitTorrent系统的一部分。但是,您可以制作一个bencoded AZ握手,将其发送给播种机,解码响应,并查看支持的消息是什么。

AZHandshake.java详细说明了该消息应该是什么样的。

使用CPAN中的Bencode模块,您可以执行以下操作:

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

当然,诀窍在于建立一个正确的握手,这将引发播种机的有效响应。不幸的是,我不知道在不需要一点编程工作的情况下会做任何事情。