Added Tony Hart's <thart@avici.com> patch to dissect MD5 authentication
data in OSPF. (corrected copy) svn path=/trunk/; revision=889
This commit is contained in:
parent
0d1465731b
commit
f50168c85d
|
@ -2,7 +2,7 @@
|
||||||
* Routines for OSPF packet disassembly
|
* Routines for OSPF packet disassembly
|
||||||
* (c) Copyright Hannes R. Boehm <hannes@boehm.org>
|
* (c) Copyright Hannes R. Boehm <hannes@boehm.org>
|
||||||
*
|
*
|
||||||
* $Id: packet-ospf.c,v 1.13 1999/08/26 07:34:41 guy Exp $
|
* $Id: packet-ospf.c,v 1.14 1999/10/19 15:59:03 gram Exp $
|
||||||
*
|
*
|
||||||
* At this time, this module is able to analyze OSPF
|
* At this time, this module is able to analyze OSPF
|
||||||
* packets as specified in RFC2328. MOSPF (RFC1584) and other
|
* packets as specified in RFC2328. MOSPF (RFC1584) and other
|
||||||
|
@ -55,11 +55,13 @@ static int proto_ospf = -1;
|
||||||
void
|
void
|
||||||
dissect_ospf(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) {
|
dissect_ospf(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) {
|
||||||
e_ospfhdr ospfh;
|
e_ospfhdr ospfh;
|
||||||
|
e_ospf_crypto *crypto;
|
||||||
|
int i, saved_len, ospflen;
|
||||||
|
|
||||||
proto_tree *ospf_tree = NULL;
|
proto_tree *ospf_tree = NULL;
|
||||||
proto_item *ti;
|
proto_item *ti;
|
||||||
proto_tree *ospf_header_tree;
|
proto_tree *ospf_header_tree;
|
||||||
char auth_data[9]="";
|
char auth_data[(2 * 16) + 1]="";
|
||||||
char *packet_type;
|
char *packet_type;
|
||||||
static value_string pt_vals[] = { {OSPF_HELLO, "Hello Packet" },
|
static value_string pt_vals[] = { {OSPF_HELLO, "Hello Packet" },
|
||||||
{OSPF_DB_DESC, "DB Descr." },
|
{OSPF_DB_DESC, "DB Descr." },
|
||||||
|
@ -116,8 +118,19 @@ dissect_ospf(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) {
|
||||||
proto_tree_add_text(ospf_header_tree, offset + 16 , 8, "Auth Data: %s", auth_data);
|
proto_tree_add_text(ospf_header_tree, offset + 16 , 8, "Auth Data: %s", auth_data);
|
||||||
break;
|
break;
|
||||||
case OSPF_AUTH_CRYPT:
|
case OSPF_AUTH_CRYPT:
|
||||||
|
crypto = (e_ospf_crypto *)ospfh.auth_data;
|
||||||
proto_tree_add_text(ospf_header_tree, offset + 14 , 2, "Auth Type: crypt");
|
proto_tree_add_text(ospf_header_tree, offset + 14 , 2, "Auth Type: crypt");
|
||||||
proto_tree_add_text(ospf_header_tree, offset + 16 , 8, "Auth Data (crypt)");
|
proto_tree_add_text(ospf_header_tree, offset + 18 , 1, "Auth Key ID: %d",
|
||||||
|
crypto->key_id);
|
||||||
|
proto_tree_add_text(ospf_header_tree, offset + 19 , 1, "Auth Data Length: %d",
|
||||||
|
crypto->length);
|
||||||
|
proto_tree_add_text(ospf_header_tree, offset + 20 , 4, "Auth Crypto Sequence Number: 0x%x",
|
||||||
|
ntohl(crypto->sequence_num));
|
||||||
|
|
||||||
|
ospflen = ntohs(ospfh.length);
|
||||||
|
for (i = 0; i < crypto->length && i < (sizeof(auth_data)/2); i++)
|
||||||
|
sprintf(&auth_data[i*2],"%02x",pd[offset + ospflen + i]);
|
||||||
|
proto_tree_add_text(ospf_header_tree, offset + ospflen , 16, "Auth Data: %s", auth_data);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
proto_tree_add_text(ospf_header_tree, offset + 14 , 2, "Auth Type (unknown)");
|
proto_tree_add_text(ospf_header_tree, offset + 14 , 2, "Auth Type (unknown)");
|
||||||
|
@ -126,8 +139,18 @@ dissect_ospf(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Temporarily adjust the captured length to match the size of the OSPF
|
||||||
|
* packet (since the dissect routines use it to work out where the end of
|
||||||
|
* the ospf packet is).
|
||||||
|
*/
|
||||||
|
saved_len = pi.captured_len;
|
||||||
|
if (BYTES_ARE_IN_FRAME(offset, ntohs(ospfh.length))) {
|
||||||
|
pi.captured_len = offset + ntohs(ospfh.length);
|
||||||
|
}
|
||||||
|
|
||||||
/* Skip over header */
|
/* Skip over header */
|
||||||
offset += OSPF_HEADER_LENGTH;
|
offset += OSPF_HEADER_LENGTH;
|
||||||
|
|
||||||
switch(ospfh.packet_type){
|
switch(ospfh.packet_type){
|
||||||
case OSPF_HELLO:
|
case OSPF_HELLO:
|
||||||
dissect_ospf_hello(pd, offset, fd, ospf_tree);
|
dissect_ospf_hello(pd, offset, fd, ospf_tree);
|
||||||
|
@ -145,8 +168,10 @@ dissect_ospf(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) {
|
||||||
dissect_ospf_ls_ack(pd, offset, fd, ospf_tree);
|
dissect_ospf_ls_ack(pd, offset, fd, ospf_tree);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
pi.captured_len = saved_len;
|
||||||
dissect_data(pd, offset, fd, tree);
|
dissect_data(pd, offset, fd, tree);
|
||||||
}
|
}
|
||||||
|
pi.captured_len = saved_len;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* packet-ospf.h (c) 1998 Hannes Boehm */
|
/* packet-ospf.h (c) 1998 Hannes Boehm */
|
||||||
|
|
||||||
/* $Id: packet-ospf.h,v 1.4 1999/10/06 03:33:48 guy Exp $ */
|
/* $Id: packet-ospf.h,v 1.5 1999/10/19 15:59:04 gram Exp $ */
|
||||||
|
|
||||||
#define OSPF_HEADER_LENGTH 24
|
#define OSPF_HEADER_LENGTH 24
|
||||||
|
|
||||||
|
@ -123,6 +123,13 @@ typedef struct _e_ospf_asexternal_lsa {
|
||||||
guint32 external_tag;
|
guint32 external_tag;
|
||||||
} e_ospf_asexternal_lsa;
|
} e_ospf_asexternal_lsa;
|
||||||
|
|
||||||
|
typedef struct _e_ospf_crypto {
|
||||||
|
guint16 mbz;
|
||||||
|
guint8 key_id;
|
||||||
|
guint8 length;
|
||||||
|
guint32 sequence_num;
|
||||||
|
} e_ospf_crypto;
|
||||||
|
|
||||||
|
|
||||||
void dissect_ospf_hello(const u_char*, int, frame_data*, proto_tree*);
|
void dissect_ospf_hello(const u_char*, int, frame_data*, proto_tree*);
|
||||||
void dissect_ospf_db_desc(const u_char*, int, frame_data*, proto_tree*);
|
void dissect_ospf_db_desc(const u_char*, int, frame_data*, proto_tree*);
|
||||||
|
|
Loading…
Reference in New Issue