有人可以阐明这个奇怪的 DHT 响应是什么意思吗?

Can somebody shed a light what this strange DHT response means?

有时我会从其他节点收到这种奇怪的响应。交易 ID 与我的请求交易 ID 以及远程 IP 相匹配,所以我倾向于认为节点对此做出了响应,但它看起来像是响应和请求的混合

d1:q9:find_node1:rd2:id20:.éV0özý.?tj­N.?.!2:ip4:DÄ.^7:nodes.v26:.ï?M.:iSµLW.Ðä¸úzDÄ.^æCe1:t2:..1:y1:re

最糟糕的是它格式不正确。看7:nodes.v 意思是我把nodes.v加到字典里了。应该是5:nodes。所以,我迷路了。这是什么?

互联网和远程节点不可靠或有问题。您必须进行防御性编码。不要假设您收到的一切都是有效的。

远程同行可能

  • 发送无效的编码,丢弃那些,甚至不要尝试恢复。
  • 发送截断的消息。通常无法恢复,除非它恰好是根字典的最后一个 e
  • 省略强制键。您可以忽略这些消息或 return 一条错误消息
  • 包含损坏的数据
  • 包括强制性密钥之外的未知密钥。这不是错误,只是为了向前兼容而将它们视为不存在
  • 实际上是攻击者试图模糊您的实施或将您用作 DoS 放大器

我还怀疑一些真正劣质的实现是基于它们的编程语言支持的任何 string 类型,并且错误地处理编码而不是使用 uint8 数组作为编码要求。对此无能为力。忽略或偶尔发送错误消息。

指定的字典键通常 ASCII 可映射,但这不是必需的。例如。有一些跟踪器响应类型实际上使用随机二进制数据作为字典键。


以下是我看到的一些垃圾邮件示例[1],甚至无法进行 bdecoding:

d1:ad2:id20:�w)��-��t����=?�������i�&�i!94h�#7U���P�)�x��f��YMlE���p:q9Q�etjy��r7�:t�5�����N��H�|1�S�
d1:e�����������������H# 
d1:ad2:id20:�����:��m�e��2~�����9>inm�_hash20:X�j�D��nY��-������X�6:noseedi1ee1:q9:get_peers1:t2:�=1:v4:LT��1:y1:qe
d1:ad2:id20:�����:��m�e��2~�����9=inl�_hash20:X�j�D��nY���������X�6:noseedi1ee1:q9:get_peers1:t2:�=1:v4:LT��1:y1:qe
d1:ad2:id20:�����:��m�e��2~�����9?ino�_hash20:X�j�D��nY���������X�6:noseedi1ee1:q9:get_peers1:t2:�=1:v4:LT��1:y1:qe

[1] 保留的字符数。用 unicode 替换字符替换所有不可打印的、ASCII 不兼容的字节。