]> The Tcpdump Group git mirrors - tcpdump/commitdiff
SMB-over-TCP (port 445) support.
authorguy <guy>
Sun, 9 Dec 2007 00:30:47 +0000 (00:30 +0000)
committerguy <guy>
Sun, 9 Dec 2007 00:30:47 +0000 (00:30 +0000)
interface.h
print-smb.c
print-tcp.c
tcp.h

index 613c018f43683cadd125169171fa9df942901bf4..52264e16a28022ec2909e28cbb1d3d805c1b22c7 100644 (file)
@@ -18,7 +18,7 @@
  * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  *
- * @(#) $Header: /tcpdump/master/tcpdump/interface.h,v 1.280 2007-09-24 23:46:27 guy Exp $ (LBL)
+ * @(#) $Header: /tcpdump/master/tcpdump/interface.h,v 1.281 2007-12-09 00:30:47 guy Exp $ (LBL)
  */
 
 #ifndef tcpdump_interface_h
@@ -303,6 +303,7 @@ extern void ipx_netbios_print(const u_char *, u_int);
 extern void nbt_tcp_print(const u_char *, int);
 extern void nbt_udp137_print(const u_char *, int);
 extern void nbt_udp138_print(const u_char *, int);
+extern void smb_tcp_print(const u_char *, int);
 extern char *smb_errstr(int, int);
 extern const char *nt_errstr(u_int32_t);
 extern void print_data(const unsigned char *, int);
index fcd4fbaa294c59ab8092a7b6f2b7ce697a53bb3a..68c73659f84f0627a25f589f5ec507b578a5c7f7 100644 (file)
@@ -12,7 +12,7 @@
 
 #ifndef lint
 static const char rcsid[] _U_ =
-     "@(#) $Header: /tcpdump/master/tcpdump/print-smb.c,v 1.46 2007-08-29 02:31:44 mcr Exp $";
+     "@(#) $Header: /tcpdump/master/tcpdump/print-smb.c,v 1.47 2007-12-09 00:30:47 guy Exp $";
 #endif
 
 #include <tcpdump-stdinc.h>
@@ -1244,7 +1244,47 @@ trunc:
     return;
 }
 
+/*
+ * Print an SMB-over-TCP packet received across tcp on port 445
+ */
+void
+smb_tcp_print (const u_char * data, int length)
+{
+    int caplen;
+    u_int smb_len;
+    const u_char *maxbuf;
+
+    if (length < 4)
+       goto trunc;
+    if (snapend < data)
+       goto trunc;
+    caplen = snapend - data;
+    if (caplen < 4)
+       goto trunc;
+    maxbuf = data + caplen;
+    smb_len = EXTRACT_24BITS(data + 1);
+    length -= 4;
+    caplen -= 4;
 
+    startbuf = data;
+    data += 4;
+
+    if (smb_len >= 4 && caplen >= 4 && memcmp(data,"\377SMB",4) == 0) {
+       if ((int)smb_len > caplen) {
+           if ((int)smb_len > length)
+               printf("WARNING: Packet is continued in later TCP segments\n");
+           else
+               printf("WARNING: Short packet. Try increasing the snap length by %d\n",
+                   smb_len - caplen);
+       }
+       print_smb(data, maxbuf > data + smb_len ? data + smb_len : maxbuf);
+    } else
+       printf("SMB-over-TCP packet:(raw data or continuation?)\n");
+    return;
+trunc:
+    printf("[|SMB]");
+    return;
+}
 
 /*
  * print a NBT packet received across udp on port 138
index b34be32d8ac02bda5b387ba2ae0112300ca7aa49..1c60748a3accb76785a9431513baf5722c42c78d 100644 (file)
@@ -25,7 +25,7 @@
 
 #ifndef lint
 static const char rcsid[] _U_ =
-"@(#) $Header: /tcpdump/master/tcpdump/print-tcp.c,v 1.131 2007-11-09 00:34:25 guy Exp $ (LBL)";
+"@(#) $Header: /tcpdump/master/tcpdump/print-tcp.c,v 1.132 2007-12-09 00:30:47 guy Exp $ (LBL)";
   #else
 __RCSID("$NetBSD: print-tcp.c,v 1.8 2007/07/24 11:53:48 drochner Exp $");
 #endif
@@ -650,6 +650,8 @@ tcp_print(register const u_char *bp, register u_int length,
 #ifdef TCPDUMP_DO_SMB
         else if (sport == NETBIOS_SSN_PORT || dport == NETBIOS_SSN_PORT)
                 nbt_tcp_print(bp, length);
+       else if (sport == SMB_PORT || dport == SMB_PORT)
+               smb_tcp_print(bp, length);
 #endif
         else if (sport == BEEP_PORT || dport == BEEP_PORT)
                 beep_print(bp, length);
diff --git a/tcp.h b/tcp.h
index 0f945ec96f367f3fb34033bd52715fc440d5b602..757bfd86b83192fa292adbded223c4df7806d6ca 100644 (file)
--- a/tcp.h
+++ b/tcp.h
@@ -1,4 +1,4 @@
-/* @(#) $Header: /tcpdump/master/tcpdump/tcp.h,v 1.13 2007-01-29 09:59:42 hannes Exp $ (LBL) */
+/* @(#) $Header: /tcpdump/master/tcpdump/tcp.h,v 1.14 2007-12-09 00:30:47 guy Exp $ (LBL) */
 /*
  * Copyright (c) 1982, 1986, 1993
  *     The Regents of the University of California.  All rights reserved.
@@ -103,3 +103,6 @@ struct tcphdr {
 #endif
 #define MSDP_PORT              639
 #define LDP_PORT                646
+#ifndef SMB_PORT
+#define SMB_PORT                445
+#endif