未从 bittorrent 对等握手接收到任何数据

Posted

技术标签:

【中文标题】未从 bittorrent 对等握手接收到任何数据【英文标题】:Not receiving any data back from bittorrent peer handshake 【发布时间】:2016-12-06 00:45:01 【问题描述】:

我在使用 bit torrent 协议时遇到了一些问题。我正在向一些同行发送握手消息。我让我的客户基本上连接到列表中的每个对等点,然后发送“握手”。代码如下 -

peer_id = 'autobahn012345678bit'
peer_id = peer_id.encode('utf-8')
pstr = 'BitTorrent protocol'
pstr = pstr.encode('utf-8')
pstrlen = chr(19)
pstrlen = pstrlen.encode('utf-8')
reserved = chr(0) * 8
reserved = reserved.encode('utf-8')

我正在发送我的变量。我的消息是 -

msg = (pstrlen + pstr + reserved + new.torrent_hash() + peer_id)

根据 bit torrent 规范,我的消息是 49 + len(pstr) 的适当 len -

lenmsg = (pstrlen + reserved + new.torrent_hash() + peer_id)

print(lenmsg)
print(len(lenmsg))

出来了——

b'\x13\x00\x00\x00\x00\x00\x00\x00\x00\x94z\xb0\x12\xbd\x1b\xf1\x1fO\x1d)\xf8\xfa\x1e\xabs\xa8_\xe7\x93autobahn012345678bit'
49

整个消息看起来像这样 -

b'\x13\x00\x00\x00\x00\x00\x00\x00\x00\x94z\xb0\x12\xbd\x1b\xf1\x1fO\x1d)\xf8\xfa\x1e\xabs\xa8_\xe7\x93autobahn012345678bit'

我的主要问题是我没有收到任何数据返回。我有socket.settimeout(4),它会超时吗?

【问题讨论】:

只是检查一下,您是否设法解决了这个问题?我的握手消息也是 68 字节长,但我收到来自对等方的空回复 【参考方案1】:

输出不正确,它错过了“BitTorrent 协议”。 正确的握手字符串长度为 68 个字节。

应该是:

\x13BitTorrent protocol\x00\x00\x00\x00\x00\x00\x00\x00\x94z\xb0\x12\xbd\x1b\xf1\x1fO\x1d)\xf8\xfa\x1e\xabs\xa8_\xe7\x93autobahn012345678bit

【讨论】:

好的,我相信这是一个错字。如果消息是正确的,那么我可以开始寻找为什么我没有从对等方接收任何握手。可能是我不理解异步? 不看代码就很难判断。也许尝试使用 WireShark 并与工作客户端进行比较。

以上是关于未从 bittorrent 对等握手接收到任何数据的主要内容,如果未能解决你的问题,请参考以下文章

为啥我从对等端接收的数据与预期输出不匹配?

bittorrent 对等节点能否处理播种大量空闲种子

洪流调试工具

BitTorrent:发送请求的最佳速率?

使用 SOCKS 时的 BitTorrent 本地对等点发现

如何连接到从 bittorrent 获得的对等点