[心得] aMule的KAD連線

看板P2PSoftWare作者 (Patrick)時間16年前 (2008/02/22 23:44), 編輯推噓19(1900)
留言19則, 19人參與, 最新討論串1/4 (看更多)
整個過程是這樣的 前幾天因為某些需求 要在Ubuntu上開農場 既然eMule無法直接在Ubuntu上執行(Wine不算原生執行XD) 自然想到的就是aMule囉 再加上它有daemon模式 就像Windows的服務可以背景執行 就算圖形介面沒有啟動 同樣也可以透過Console或Web介面去遙控它 雖然成熟度不如eMule 但它可以在Linux上穩定的執行 以下是探索的過程 XDXD 想直接解決無法連線KAD的問題 請從後面往前找會比較快! 這是第一次使用aMule 照使用eMule的慣例 是不連任何的Server 只連KAD 於是直接把平常eMule產生的nodes.dat餵給它 接著按下Connect 結果它竟然不吃!!! 顯示載入0個Contact aMule有個功能 可以從指定的網址下載nodes.dat 不管是用它預設的位址 或者是我自己nodes.dat的位址 都一樣無法正常使用 而其它找得到的nodes.dat全部都有類似的現象 要不然就是找到了2005年的nodes.dat 雖然讀得到但卻沒半個可以連上去 和沒找到是一樣的 XD 後來直接打另一台有在跑eMule電腦的IP 想用它來Bootstrap 結果和其它Client一樣 會從遠端eMule收到10個Contacts好讓你Bootstrap 但是過了沒多久 卻又變成0個Contact 通常只有連線失敗才會這樣 由於確定eMule已經啟動數小時 所以傳過去的Contact一定是可以連線的 其中也用過別隻eMule在別台電腦試過 打好IP後 一按下Bootstrap 馬上就連上了KAD 此時確定 問題應該是出在aMule的KAD上 在eMule 0.47a(含)以後版本的Kad為2.0版 在它之前的則是1.0版 這裡的Changelog有提到這件事 只要在網頁中搜尋KAD2即可 http://forum.emule-project.net/index.php?showtopic=98509 由於官方0.47a的Client已經發佈一段時間(2006.01.26) 所以在這之後的各種Client大多是跑Kad2 包含Mod在內 長時間下來 Kad2的Client應該會相當多 當時推測是aMule與其它Kad2的Client相容性不佳 所以假設收到的10個Client都只支援Kad2 不能連線也是正常的 就像只會講英文的人和只會講中文的人無法溝通一樣 當初在0.47a發佈時 看到Changelog有提到了這個 This client will only host the new protocol, the next version will have the option to switch between Kad and Kad2.0 當時就想說 該不會以後Kad的版本和較早Client是不相容的吧 這樣搜尋到的東西就會少很多 雖然後來的版本並沒有找到相關的"switch"來控制是要用Kad 1/2 不過用得還是很快樂 於是也就沒有在意 XD 這次看了eMule(0.48a)的Kad部分的source code 發現這個"switch"的功能 其實已經完全整合在程式裡面了 取而代之的是自動判斷Kad版本的功能 針對不同版本會有不同的處理方式 而非拒絕舊版的連線 這使得理論上任一的Kad Client應該都是相容的 因為新版可以相容舊版 而舊版本來就可以和舊版溝通 同時因為好奇nodes.dat的格式 也就順便看了相關的Source code 發現新舊版本的格式是不同的 支援新版格式的eMule可以新舊通吃 但新版eMule寫入nodes.dat時 會防止舊版的Client讀取新版的nodes.dat 方法是在舊版用來記錄多少Contact的地方直接寫0 這樣舊版就會認為這裡面沒有Client 這應該就是為什麼nodes.dat直接餵它卻不吃的原因了 既然eMule有能力相容舊版的Kad 那問題可能就出在aMule了 由於aMule的資料比較少 所以也是直接參考Source code 參考的是2.1.3版 就KAD的部分 比對後發現實際上和最新的2.2.0CVS是差不多的 同樣不支援KAD2 僅做小部分調整而已 應該不會因為換最新版CVS的aMule而有所改善相容性的問題 這裡就以最容易取得Binary的2.1.3版為主 看了Source code後一目瞭然 並沒有發現任何與Kad2相關的Code 也就是aMule不支援Kad2 所以新版的nodes.dat是不吃的 有了這樣的結論 再加上手邊又有Source Code 先暫時不探討aMule相容性的問題 因為這不是可以簡單解決的 XD 於是借用了eMule用來讀Kad 2.0的Code (eMule的Kad2只會寫入新版格式) 再加上了aMule用來寫入nodes.dat(Kad 1.0)的Code 由於兩種格式除了最開頭的Contacts的存法有些小差異以外 每個Contact也只有一個欄位的定義是不一樣的 1.0版叫做Type, 2.0叫做ContactVersion Type似乎是Kad視窗裡的Type 就是可以對應到燈號的那個 ContactVersion就沒研究了 XD 似乎不是直接標示每個Contact的版本 0~5都有 而1.0版只接受0~3共4種Type的Contact 但那個欄位通常在Kad 2會是4,5居多 也就是若依照原始資料寫入 就只會有少量的Contact可被aMule接受的Contacts 所以就做了個小工具 可以讀取Kad2寫入Kad1的格式 並修改Type為0 這樣就可以成功過Kad1的aMule 並讓它用裡面的Contact來Bootstrap 最後就成功的使用這個轉換過的nodes.dat讓aMule的Kad連線了! 原來200個Contacts的nodes.dat 吃了166個Contacts且成功Bootstrap 隨後立刻增加到188, 205, ... 等更多的Contacts 真是歷史性的一刻 XDXD 現在這隻健康的aMule已經可以自行生產Kad1.0的nodes.dat了 而eMule也可以使用這個檔案來Bootstrap 所以使用eMule, aMule遇到Kad無法順利連線的人 皆可以直接下載此nodes.dat來使用! http://sed.homelinux.org/eMule/nodes.dat 也可以直接貼在aMule下載nodes.dat的網址列 按下小三角形就會自動下載了 或是手動放在aMule儲存設定的資料夾 通常會在~/.aMule裡面 由於eMule也可以使用這個檔案來Bootstrap 所以以後這個連結就固定放Kad 1.0的nodes.dat 而不再是之前的Kad 2.0 讓更多使用Kad的人能成功Bootstrap! 由於aMule似乎對某些Client有相容性的問題 即使連上Server 並下載檔案 取得大量的來源數 因為不明的問題 仍無法成功Bootstrap 這個方法應能快速解決問題 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.132.13.10 ※ 編輯: jyhfang 來自: 220.132.13.10 (02/22 23:45)

