diff options
author | rpaulo <rpaulo@FreeBSD.org> | 2009-03-21 18:30:25 +0000 |
---|---|---|
committer | rpaulo <rpaulo@FreeBSD.org> | 2009-03-21 18:30:25 +0000 |
commit | a7b30869205bc30a0462ffd9bc6c77fe4d980bd0 (patch) | |
tree | 9e93e51a04c09c3b9b900ef6611b8bbd1290f26f /contrib/tcpdump/print-smb.c | |
parent | 739eecddb9401ad5ef572c94f0764de2aa04e074 (diff) | |
parent | 10d55b9ccc041d249d91faedc3bd1139626bf444 (diff) | |
download | FreeBSD-src-a7b30869205bc30a0462ffd9bc6c77fe4d980bd0.zip FreeBSD-src-a7b30869205bc30a0462ffd9bc6c77fe4d980bd0.tar.gz |
Merge tcpdump 4.0.0 from the vendor branch.
Diffstat (limited to 'contrib/tcpdump/print-smb.c')
-rw-r--r-- | contrib/tcpdump/print-smb.c | 45 |
1 files changed, 42 insertions, 3 deletions
diff --git a/contrib/tcpdump/print-smb.c b/contrib/tcpdump/print-smb.c index 5b963de..391f186 100644 --- a/contrib/tcpdump/print-smb.c +++ b/contrib/tcpdump/print-smb.c @@ -12,7 +12,7 @@ #ifndef lint static const char rcsid[] _U_ = - "@(#) $Header: /tcpdump/master/tcpdump/print-smb.c,v 1.41.2.4 2007/07/14 22:29:05 guy Exp $"; + "@(#) $Header: /tcpdump/master/tcpdump/print-smb.c,v 1.46.2.1 2007-12-09 00:31:35 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 @@ -1459,8 +1499,7 @@ ipx_netbios_print(const u_char *data, u_int length) break; if (memcmp(&data[i], "\377SMB", 4) == 0) { smb_fdata(data, "\n>>> IPX transport ", &data[i], 0); - if (data != NULL) - print_smb(&data[i], maxbuf); + print_smb(&data[i], maxbuf); printf("\n"); fflush(stdout); break; |