From Stefano Picerno:

I made some updates to the edonkey dissector.
Most kademlia1 and some kademlia2 messages are now completely decoded.

svn path=/trunk/; revision=23288
This commit is contained in:
Anders Broman 2007-10-27 15:28:35 +00:00
parent f209667d93
commit 135ba5aeff
2 changed files with 1493 additions and 506 deletions

File diff suppressed because it is too large Load Diff

View File

@ -1,10 +1,13 @@
/* packet-edonkey.h
* Declarations for edonkey dissection
* Copyright 2003, Xuan Zhang <xz@aemail4u.com>
* Copyright 2007, Stefano Picerno <stefano.picerno@gmail.com>
* eDonkey dissector based on protocol descriptions from mldonkey:
* http://savannah.nongnu.org/download/mldonkey/docs/Edonkey-Overnet/edonkey-protocol.txt
* http://savannah.nongnu.org/download/mldonkey/docs/Edonkey-Overnet/overnet-protocol.txt
*
* Kademlia dissector based on source code inspection of aMule 2.1.3 and eMule 0.84b
*
* $Id$
*
* Wireshark - Network traffic analyzer
@ -28,7 +31,7 @@
void proto_register_edonkey(void);
#define EDONKEY_MAX_SNAP_SIZE 1500
#define EDONKEY_MAX_SNAP_SIZE 1500
#define EDONKEY_TCP_HEADER_LENGTH 5
#define EDONKEY_UDP_HEADER_LENGTH 2
@ -52,7 +55,7 @@ void proto_register_edonkey(void);
#define EDONKEY_MSG_CLIENT_CB_REQ 0x1c
/* define EDONKEY_MSG_UNKNOWN 0x20 */
#define EDONKEY_MSG_MORE_RESULTS 0x21
#define EDONKEY_MSG_GET_SOURCES_OBFU 0x23
#define EDONKEY_MSG_GET_SOURCES_OBFU 0x23
#define EDONKEY_MSG_SERVER_LIST 0x32
#define EDONKEY_MSG_SEARCH_FILE_RESULTS 0x33
#define EDONKEY_MSG_SERVER_STATUS 0x34
@ -63,7 +66,7 @@ void proto_register_edonkey(void);
#define EDONKEY_MSG_SERVER_INFO_DATA 0x41
#define EDONKEY_MSG_FOUND_SOURCES 0x42
#define EDONKEY_MSG_SEARCH_USER_RESULTS 0x43
#define EDONKEY_MSG_FOUND_SOURCES_OBFU 0x44
#define EDONKEY_MSG_FOUND_SOURCES_OBFU 0x44
/* Client <-> Client */
#define EDONKEY_MSG_HELLO_CLIENT 0x10 /* 0x01 0x10 */
@ -103,13 +106,15 @@ void proto_register_edonkey(void);
#define EMULE_MSG_HELLO_ANSWER 0x02
#define EMULE_MSG_DATA_COMPRESSED 0x40
#define EMULE_MSG_QUEUE_RANKING 0x60
#define EMULE_MSG_FILE_DESC 0x61
#define EMULE_MSG_SOURCES_REQUEST 0x81
#define EMULE_MSG_SOURCES_ANSWER 0x82
#define EMULE_MSG_PUBLIC_KEY 0x85
#define EMULE_MSG_SIGNATURE 0x86
#define EMULE_MSG_SEC_IDENT_STATE 0x87
#define EMULE_MSG_SEC_IDENT_STATE 0x87
#define EMULE_MSG_MULTIPACKET 0x92
#define EMULE_MSG_MULTIPACKET_ANSWER 0x93
#define EMULE_MSG_CALLBACK 0x99
#define EMULE_MSG_AICH_REQUEST 0x9b
#define EMULE_MSG_AICH_ANSWER 0x9c
#define EMULE_MSG_AICHFILEHASH_ANSWER 0x9d
@ -239,3 +244,165 @@ void proto_register_edonkey(void);
/* EDONKEY SEARCH MIN/MAX */
#define EDONKEY_SEARCH_MIN 0x01
#define EDONKEY_SEARCH_MAX 0x02
/* KADEMLIA TAGS */
#define KADEMLIA_TAGTYPE_HASH 0x01
#define KADEMLIA_TAGTYPE_STRING 0x02
#define KADEMLIA_TAGTYPE_UINT32 0x03
#define KADEMLIA_TAGTYPE_FLOAT32 0x04
#define KADEMLIA_TAGTYPE_BOOL 0x05
#define KADEMLIA_TAGTYPE_BOOLARRAY 0x06
#define KADEMLIA_TAGTYPE_BLOB 0x07
#define KADEMLIA_TAGTYPE_UINT16 0x08
#define KADEMLIA_TAGTYPE_UINT8 0x09
#define KADEMLIA_TAGTYPE_BSOB 0x0A
#define KADEMLIA_TAGTYPE_UINT64 0x0B
#define KADEMLIA_TAGTYPE_STR1 0x11
#define KADEMLIA_TAGTYPE_STR2 0x12
#define KADEMLIA_TAGTYPE_STR3 0x13
#define KADEMLIA_TAGTYPE_STR4 0x14
#define KADEMLIA_TAGTYPE_STR5 0x15
#define KADEMLIA_TAGTYPE_STR6 0x16
#define KADEMLIA_TAGTYPE_STR7 0x17
#define KADEMLIA_TAGTYPE_STR8 0x18
#define KADEMLIA_TAGTYPE_STR9 0x19
#define KADEMLIA_TAGTYPE_STR10 0x1A
#define KADEMLIA_TAGTYPE_STR11 0x1B
#define KADEMLIA_TAGTYPE_STR12 0x1C
#define KADEMLIA_TAGTYPE_STR13 0x1D
#define KADEMLIA_TAGTYPE_STR14 0x1E
#define KADEMLIA_TAGTYPE_STR15 0x1F
#define KADEMLIA_TAGTYPE_STR16 0x20
#define KADEMLIA_TAGTYPE_STR17 0x21
#define KADEMLIA_TAGTYPE_STR18 0x22
#define KADEMLIA_TAGTYPE_STR19 0x23
#define KADEMLIA_TAGTYPE_STR20 0x24
#define KADEMLIA_TAGTYPE_STR21 0x25
#define KADEMLIA_TAGTYPE_STR22 0x26
#define KADEMLIA_TAG_MEDIA_ARTIST 0xD0 /* <string> */
#define KADEMLIA_TAG_MEDIA_ALBUM 0xD1 /* <string> */
#define KADEMLIA_TAG_MEDIA_TITLE 0xD2 /* <string> */
#define KADEMLIA_TAG_MEDIA_LENGTH 0xD3 /* <uint32> !!! */
#define KADEMLIA_TAG_MEDIA_BITRATE 0xD4 /* <uint32> */
#define KADEMLIA_TAG_MEDIA_CODEC 0xD5 /* <string> */
#define KADEMLIA_TAG_USER_COUNT 0xF4 /* <uint32> */
#define KADEMLIA_TAG_FILE_COUNT 0xF5 /* <uint32> */
#define KADEMLIA_TAG_FILECOMMENT 0xF6 /* <string> */
#define KADEMLIA_TAG_FILERATING 0xF7 /* <uint8> */
#define KADEMLIA_TAG_BUDDYHASH 0xF8 /* <string> */
#define KADEMLIA_TAG_CLIENTLOWID 0xF9 /* <uint32> */
#define KADEMLIA_TAG_SERVERPORT 0xFA /* <uint16> */
#define KADEMLIA_TAG_SERVERIP 0xFB /* <uint32> */
#define KADEMLIA_TAG_SOURCEUPORT 0xFC /* <uint16> */
#define KADEMLIA_TAG_SOURCEPORT 0xFD /* <uint16> */
#define KADEMLIA_TAG_SOURCEIP 0xFE /* <uint32> */
#define KADEMLIA_TAG_SOURCETYPE 0xFF /* <uint8> */
#define EDONKEY_PROTO_ADU_KADEMLIA 0xA4
#define EDONKEY_PROTO_ADU_KADEMLIA_COMP 0xA5
#define EDONKEY_PROTO_KADEMLIA 0xE4
#define EDONKEY_PROTO_KADEMLIA_COMP 0xE5
/* KADEMLIA (opcodes) (udp) */
#define KADEMLIA_BOOTSTRAP_REQ 0x00 /* <PEER (sender) [25]> */
#define KADEMLIA2_BOOTSTRAP_REQ 0x01 /* */
#define KADEMLIA_BOOTSTRAP_RES 0x08 /* <CNT [2]> <PEER [25]>*(CNT) */
#define KADEMLIA2_BOOTSTRAP_RES 0x09 /* */
#define KADEMLIA_HELLO_REQ 0x10 /* <PEER (sender) [25]> */
#define KADEMLIA2_HELLO_REQ 0x11 /* */
#define KADEMLIA_HELLO_RES 0x18 /* <PEER (receiver) [25]> */
#define KADEMLIA2_HELLO_RES 0x19 /* */
#define KADEMLIA_REQ 0x20 /* <TYPE [1]> <HASH (target) [16]> <HASH (receiver) 16> */
#define KADEMLIA2_REQ 0x21 /* */
#define KADEMLIA_RES 0x28 /* <HASH (target) [16]> <CNT> <PEER [25]>*(CNT) */
#define KADEMLIA2_RES 0x29 /* */
#define KADEMLIA_SEARCH_REQ 0x30 /* <HASH (key) [16]> <ext 0/1 [1]> <SEARCH_TREE>[ext] */
/*#define UNUSED 0x31 Old Opcode, don't use. */
#define KADEMLIA_SEARCH_NOTES_REQ 0x32 /* <HASH (key) [16]> */
#define KADEMLIA2_SEARCH_KEY_REQ 0x33 /* */
#define KADEMLIA2_SEARCH_SOURCE_REQ 0x34 /* */
#define KADEMLIA2_SEARCH_NOTES_REQ 0x35 /* */
#define KADEMLIA_SEARCH_RES 0x38 /* <HASH (key) [16]> <CNT1 [2]> (<HASH (answer) [16]> <CNT2 [2]> <META>*(CNT2))*(CNT1) */
/*#define UNUSED 0x39 Old Opcode, don't use. */
#define KADEMLIA_SEARCH_NOTES_RES 0x3A /* <HASH (key) [16]> <CNT1 [2]> (<HASH (answer) [16]> <CNT2 [2]> <META>*(CNT2))*(CNT1) */
#define KADEMLIA2_SEARCH_RES 0x3B /* */
#define KADEMLIA_PUBLISH_REQ 0x40 /* <HASH (key) [16]> <CNT1 [2]> (<HASH (target) [16]> <CNT2 [2]> <META>*(CNT2))*(CNT1) */
/*#define UNUSED 0x41 Old Opcode, don't use. */
#define KADEMLIA_PUBLISH_NOTES_REQ 0x42 /* <HASH (key) [16]> <HASH (target) [16]> <CNT2 [2]> <META>*(CNT2))*(CNT1) */
#define KADEMLIA2_PUBLISH_KEY_REQ 0x43 /* */
#define KADEMLIA2_PUBLISH_SOURCE_REQ 0x44 /* */
#define KADEMLIA2_PUBLISH_NOTES_REQ 0x45 /* */
#define KADEMLIA_PUBLISH_RES 0x48 /* <HASH (key) [16]> */
/*#define UNUSED 0x49 Old Opcode, don't use. */
#define KADEMLIA_PUBLISH_NOTES_RES 0x4A /* <HASH (key) [16]> */
#define KADEMLIA2_PUBLISH_RES 0x4B /* */
#define KADEMLIA_FIREWALLED_REQ 0x50 /* <TCPPORT (sender) [2]> */
#define KADEMLIA_FINDBUDDY_REQ 0x51 /* <TCPPORT (sender) [2]> */
#define KADEMLIA_CALLBACK_REQ 0x52 /* <TCPPORT (sender) [2]> */
#define KADEMLIA_FIREWALLED_RES 0x58 /* <IP (sender) [4]> */
#define KADEMLIA_FIREWALLED_ACK_RES 0x59 /* (null) */
#define KADEMLIA_FINDBUDDY_RES 0x5A /* <TCPPORT (sender) [2]> */
/* KADEMLIA (parameter) */
#define KADEMLIA_FIND_VALUE 0x02
#define KADEMLIA_STORE 0x04
#define KADEMLIA_FIND_NODE 0x0B
/* Kad search + some unused tags to mirror the ed2k ones. */
#define KADEMLIA_TAG_FILENAME 0x01 /* <string> */
#define KADEMLIA_TAG_FILESIZE 0x02 /* <uint32> */
#define KADEMLIA_TAG_FILESIZE_HI 0x3A /* <uint32> */
#define KADEMLIA_TAG_FILETYPE 0x03 /* <string> */
#define KADEMLIA_TAG_FILEFORMAT 0x04 /* <string> */
#define KADEMLIA_TAG_COLLECTION 0x05
#define KADEMLIA_TAG_PART_PATH 0x06 /* <string> */
#define KADEMLIA_TAG_PART_HASH 0x07
#define KADEMLIA_TAG_COPIED 0x08 /* <uint32> */
#define KADEMLIA_TAG_GAP_START 0x09 /* <uint32> */
#define KADEMLIA_TAG_GAP_END 0x0A /* <uint32> */
#define KADEMLIA_TAG_DESCRIPTION 0x0B /* <string> */
#define KADEMLIA_TAG_PING 0x0C
#define KADEMLIA_TAG_FAIL 0x0D
#define KADEMLIA_TAG_PREFERENCE 0x0E
#define KADEMLIA_TAG_PORT 0x0F
#define KADEMLIA_TAG_IP_ADDRESS 0x10
#define KADEMLIA_TAG_VERSION 0x11 /* <string> */
#define KADEMLIA_TAG_TEMPFILE 0x12 /* <string> */
#define KADEMLIA_TAG_PRIORITY 0x13 /* <uint32> */
#define KADEMLIA_TAG_STATUS 0x14 /* <uint32> */
#define KADEMLIA_TAG_SOURCES 0x15 /* <uint32> */
#define KADEMLIA_TAG_PERMISSIONS 0x16
#define KADEMLIA_TAG_QTIME 0x16
#define KADEMLIA_TAG_PARTS 0x17
#define KADEMLIA_TAG_MEDIA_ARTIST 0xD0 /* <string> */
#define KADEMLIA_TAG_MEDIA_ALBUM 0xD1 /* <string> */
#define KADEMLIA_TAG_MEDIA_TITLE 0xD2 /* <string> */
#define KADEMLIA_TAG_MEDIA_LENGTH 0xD3 /* <uint32> !!! */
#define KADEMLIA_TAG_MEDIA_BITRATE 0xD4 /* <uint32> */
#define KADEMLIA_TAG_MEDIA_CODEC 0xD5 /* <string> */
#define KADEMLIA_TAG_ENCRYPTION 0xF3 /* <uint8> */
#define KADEMLIA_TAG_FILERATING 0xF7 /* <uint8> */
#define KADEMLIA_TAG_BUDDYHASH 0xF8 /* <string> */
#define KADEMLIA_TAG_CLIENTLOWID 0xF9 /* <uint32> */
#define KADEMLIA_TAG_SERVERPORT 0xFA /* <uint16> */
#define KADEMLIA_TAG_SERVERIP 0xFB /* <uint32> */
#define KADEMLIA_TAG_SOURCEUPORT 0xFC /* <uint16> */
#define KADEMLIA_TAG_SOURCEPORT 0xFD /* <uint16> */
#define KADEMLIA_TAG_SOURCEIP 0xFE /* <uint32> */
#define KADEMLIA_TAG_SOURCETYPE 0xFF /* <uint8> */