X-Git-Url: https://git.tcpdump.org/tcpdump/blobdiff_plain/4bec97f457e593be925e92fa28d73af6a57d81cf..8b4a9e519e41a5294f0b72c2bb0791750d1e8efe:/tcpdump.c?ds=sidebyside diff --git a/tcpdump.c b/tcpdump.c index a4dde2f3..5fa88e80 100644 --- a/tcpdump.c +++ b/tcpdump.c @@ -30,7 +30,7 @@ static const char copyright[] = "@(#) Copyright (c) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 2000\n\ The Regents of the University of California. All rights reserved.\n"; static const char rcsid[] = - "@(#) $Header: /tcpdump/master/tcpdump/tcpdump.c,v 1.193 2002-12-19 09:39:17 guy Exp $ (LBL)"; + "@(#) $Header: /tcpdump/master/tcpdump/tcpdump.c,v 1.199 2003-01-08 04:33:27 guy Exp $ (LBL)"; #endif /* @@ -83,6 +83,7 @@ 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; /* "unbuffered" output of dump files */ int uflag = 0; /* Print undecoded NFS handles */ int vflag; /* verbose */ int xflag; /* print packet in hex */ @@ -262,6 +263,30 @@ show_dlts_and_exit(pcap_t *pd) exit(0); } +/* + * Set up flags that might or might not be supported depending on the + * version of libpcap we're using. + */ +#ifdef WIN32 +#define B_FLAG "B:" +#define B_FLAG_USAGE " [ -B size ]" +#else /* WIN32 */ +#define B_FLAG +#define B_FLAG_USAGE +#endif /* WIN32 */ + +#ifdef HAVE_PCAP_FINDALLDEVS +#define D_FLAG "D" +#else +#define D_FLAG +#endif + +#ifdef HAVE_PCAP_DUMP_FLUSH +#define U_FLAG "U" +#else +#define U_FLAG +#endif + int main(int argc, char **argv) { @@ -313,15 +338,7 @@ main(int argc, char **argv) opterr = 0; while ( -#ifdef WIN32 - (op = getopt(argc, argv, "aAB:c:C:dDeE:fF:i:lLm:nNOpqr:Rs:StT:uvw:xXy:Y")) != -1) -#else /* WIN32 */ -#ifdef HAVE_PCAP_FINDALLDEVS - (op = getopt(argc, argv, "aAc:C:dDeE:fF:i:lLm:nNOpqr:Rs:StT:uvw:xXy:Y")) != -1) -#else /* HAVE_PCAP_FINDALLDEVS */ - (op = getopt(argc, argv, "aAc:C:deE:fF:i:lLm:nNOpqr:Rs:StT:uvw:xXy:Y")) != -1) -#endif /* HAVE_PCAP_FINDALLDEVS */ -#endif /* WIN32 */ + (op = getopt(argc, argv, "aA" B_FLAG "c:C:d" D_FLAG "eE:fF:i:lLm:nNOpqr:Rs:StT:u" U_FLAG "vw:xXy:Y")) != -1) switch (op) { case 'a': @@ -523,6 +540,12 @@ main(int argc, char **argv) ++uflag; break; +#ifdef HAVE_PCAP_DUMP_FLUSH + case 'U': + ++Uflag; + break; +#endif + case 'v': ++vflag; break; @@ -704,8 +727,14 @@ main(int argc, char **argv) #endif #ifndef WIN32 if (RFileName == NULL) { - (void)fprintf(stderr, "%s: listening on %s\n", - program_name, device); + if (!vflag && !WFileName) { + (void)fprintf(stderr, + "%s: verbose output suppressed, use -v or -vv for full protocol decode\n", + program_name); + } else + (void)fprintf(stderr, "%s: ", program_name); + (void)fprintf(stderr, "listening on %s, capture size %u bytes\n", + device, snaplen); (void)fflush(stderr); } #endif /* WIN32 */ @@ -817,6 +846,10 @@ dump_packet_and_trunc(u_char *user, const struct pcap_pkthdr *h, const u_char *s } pcap_dump((u_char *)dump_info->p, h, sp); +#ifdef HAVE_PCAP_DUMP_FLUSH + if (Uflag) + pcap_dump_flush(dump_info->p); +#endif --infodelay; if (infoprint) @@ -829,6 +862,10 @@ dump_packet(u_char *user, const struct pcap_pkthdr *h, const u_char *sp) ++infodelay; pcap_dump(user, h, sp); +#ifdef HAVE_PCAP_DUMP_FLUSH + if (Uflag) + pcap_dump_flush((pcap_dumper_t *)user); +#endif --infodelay; if (infoprint) @@ -970,15 +1007,7 @@ usage(void) (void)fprintf(stderr, "libpcap version %s\n", pcap_version); #endif /* WIN32 */ (void)fprintf(stderr, -#ifdef WIN32 -"Usage: %s [-aAdDeflLnNOpqRStuvxX] [-B size] [-c count] [ -C file_size ]\n", program_name); -#else /* WIN32 */ -#ifdef HAVE_PCAP_FINDALLDEVS -"Usage: %s [-aAdDeflLnNOpqRStuvxX] [-c count] [ -C file_size ]\n", program_name); -#else /* HAVE_PCAP_FINDALLDEVS */ -"Usage: %s [-aAdeflLnNOpqRStuvxX] [-c count] [ -C file_size ]\n", program_name); -#endif /* HAVE_PCAP_FINDALLDEVS */ -#endif /* WIN32 */ +"Usage: %s [-aAd" D_FLAG "eflLnNOpqRStu" U_FLAG "vxXy]" B_FLAG_USAGE " [-c count] [ -C file_size ]\n", program_name); (void)fprintf(stderr, "\t\t[ -E algo:secret ] [ -F file ] [ -i interface ] [ -r file ]\n"); (void)fprintf(stderr,