* Copyright (c) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997
* The Regents of the University of California. All rights reserved.
*
+ * Copyright (c) 1999-2004 The tcpdump.org project
+ *
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that: (1) source code distributions
* retain the above copyright notice and this paragraph in its entirety, (2)
#ifndef lint
static const char rcsid[] _U_ =
- "@(#) $Header: /tcpdump/master/tcpdump/print-tcp.c,v 1.119 2004-12-27 00:41:31 guy Exp $ (LBL)";
+ "@(#) $Header: /tcpdump/master/tcpdump/print-tcp.c,v 1.125 2006-05-05 23:13:00 guy Exp $ (LBL)";
#endif
#ifdef HAVE_CONFIG_H
return;
}
- if (IP_V(ip) == 4 && vflag && !fragmented) {
+ if (IP_V(ip) == 4 && vflag && !Kflag && !fragmented) {
u_int16_t sum, tcp_sum;
if (TTEST2(tp->th_sport, length)) {
sum = tcp_cksum(ip, tp, length);
}
}
#ifdef INET6
- if (IP_V(ip) == 6 && ip6->ip6_plen && vflag && !fragmented) {
+ if (IP_V(ip) == 6 && ip6->ip6_plen && vflag && !Kflag && !fragmented) {
u_int16_t sum,tcp_sum;
if (TTEST2(tp->th_sport, length)) {
sum = tcp6_cksum(ip6, tp, length);
break;
case TCPOPT_SACK:
- (void)printf("sack");
datalen = len - 2;
if (datalen % 8 != 0) {
- (void)printf(" malformed sack ");
+ (void)printf("malformed sack");
} else {
u_int32_t s, e;
- (void)printf(" sack %d ", datalen / 8);
+ (void)printf("sack %d ", datalen / 8);
for (i = 0; i < datalen; i += 8) {
LENCHECK(i + 4);
s = EXTRACT_32BITS(cp + i);
}
(void)printf("{%u:%u}", s, e);
}
- (void)printf(" ");
}
break;
#endif
break;
+ case TCPOPT_AUTH:
+ (void)printf("Enhanced Auth: keyid %d", *cp++);
+ datalen = len - 3;
+ for (i = 0; i < datalen; ++i) {
+ LENCHECK(i);
+ (void)printf("%02x", cp[i]);
+ }
+ break;
+
default:
(void)printf("opt-%u:", opt);
datalen = len - 2;
const u_char *data, int length, const u_char *rcvsig)
{
struct tcphdr tp1;
- char sig[TCP_SIGLEN];
+ u_char sig[TCP_SIGLEN];
char zero_proto = 0;
MD5_CTX ctx;
u_int16_t savecsum, tlen;
MD5_Update(&ctx, tcpmd5secret, strlen(tcpmd5secret));
MD5_Final(sig, &ctx);
- if (memcmp(rcvsig, sig, 16))
+ if (memcmp(rcvsig, sig, TCP_SIGLEN) == 0)
return (SIGNATURE_VALID);
else
return (SIGNATURE_INVALID);