eDonkey Protocol v0.3 Copyright (c) 2002 Alexey Klimkin =========================================================== Used the following sources in time order: http://hitech.dk/donkeyprotocol.html http://www.schrevel.com/edonkey/ http://www.emule-project.net/ http://www.nongnu.org/mldonkey/ Content =========================================================== 1. Network protocol 2. server.met 3. part.met 4. known.met 5. pref.met 6. Changes 1. Network protocol =========================================================== Client <-> Server ------------------------------------------- 0x01 Hello server -> 0x40 <- ID change 0x15 Offer files -> 0x14 Get server list -> 0x38 <- Server message 0x32 <- Server list 0x41 <- Server info 0x34 <- Server status 0x16 Search file -> 0x33 <- Search file results 0x21 More results -> 0x19 Get sources -> 0x42 <- Found sources 0x1a Search user -> 0x43 <- Search user results 0x1c IP request -> 0x35 <- IP request answer 0x36 <- IP request fail 0x4d <- New client ID 0x1d Get chat rooms -> 0x39 <- Chat rooms 0x1f Join room -> 0x1e Chat message -> 0x3a <- Chat broadcast 0x3b <- Chat join 0x3c <- Chat leave 0x3d <- Chat users ------------------------------------------- Client <-> Client ------------------------------------------- 0x01 Hello client -> 0x4c <- Hello answer 0x58 File request -> 0x59 <- File request answer 0x48 <- No such file 0x4f File status request -> 0x50 <- File status 0x51 Hashset request -> 0x52 <- Hashset answer 0x54 Upload request -> 0x55 <- Upload accept 0x47 Request parts -> 0x46 <- Sending part 0x49 <- End of download 0x56 Cancel transfer -> 0x57 <- Out of parts 0x4a View files -> 0x4b <- View files answer 0x4e Message -> 0x4e <- Message ------------------------------------------- ::= 0x01 ::= 0x01 0x10 Client <-> Server ------------------------- ::= 0x05 ? ::= 0x14 ::= 0x15 ::= 0x16 ::= 0x19 ::= 0x1a ::= 0x1c ::= 0x1d ? ::= 0x1e ? ::= 0x1f ? ::= 0x21 ::= 0x32
::= 0x33 ::= 0x34 ::= 0x35 ::= 0x36 ::= 0x38 ::= 0x39 BYTE ( DWORD)* ::= 0x3a ? ::= 0x3b ? ::= 0x3c ? ::= 0x3d ? ::= 0x40 ::= 0x41 ::= 0x42
// ID list actually ::= 0x43 Client <-> Client ------------------------- ::= 0x46 DATA ::= 0x47 ::= 0x48 ::= 0x49 ::= 0x4a ::= 0x4b ::= 0x4c ::= 0x4d // change low id to high ::= 0x4e ::= 0x4f ::= 0x50 ::= 0x51 ::= 0x52 ::= 0x53 ? ::= 0x54 ::= 0x55 ::= 0x56 ::= 0x57 ::= 0x58 ::= 0x59 UDP ------------------------- ::= 0x96 DWORD?? ::= 0x97 DWORD?? Nusers Nfiles ::= 0x98 ::= 0x99 ::= 0x9a ::= 0x9b
::= 0x9c
::= 0xa0
::= 0xa1
::= 0xa2 ? ::= 0xa3 ? ::= 0xa4 ? ::= 0x00 ||= 0x01 ||= 0x02 ||= 0x03 DWORD ::= 0x00 // and ||= 0x01 // or ||= 0x02 // and not ::= 0x01 // min ||= 0x02 // max ::= DWORD * ::= ::= HASH ::= DWORD * ::= HASH ::= DWORD * ::= 0x02 DWORD ||= 0x03 ||= 0x04 FLOAT ::= WORD ||= ::= 0x01 // name, string ||= 0x02 // size ||= 0x03 // type, string: Audio, Video, Image, Pro, Doc, Col ||= 0x04 // format, string: file extension ||= 0x08 // copied ||= 0x09 DATA // gap start, DATA keeps number of gap as string ||= 0x0a DATA // gap end, DATA keeps number of gap as string ||= 0x0b // description, string ||= 0x0c // ping ||= 0x0d // fail ||= 0x0e // preference ||= 0x0f // port ||= 0x10 // ip ||= 0x11 // version ||= 0x12 // tempfile, string ||= 0x13 // priority ||= 0x14 // status ||= 0x15 // availability
::= BYTE
* ::=
::=
::= ::= WORD BYTE* // number of bytes is WORD/8, 1 bit for each part ::= WORD HASH* ::= ::= DWORD ::= DWORD ::= WORD DATA ::= DWORD // client IP for high id, or number ::= DWORD ::= DWORD ::= HASH ::= DWORD ::= WORD BYTE 1 byte integer WORD 2 bytes integer DWORD 4 bytes integer FLOAT 4 bytes single float HASH 16 bytes MD4 digest 2. server.met =========================================================== ::= 0x0e ::= DWORD * ::= ::= DATA NOTE: may keep some data as 28 unhandled bytes at the end: 0x11A0 : 6D 61 64 65 20 62 79 20 6F 20 63 20 62 20 20 4D : made.by.o.c.b..M 0x11B0 : 20 61 20 75 20 72 20 69 20 63 20 65 : .a.u.r.i.c.e 3. part.met =========================================================== ::= 0xe0 ::= 4. known.met =========================================================== ::= 0x0e ::= DWORD * 5. pref.met =========================================================== ::=
HASH ::= 6. Changes =========================================================== 0.3 Tue Oct 8 17:50:28 MSD 2002 - added format for *.met files. 0.2 - merged information from mldonkey. 0.1 - started document from some public info and dumped packets.