02/23 14:08, , 1F
專業推!!這篇沒優文沒天良啊~
02/23 14:08, 1F

02/23 15:04, , 2F
專業
02/23 15:04, 2F

02/23 16:48, , 3F
雖然我用到的機會不高,但專業的一定要推
02/23 16:48, 3F

02/23 17:39, , 4F
專業推!
02/23 17:39, 4F

02/23 22:03, , 5F
5
02/23 22:03, 5F

02/23 23:57, , 6F
6推
02/23 23:57, 6F

02/24 11:25, , 7F
推推 好文好文
02/24 11:25, 7F

02/24 11:43, , 8F
好文~~~~推~~~~~~~~
02/24 11:43, 8F

02/24 12:21, , 9F
好文推一個!
02/24 12:21, 9F

02/24 12:30, , 10F
專業!
02/24 12:30, 10F

02/24 17:08, , 11F
專業好文!!
02/24 17:08, 11F

02/24 18:20, , 12F
專業! 清新! P2P!
02/24 18:20, 12F

02/25 11:28, , 13F
感恩分享好文!我也想學用Ubuntu啊~
02/25 11:28, 13F

02/25 19:35, , 14F
好專業
02/25 19:35, 14F

03/01 13:25, , 15F
太優了
03/01 13:25, 15F

03/30 22:30, , 16F
專業推~
03/30 22:30, 16F

04/22 15:11, , 17F
大推一個,對用ubuntu的人真是福音
04/22 15:11, 17F

06/17 22:12, , 18F
專業推!
06/17 22:12, 18F

04/17 19:53, , 19F
推阿!解決了大問題
04/17 19:53, 19F
文章代碼(AID): #17lkt6nk (P2PSoftWare)
文章代碼(AID): #17lkt6nk (P2PSoftWare)