2015-07-10 39 views
2

有時我會收到來自其他節點的奇怪迴應。事務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:節點。所以,我迷路了。它是什麼?

回答

3

互聯網和遠程節點是不可靠的或越野車。你必須防守編碼。不要以爲你收到的每件東西都是有效的。

遠程端可能

  • 發送無效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://stackoverflow.com/a/31313281/1362755)中說過,您應該閱讀其他BEP。 – the8472

相關問題