eMule源代码解析:从诞生到Kad技术的发展

需积分: 0 7 下载量 124 浏览量 更新于2024-07-30 收藏 185KB DOC 举报
本文档深入剖析了eMule源代码的开发历程及其关键特性,特别关注了Merkur创建eMule的背景和团队协作。作为一款基于Microsoft Foundation Classes (MFC) 的程序,eMule最初专为Windows平台设计,但随着开源社区的努力,如aMule和xMule的出现,使其在跨平台性方面有所增强。 aMule项目起源于对原始eDonkey2000的改进,特别是通过使用wxWidgets实现了Linux下的移植。然而,由于理念分歧和个人矛盾,aMule与xMule产生了分裂。xMule一度成为Linux环境下eMule的主要分支,由HopeSeekr独立维护,但随着时间推移,其活跃度逐渐下降。 eMule在0.42版本引入了Kad技术,这是一种分布式哈希表(DHT)协议,显著提升了网络的去中心化特性。Kad允许节点间共享其他节点的连接信息,形成一个无需中心服务器也能查找资源的关系网,使得传统的针对中心服务器的攻击策略失效。尽管eMule的Kad实现较eDonkey2000的OverNet晚,但其网络规模增长迅速。 Kademlia结构是eMule和Overnet共同采用的技术基础,但两者在消息报文格式上存在差异。这些技术细节对于理解eMule的架构、安全性和扩展性至关重要,展现了开源软件在不断迭代和优化中的创新精神。 总结来说,本文档通过讲述eMule源代码的演变过程,揭示了开源社区如何推动软件技术的发展,以及分布式网络设计如何对抗集中式服务的威胁。同时,也揭示了开源项目中可能遇到的管理挑战和合作难题。学习和研究这些内容,有助于深入了解eMule的设计理念和技术实现,以及如何适应不同平台的需求。
2010-06-12 上传
#define OP_EDONKEYHEADER 0xE3 #define OP_KADEMLIAHEADER 0xE4 这是他的协议码,他大部分的通信包第一个字节都是OP_EDONKEYHEADER 0xE3, 这是他的客户端之间的协议 #define OP_HELLO 0x01 // 0x10<HASH 16><ID 4><PORT 2><1 Tag_set> #define OP_SENDINGPART 0x46 // <HASH 16><von 4><bis 4><Daten len:(von-bis)> #define OP_REQUESTPARTS 0x47 // <HASH 16><von[3] 4*3><bis[3] 4*3> #define OP_FILEREQANSNOFIL 0x48 // <HASH 16> #define OP_END_OF_DOWNLOAD 0x49 // <HASH 16> #define OP_ASKSHAREDFILES 0x4A // (null) #define OP_ASKSHAREDFILESANSWER 0x4B // <count 4>(<HASH 16><ID 4><PORT 2><1 Tag_set>)[count] #define OP_HELLOANSWER 0x4C // <HASH 16><ID 4><PORT 2><1 Tag_set><SERVER_IP 4><SERVER_PORT 2> #define OP_CHANGE_CLIENT_ID 0x4D // <ID_old 4><ID_new 4> #define OP_MESSAGE 0x4E // <len 2><Message len> #define OP_SETREQFILEID 0x4F // <HASH 16> #define OP_FILESTATUS 0x50 // <HASH 16><count 2><status(bit array) len:((count+7)/8)> #define OP_HASHSETREQUEST 0x51 // <HASH 16> #define OP_HASHSETANSWER 0x52 // <count 2><HASH[count] 16*count> #define OP_STARTUPLOADREQ 0x54 // <HASH 16> #define OP_ACCEPTUPLOADREQ 0x55 // (null) #define OP_CANCELTRANSFER 0x56 // (null) #define OP_OUTOFPARTREQS 0x57 // (null) #define OP_REQUESTFILENAME 0x58 // <HASH 16> (more correctly file_name_request) #define OP_REQFILENAMEANSWER 0x59 // <HASH 16><len 4><NAME len> #define OP_CHANGE_SLOT 0x5B // <HASH 16> #define OP_QUEUERANK 0x5C // <wert 4> (slot index of the request) #define OP_ASKSHAREDDIRS 0x5D // (null) #define OP_ASKSHAREDFILESDIR 0x5E // <len 2><Directory len> #define OP_ASKSHAREDDIRSANS 0x5F // <count 4>(<len 2><Directory len>)[count] #define OP_ASKSHAREDFILESDIRANS 0x60 // <len 2><Directory len><count 4>(<HASH 16><ID 4><PORT 2><1 Tag_set>)[count] #define OP_ASKSHAREDDENIEDANS 0x61 // (null) 这是他的客户端到服务器的通信协议