有人能说出这个奇怪的DHT响应是什么意思吗?

问题描述:

有时我会收到来自其他节点的奇怪回应。事务ID匹配了我的请求事务ID以及远程IP,所以我倾向于认为,节点回应这一点,但它看起来像某种反应的混合的,并要求有人能说出这个奇怪的DHT响应是什么意思吗?

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:节点。所以,我迷路了。它是什么?

互联网和远程节点是不可靠的或越野车。你必须防守编码。不要以为你收到的每件东西都是有效的。

远程端可能

  • 发送无效bencoding,抛弃那些,甚至不尝试恢复。
  • 发送截断的消息。通常无法恢复,除非碰巧是根词典的最后一个e
  • 忽略强制性密钥。您可以忽略这些消息或返回错误消息
  • 包含损坏的数据
  • 包含超出强制值的未知密钥。这是不是一个错误,只是对待他们,好像他们是不是有向前兼容的缘故
  • 实际上是攻击者试图模糊测试您的实现或用你们的DoS放大器

我还怀疑一些真正的劣质实现基于他们的编程语言支持的任何string类型,并错误地处理编码而不是使用uint8的数组作为本码编码要求。对这些没有什么可以做的。忽略或偶尔发送错误消息。

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


下面是我看到的垃圾的几个例子[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不兼容的字节。

+0

谢谢。还有一件事。在几乎所有的响应中,我都看到了“ip”键,这是我在bittorrent dht规范中没有找到的,但是它被所有节点使用。对于那些没有在原始规格中反映出来的规格修改? –

+0

已经在我的[先前的回答](http://*.com/a/31313281/1362755)中说过,您应该阅读其他BEP。 – the8472