diff options
author | fenner <fenner@FreeBSD.org> | 2001-04-03 07:50:46 +0000 |
---|---|---|
committer | fenner <fenner@FreeBSD.org> | 2001-04-03 07:50:46 +0000 |
commit | 2877f5b6133ecd5a0574b61880855776ec518278 (patch) | |
tree | 133b57ac128ee361805e9c2bedbcb790324dac62 /contrib/tcpdump/tcpdump.c | |
parent | f7d9a5e270bfcbb075a637a52416185441d33d8d (diff) | |
download | FreeBSD-src-2877f5b6133ecd5a0574b61880855776ec518278.zip FreeBSD-src-2877f5b6133ecd5a0574b61880855776ec518278.tar.gz |
Merge tcpdump 3.6.2
Diffstat (limited to 'contrib/tcpdump/tcpdump.c')
-rw-r--r-- | contrib/tcpdump/tcpdump.c | 121 |
1 files changed, 41 insertions, 80 deletions
diff --git a/contrib/tcpdump/tcpdump.c b/contrib/tcpdump/tcpdump.c index daf95fe..423a8e7 100644 --- a/contrib/tcpdump/tcpdump.c +++ b/contrib/tcpdump/tcpdump.c @@ -24,7 +24,7 @@ static const char copyright[] = "@(#) Copyright (c) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997\n\ The Regents of the University of California. All rights reserved.\n"; static const char rcsid[] = - "@(#) $Header: /tcpdump/master/tcpdump/tcpdump.c,v 1.138.2.1 2000/01/11 07:34:00 fenner Exp $ (LBL)"; + "@(#) $Header: /tcpdump/master/tcpdump/tcpdump.c,v 1.158 2000/12/21 10:43:24 guy Exp $ (LBL)"; #endif /* $FreeBSD$ */ @@ -54,8 +54,6 @@ static const char rcsid[] = #include <unistd.h> #include <ctype.h> -#include <netinet/in_systm.h> -#include <netinet/ip.h> #include "interface.h" #include "addrtoname.h" @@ -76,11 +74,11 @@ int Rflag = 1; /* print sequence # field in AH/ESP*/ int sflag = 0; /* use the libsmi to translate OIDs */ int Sflag; /* print raw TCP sequence numbers */ int tflag = 1; /* print packet arrival time */ +int uflag = 0; /* Print undecoded NFS handles */ int vflag; /* verbose */ int xflag; /* print packet in hex */ int Xflag; /* print packet in ascii as well as hex */ -char *ahsecret = NULL; /* AH secret key */ char *espsecret = NULL; /* ESP secret key */ int packettype; @@ -90,12 +88,9 @@ char *program_name; int32_t thiszone; /* seconds offset from gmt to local time */ -/* Externs */ -extern void bpf_dump(struct bpf_program *, int); - /* Forwards */ -RETSIGTYPE cleanup(int); -extern __dead void usage(void) __attribute__((volatile)); +static RETSIGTYPE cleanup(int); +static void usage(void) __attribute__((noreturn)); /* Length of saved portion of packet. */ int snaplen = DEFAULT_SNAPLEN; @@ -114,16 +109,28 @@ static struct printer printers[] = { #ifdef DLT_CIP { cip_if_print, DLT_CIP }, #endif +#ifdef DLT_ATM_CLIP + { cip_if_print, DLT_ATM_CLIP }, +#endif { sl_if_print, DLT_SLIP }, { sl_bsdos_if_print, DLT_SLIP_BSDOS }, { ppp_if_print, DLT_PPP }, { ppp_bsdos_if_print, DLT_PPP_BSDOS }, { fddi_if_print, DLT_FDDI }, { null_if_print, DLT_NULL }, +#ifdef DLT_LOOP + { null_if_print, DLT_LOOP }, +#endif { raw_if_print, DLT_RAW }, { atm_if_print, DLT_ATM_RFC1483 }, -#ifdef DLT_CHDLC - { chdlc_if_print, DLT_CHDLC }, +#ifdef DLT_C_HDLC + { chdlc_if_print, DLT_C_HDLC }, +#endif +#ifdef DLT_PPP_SERIAL + { ppp_hdlc_if_print, DLT_PPP_SERIAL }, +#endif +#ifdef DLT_LINUX_SLL + { sll_if_print, DLT_LINUX_SLL }, #endif { NULL, 0 }, }; @@ -137,7 +144,7 @@ lookup_printer(int type) if (type == p->type) return p->f; - error("unknown data link type 0x%x", type); + error("unknown data link type %d", type); /* NOTREACHED */ } @@ -169,7 +176,7 @@ main(int argc, char **argv) else program_name = argv[0]; - if (abort_on_misalignment(ebuf) < 0) + if (abort_on_misalignment(ebuf, sizeof(ebuf)) < 0) error("%s", ebuf); #ifdef LIBSMI @@ -178,22 +185,13 @@ main(int argc, char **argv) opterr = 0; while ( - (op = getopt(argc, argv, "ac:deE:fF:i:lnNm:Opqr:Rs:StT:vw:xXY")) != EOF) + (op = getopt(argc, argv, "ac:deE:fF:i:lm:nNOpqr:Rs:StT:uvw:xXY")) != -1) switch (op) { case 'a': ++aflag; break; -#if 0 - case 'A': -#ifndef CRYPTO - warning("crypto code not compiled in"); -#endif - ahsecret = optarg; - break; -#endif - case 'c': cnt = atoi(optarg); if (cnt <= 0) @@ -209,7 +207,7 @@ main(int argc, char **argv) break; case 'E': -#ifndef CRYPTO +#ifndef HAVE_LIBCRYPTO warning("crypto code not compiled in"); #endif espsecret = optarg; @@ -275,11 +273,17 @@ main(int argc, char **argv) Rflag = 0; break; - case 's': - snaplen = atoi(optarg); - if (snaplen <= 0) + case 's': { + char *end; + + snaplen = strtol(optarg, &end, 0); + if (optarg == end || *end != '\0' + || snaplen < 0 || snaplen > 65535) error("invalid snaplen %s", optarg); + else if (snaplen == 0) + snaplen = 65535; break; + } case 'S': ++Sflag; @@ -302,10 +306,16 @@ main(int argc, char **argv) packettype = PT_RTCP; else if (strcasecmp(optarg, "snmp") == 0) packettype = PT_SNMP; + else if (strcasecmp(optarg, "cnfp") == 0) + packettype = PT_CNFP; else error("unknown packet type `%s'", optarg); break; + case 'u': + ++uflag; + break; + case 'v': ++vflag; break; @@ -319,7 +329,7 @@ main(int argc, char **argv) break; case 'X': - ++xflag; + ++xflag; ++Xflag; break; @@ -428,7 +438,7 @@ main(int argc, char **argv) } /* make a clean exit on interrupts */ -RETSIGTYPE +static RETSIGTYPE cleanup(int signo) { struct pcap_stat stat; @@ -450,55 +460,6 @@ cleanup(int signo) exit(0); } -/* dump the buffer in `emacs-hexl' style */ -void -default_print_hexl(const u_char *cp, unsigned int length, unsigned int offset) -{ - unsigned int i, j, jm; - int c; - char ln[128]; - - printf("\n"); - for (i = 0; i < length; i += 0x10) { - snprintf(ln, - sizeof(ln), - " %04x: ", (unsigned int)(i + offset)); - jm = length - i; - jm = jm > 16 ? 16 : jm; - - for (j = 0; j < jm; j++) { - if ((j % 2) == 1) - snprintf(ln + strlen(ln), - sizeof(ln) - strlen(ln), - "%02x ", (unsigned int)cp[i+j]); - else - snprintf(ln + strlen(ln), - sizeof(ln) - strlen(ln), - "%02x", (unsigned int)cp[i+j]); - } - for (; j < 16; j++) { - if ((j % 2) == 1) - snprintf(ln + strlen(ln), - sizeof(ln) - strlen(ln), - " "); - else - snprintf(ln + strlen(ln), - sizeof(ln) - strlen(ln), - " "); - } - - snprintf(ln + strlen(ln), sizeof(ln) - strlen(ln), " "); - for (j = 0; j < jm; j++) { - c = cp[i+j]; - c = isprint(c) ? c : '.'; - snprintf(ln + strlen(ln), - sizeof(ln) - strlen(ln), - "%c", c); - } - printf("%s\n", ln); - } -} - /* Like default_print() but data need not be aligned */ void default_print_unaligned(register const u_char *cp, register u_int length) @@ -534,7 +495,7 @@ default_print(register const u_char *bp, register u_int length) default_print_unaligned(bp, length); } -__dead void +static void usage(void) { extern char version[]; @@ -543,7 +504,7 @@ usage(void) (void)fprintf(stderr, "%s version %s\n", program_name, version); (void)fprintf(stderr, "libpcap version %s\n", pcap_version); (void)fprintf(stderr, -"Usage: %s [-adeflnNOpqStvxX] [-c count] [ -F file ]\n", program_name); +"Usage: %s [-adeflnNOpqStuvxX] [-c count] [ -F file ]\n", program_name); (void)fprintf(stderr, "\t\t[ -i interface ] [ -r file ] [ -s snaplen ]\n"); (void)fprintf(stderr, |