#ifndef lint
static const char rcsid[] _U_ =
- "@(#) $Header: /tcpdump/master/tcpdump/print-tcp.c,v 1.120 2005-04-06 18:53:56 mcr 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);