diff options
author | Gilbert Ramirez <gram@alumni.rice.edu> | 1998-10-14 05:18:32 +0000 |
---|---|---|
committer | Gilbert Ramirez <gram@alumni.rice.edu> | 1998-10-14 05:18:32 +0000 |
commit | 5e649516c9a599d339b86497cc4860d9ba51fa06 (patch) | |
tree | 9dbaa843e29a8be484e7d865eb515a5645a4ec17 /packet-nbipx.c | |
parent | 4dbba72d177fc02a6fa06b01b6078748a9aee903 (diff) |
I've started to figure out the difference between NetBIOS over IPX for
Netware, and NetBIOS over IPX for WinNT (NWLink).
svn path=/trunk/; revision=53
Diffstat (limited to 'packet-nbipx.c')
-rw-r--r-- | packet-nbipx.c | 90 |
1 files changed, 71 insertions, 19 deletions
diff --git a/packet-nbipx.c b/packet-nbipx.c index 2f12c2ccdf..490f29a944 100644 --- a/packet-nbipx.c +++ b/packet-nbipx.c @@ -2,7 +2,7 @@ * Routines for NetBIOS over IPX packet disassembly * Gilbert Ramirez <gram@verdict.uthscsa.edu> * - * $Id: packet-nbipx.c,v 1.2 1998/10/14 04:28:49 gram Exp $ + * $Id: packet-nbipx.c,v 1.3 1998/10/14 05:18:32 gram Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs <gerald@zing.org> @@ -46,39 +46,88 @@ #include "packet.h" #include "packet-ipx.h" /* for ipxnet_to_string() */ +enum nbipx_protocol { + NETBIOS_NETWARE, + NETBIOS_NWLINK +}; + +static void +nbipx_ns(const u_char *pd, int offset, frame_data *fd, GtkTree *tree, + enum nbipx_protocol nbipx); + /* There is no RFC or public specification of Netware or Microsoft * NetBIOS over IPX packets. I have had to decode the protocol myself, * so there are holes and perhaps errors in this code. (gram) */ +static char +*packet_type[] = { + "", + "Name Query" +}; struct nbipx_header { + /* Netware & NT NetBIOS over IPX */ guint32 router[8]; guint8 name_type; guint8 packet_type; + char name[17]; -}; + /* NT NetBIOS over IPX */ + guint16 junk; + char node_name[17]; + +}; +/* NetWare */ void dissect_nbipx_ns(const u_char *pd, int offset, frame_data *fd, GtkTree *tree) { + nbipx_ns(pd, offset, fd, tree, NETBIOS_NETWARE); +} + +void +dissect_nwlink_dg(const u_char *pd, int offset, frame_data *fd, GtkTree *tree) +{ + nbipx_ns(pd, offset, fd, tree, NETBIOS_NWLINK); +} + + +static void +nbipx_ns(const u_char *pd, int offset, frame_data *fd, GtkTree *tree, + enum nbipx_protocol nbipx) +{ GtkWidget *nbipx_tree, *ti; struct nbipx_header header; int i, rtr_offset; + int name_offset; + + if (nbipx == NETBIOS_NETWARE) { + name_offset = 34; + } + else { + name_offset = 36; + } - char *packet_type[] = { - "", - "Name Query" - }; header.name_type = pd[offset+32]; header.packet_type = pd[offset+33]; - memcpy(header.name, &pd[offset+34], 16); + memcpy(header.name, &pd[offset+name_offset], 16); header.name[16] = 0; /* null-terminate the string */ + if (nbipx == NETBIOS_NWLINK) { + memcpy(header.node_name, &pd[offset+52], 16); + header.node_name[17] = 0; /* null-terminate the string */ + } + if (fd->win_info[COL_NUM]) { + if (nbipx == NETBIOS_NETWARE) { strcpy(fd->win_info[COL_PROTOCOL], "NetBIOS"); + } + else { + strcpy(fd->win_info[COL_PROTOCOL], "NWLink"); + } switch (header.packet_type) { case 1: @@ -119,21 +168,24 @@ dissect_nbipx_ns(const u_char *pd, int offset, frame_data *fd, GtkTree *tree) add_item_to_tree(nbipx_tree, offset+32, 1, "Name Type: %02X", header.name_type); - add_item_to_tree(nbipx_tree, offset+34, 16, "Name String: %s", - header.name); - } -} - - - - - - - - + if (nbipx == NETBIOS_NETWARE) { + add_item_to_tree(nbipx_tree, offset+name_offset, 16, + "Name String: %s", header.name); + } + else { + add_item_to_tree(nbipx_tree, offset+name_offset, 16, + "Group Name String: %s", header.name); + add_item_to_tree(nbipx_tree, offset+52, 16, + "Node Name String: %s", header.node_name); + } + } + if (nbipx == NETBIOS_NWLINK) { + dissect_data(pd, offset + 68, fd, tree); + } +} |