[心得] aMule的KAD連線
整個過程是這樣的
前幾天因為某些需求 要在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
02/23 22:03, 5F
推
02/23 23:57, , 6F
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
02/24 18:20, 12F
推
02/25 11:28, , 13F
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
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
討論串 (同標題文章)