2017-04-20 142 views
2

我想在java中編寫我自己的bittorrent客戶端,它是一個使工作項目更新我的java技能。我一直在發展中的某個階段被卡住,雖然有些論壇可以用來進行bittorrent開發,但它們似乎並不是非常活躍。BitTorrent擴展協議

到目前爲止,我可以做到以下幾點:

  1. 獲得同齡人的名單,從跟蹤網站
  2. 連接到對等
  3. 發送「握手」消息
  4. 收到「握手」回覆消息
  5. 發送'有興趣'消息。
  6. 收到'Unchoke'消息。

我遇到的問題是如果我在發送'感興趣'消息之前嘗試向對方發送擴展數據(http://www.bittorrent.org/beps/bep_0010.html)。該協議聲明您必須在收到握手後立即發送擴展數據。 如果我將擴展數據發送給對等端,對端立即關閉連接,即在Wireshark中,我看到一個FIN,ACK。 我已經使用Wireshark和uTorrent來查看正在發送什麼擴展數據,並試圖複製該數據,但無濟於事。我嘗試了擴展數據參數的所有不同組合,但無論我做什麼,我都無法超越這一點。

下面是一個擴展數據消息的例子,它是從Wireshark複製而來的。

D1:ei0e4:IPV44:czH12:complete_agoi-1E1:MD11:upload_onlyi3e11:lt_donthavei7e12:ut_holepunchi4e11:ut_metadatai2e6:ut_pexi1e10:ut_commenti6ee1:pi43276e4:reqqi255e1:V13:洪流3.52:ypi48680e6:yourip4:JFE

這裏是我的客戶的擴展數據,不起作用。順便說一句,我已經檢查,以確保ip變量是正確的(他們被髮送爲4字節)。

D1:ei0e4:IPV44:czH12:complete_agoi-1E1:MD11:upload_onlyi3e11:lt_donthavei7e12:ut_holepunchi4e11:ut_metadatai2e6:ut_pexi1e10:ut_commenti6ee1:pi51361e4:reqqi255e1:V15:MyTorrent v0.152:ypi40898e6:yourip4:ROÈ

另外,一旦我收到'Unchoke'消息,我就能夠成功地檢索碎片。

任何信息將不勝感激。

+0

你可以發佈數據爲十六進制+ ascii視圖。 bencoding是二進制的,像一個字符串發佈可能會破壞它。您是否使用經過測試的本碼編碼實現來創建擴展握手?以及爲什麼要複製遠程對等方的握手而不是按照規範使用唯一的必填字段來創建它? – the8472

+0

我沒有保存wireshark捕獲,我可以做更多的測試,並複製和粘貼hex和ascii視圖,但我可以向你保證我發給你的數據中的所有信息都是有效的。至於擴展協議的強制性字段,我認爲沒有任何規定,根據我在規範中閱讀的內容,它們都是可選的。正如我所提到的,我已經嘗試了不同的參數組合,例如,只發送我通過BitComet等其他應用程序發送的參數,但沒有任何效果。我知道我發送了不好的數據(我不認爲它是腐敗的),我只是不知道如何弄清楚它是什麼。 –

+0

Wireshark捕獲仍然是最容易診斷的 – the8472

回答

3

從鏈路Ray_Write捕獲的TCP流貼:

00000000 13 42 69 74 54 6f 72 72 65 6e 74 20 70 72 6f 74 .BitTorr ent prot 
00000010 6f 63 6f 6c 00 00 00 00 00 10 00 00 14 82 9a a1 ocol.... ........ 
00000020 b5 7d 5a d7 3c b5 c9 d6 60 83 c8 99 8f f6 aa cb .}Z.<... `....... 
00000030 2d 4d 59 31 32 33 34 2d 31 32 33 34 35 36 37 38 -MY1234- 12345678 
00000040 39 30 31 32          9012 
    00000000 13 42 69 74 54 6f 72 72 65 6e 74 20 70 72 6f 74 .BitTorr ent prot 
    00000010 6f 63 6f 6c 00 00 00 00 00 10 00 05 14 82 9a a1 ocol.... ........ 
    00000020 b5 7d 5a d7 3c b5 c9 d6 60 83 c8 99 8f f6 aa cb .}Z.<... `....... 
    00000030 2d 55 54 33 33 30 42 2d 06 77 26 8b 01 b2 4d 0e -UT330B- .w&...M. 
    00000040 69 ab d2 3b 00 00 00 eb 14 00 64 31 3a 65 69 30 i..;.... ..d1:ei0 
    00000050 65 34 3a 69 70 76 34 34 3a b2 21 7b 3d 31 32 3a e4:ipv44 :.!{=12: 
    00000060 63            c 
00000044 64 31 3a 65 69 30 65 34 3a 69 70 76 34 34 3a 79 d1:ei0e4 :ipv44:y 
00000054 98 b9 fa 31 32 3a 63 6f 6d 70 6c 65 74 65 5f 61 ...12:co mplete_a 
00000064 67 6f 69 2d 31 65 31 3a 6d 64 31 31 3a 75 70 6c goi-1e1: md11:upl 
00000074 6f 61 64 5f 6f 6e 6c 79 69 33 65 31 31 3a 6c 74 oad_only i3e11:lt 
00000084 5f 64 6f 6e 74 68 61 76 65 69 37 65 31 32 3a 75 _donthav ei7e12:u 
00000094 74 5f 68 6f 6c 65 70 75 6e 63 68 69 34 65 31 31 t_holepu nchi4e11 
000000A4 3a 75 74 5f 6d 65 74 61 64 61 74 61 69 32 65 36 :ut_meta datai2e6 
000000B4 3a 75 74 5f 70 65 78 69 31 65 31 30 3a 75 74 5f :ut_pexi 1e10:ut_ 
000000C4 63 6f 6d 6d 65 6e 74 69 36 65 65 31 3a 70 69 35 commenti 6ee1:pi5 
000000D4 31 39 30 32 65 34 3a 72 65 71 71 69 32 35 35 65 1902e4:r eqqi255e 
000000E4 31 3a 76 31 33 3a 76 31 35 3a 4d 79 54 6f 72 72 1:v13:v1 5:MyTorr 
000000F4 65 6e 74 20 76 30 2e 31 35 32 3a 79 70 69 32 30 ent v0.1 52:ypi20 
00000104 37 30 34 65 36 3a 79 6f 75 72 69 70 34 3a b2 21 704e6:yo urip4:.! 
00000114 7b 3d 65           {=e 
    00000061 6f 6d 70 6c 65 74 65 5f 61 67 6f 69 31 32 65 31 omplete_ agoi12e1 
    00000071 3a 6d 64 31 31 3a 75 70 6c 6f 61 64 5f 6f 6e 6c :md11:up load_onl 
    00000081 79 69 33 65 31 32 3a 75 74 5f 68 6f 6c 65 70 75 yi3e12:u t_holepu 
    00000091 6e 63 68 69 34 65 31 31 3a 75 74 5f 6d 65 74 61 nchi4e11 :ut_meta 
    000000A1 64 61 74 61 69 32 65 36 3a 75 74 5f 70 65 78 69 datai2e6 :ut_pexi 
    000000B1 31 65 31 32 3a 75 74 5f 72 65 63 6f 6d 6d 65 6e 1e12:ut_ recommen 
    000000C1 64 69 35 65 31 30 3a 75 74 5f 63 6f 6d 6d 65 6e di5e10:u t_commen 
    000000D1 74 69 36 65 31 31 3a 6c 74 5f 64 6f 6e 74 68 61 ti6e11:l t_dontha 
    000000E1 76 65 69 37 65 65 31 33 3a 6d 65 74 61 64 61 74 vei7ee13 :metadat 
    000000F1 61 5f 73 69 7a 65 69 32 36 37 38 65 31 3a 70 69 a_sizei2 678e1:pi 
    00000101 32 30 37 30 34 65 34 3a 72 65 71 71 69 32 35 35 20704e4: reqqi255 
    00000111 65 31 3a 76 31 32 3a 75 54 6f 72 72 65 6e 74 20 e1:v12:u Torrent 
    00000121 33 2e 33 36 3a 79 6f 75 72 69 70 34 3a 79 98 b9 3.36:you rip4:y.. 
    00000131 fa 65 00 00 00 11 05 ff ff fa ee f7 af ff ef bf .e...... ........ 
    00000141 de ee f7 ec 5e 4f a0 00 00 00 05 04 00 00 00 29 ....^O.. .......) 
    00000151 00 00 00 05 04 00 00 00 53 00 00 00 05 04 00 00 ........ S....... 
    00000161 00 6a 00 00 00 05 04 00 00 00 17 00 00 00 05 04 .j...... ........ 
    00000171 00 00 00 2b 00 00 00 05 04 00 00 00 1f 00 00 00 ...+.... ........ 
    00000181 05 04 00 00 00 73 00 00 00 05 04 00 00 00 24 00 .....s.. ......$. 
    00000191 00 00 05 04 00 00 00 41 00 00 00 05 04 00 00 00 .......A ........ 
    000001A1 1b 00 00 00 05 04 00 00 00 4f 00 00 00 05 04 00 ........ .O...... 
    000001B1 00 00 66 00 00 00 05 04 00 00 00 5c 00 00 00 05 ..f..... ...\.... 
    000001C1 04 00 00 00 57 00 00 00 05 04 00 00 00 79 00 00 ....W... .....y.. 
    000001D1 00 05 04 00 00 00 4a 00 00 00 05 04 00 00 00 3b ......J. .......; 
    000001E1 00 00 00 05 04 00 00 00 72 00 00 00 05 04 00 00 ........ r....... 
    000001F1 00 68 00 00 00 05 04 00 00 00 15 00 00 00 05 04 .h...... ........ 
    00000201 00 00 00 63 00 00 00 05 04 00 00 00 6f 00 00 00 ...c.... ....o... 
    00000211 05 04 00 00 00 70 00 00 00 05 04 00 00 00 67 .....p.. ......g 
00000117 00 00 00 01 02 

的主要問題是在這條線:

... 
00000044 64 31 3a 65 69 30 65 34 3a 69 70 76 34 34 3a 79 d1:ei0e4 :ipv44:y 
... 

的4個字節長度的前綴,1個字節的bittorrent消息ID和1字節擴展消息ID從擴展協議握手中丟失。它應該是:

... 
00000044 00 00 00 d5 14 00 64 31 3a 65 69 30 65 34 3a 69 ......d1:ei0e4 :i 
... 

而且也存在此問題:

... 
000000E4 31 3a 76 31 33 3a 76 31 35 3a 4d 79 54 6f 72 72 1:v13:v1 5:MyTorr 
000000F4 65 6e 74 20 76 30 2e 31 35 32 3a 79 70 69 32 30 ent v0.1 52:ypi20 
... 

爲「V'鍵的值有兩個字符串長度的索引。
是:1:v13:v15:MyTorrent v0.15
它應該是:1:v15:MyTorrent v0.15

一個小問題也是在這兩個客戶端擴展協議握手,根部和「M」字典是無序。他們應該排序,但大多數客戶接受未排序的字典,因爲這個問題很常見。

我還懷疑μTorrent客戶端是假的,因爲真正的客戶端在版本字符串中使用'μ',而不是'u'。

+0

哇,謝謝你的發現,我知道信息的格式,但由於某種原因我被困在消息的內容作爲問題,再次感謝。 –

0

根據您的wireshark捕獲,您只發送擴展握手負載,但不發送必要的擴展協議或bittorrent郵件標頭。