和一个在端口上监听的Bittorrent客户端交谈?

2024-04-29 20:21:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我的一台电脑在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

Tags: 文件端口消息类型客户机piecerequesthave
1条回答
网友
1楼 · 发布于 2024-04-29 20:21:18

据我所知,支持的消息列表是自定义握手消息的一部分,只有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";

当然,诀窍在于建立一个适当的握手,这将从播种者那里得到一个有效的回应。不幸的是,我不知道有什么东西可以不需要一点编程工作就可以做到这一点。在

相关问题 更多 >