From: assar Date: Tue, 11 Jul 2000 01:22:38 +0000 (+0000) Subject: check the ip protocol version on printing raw packets, from Love X-Git-Tag: tcpdump-3.5.1~226 X-Git-Url: https://git.tcpdump.org/tcpdump/commitdiff_plain/35795ae1ba7d2f801efaef6e6716fc81727be4eb check the ip protocol version on printing raw packets, from Love --- diff --git a/interface.h b/interface.h index 10c96fd6..840d8eb7 100644 --- a/interface.h +++ b/interface.h @@ -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.132 2000-07-11 00:49:02 assar Exp $ (LBL) + * @(#) $Header: /tcpdump/master/tcpdump/interface.h,v 1.133 2000-07-11 01:22:38 assar Exp $ (LBL) */ #ifndef tcpdump_interface_h @@ -244,6 +244,7 @@ extern void gre_print(const u_char *, u_int); extern void icmp_print(const u_char *, u_int, const u_char *); extern void igrp_print(const u_char *, u_int, const u_char *); extern void ip_print(const u_char *, u_int); +extern void ipN_print(const u_char *, u_int); extern void ipx_print(const u_char *, u_int); extern void isoclns_print(const u_char *, u_int, u_int, const u_char *, const u_char *); diff --git a/print-ip.c b/print-ip.c index 6a92fb72..305dad11 100644 --- a/print-ip.c +++ b/print-ip.c @@ -21,7 +21,7 @@ #ifndef lint static const char rcsid[] = - "@(#) $Header: /tcpdump/master/tcpdump/print-ip.c,v 1.83 2000-07-01 03:39:03 assar Exp $ (LBL)"; + "@(#) $Header: /tcpdump/master/tcpdump/print-ip.c,v 1.84 2000-07-11 01:22:39 assar Exp $ (LBL)"; #endif #ifdef HAVE_CONFIG_H @@ -726,3 +726,29 @@ again: printf(")"); } } + +void +ipN_print(register const u_char *bp, register u_int length) +{ + struct ip *ip, hdr; + + ip = (struct ip *)bp; + if (length < 4) { + (void)printf("truncated-ip %d", length); + return; + } + memcpy (&hdr, (char *)ip, 4); + switch (hdr.ip_v) { + case 4: + ip_print (bp, length); + return; +#ifdef INET6 + case 6: + ip6_print (bp, length); + return; +#endif + default: + (void)printf("unknown ip %d", hdr.ip_v); + return; + } +} diff --git a/print-raw.c b/print-raw.c index dbba479b..80a707d3 100644 --- a/print-raw.c +++ b/print-raw.c @@ -21,7 +21,7 @@ #ifndef lint static const char rcsid[] = - "@(#) $Header: /tcpdump/master/tcpdump/print-raw.c,v 1.26 2000-07-01 03:39:08 assar Exp $ (LBL)"; + "@(#) $Header: /tcpdump/master/tcpdump/print-raw.c,v 1.27 2000-07-11 01:22:39 assar Exp $ (LBL)"; #endif #ifdef HAVE_CONFIG_H @@ -81,7 +81,7 @@ raw_if_print(u_char *user, const struct pcap_pkthdr *h, const u_char *p) if (eflag) printf("ip: "); - ip_print(p, length); + ipN_print(p, length); if (xflag) default_print(p, caplen);