aboutsummaryrefslogtreecommitdiffstats
path: root/packet-nbipx.c
diff options
context:
space:
mode:
authorGilbert Ramirez <gram@alumni.rice.edu>1998-10-14 05:18:32 +0000
committerGilbert Ramirez <gram@alumni.rice.edu>1998-10-14 05:18:32 +0000
commit5e649516c9a599d339b86497cc4860d9ba51fa06 (patch)
tree9dbaa843e29a8be484e7d865eb515a5645a4ec17 /packet-nbipx.c
parent4dbba72d177fc02a6fa06b01b6078748a9aee903 (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.c90
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);
+ }
+}