summaryrefslogtreecommitdiffstats
path: root/contrib/tcpdump/tcpdump.c
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/tcpdump/tcpdump.c')
-rw-r--r--contrib/tcpdump/tcpdump.c498
1 files changed, 104 insertions, 394 deletions
diff --git a/contrib/tcpdump/tcpdump.c b/contrib/tcpdump/tcpdump.c
index 82bf746..4314a1a 100644
--- a/contrib/tcpdump/tcpdump.c
+++ b/contrib/tcpdump/tcpdump.c
@@ -30,9 +30,11 @@ static const char copyright[] _U_ =
"@(#) 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[] _U_ =
- "@(#) $Header: /tcpdump/master/tcpdump/tcpdump.c,v 1.253 2005/01/27 18:30:36 hannes Exp $ (LBL)";
+ "@(#) $Header: /tcpdump/master/tcpdump/tcpdump.c,v 1.216.2.10 2004/03/17 19:47:48 guy Exp $ (LBL)";
#endif
+/* $FreeBSD$ */
+
/*
* tcpdump - monitor tcp/ip traffic on an ethernet.
*
@@ -56,22 +58,12 @@ extern int SIZE_BUF;
#define uint UINT
#endif /* WIN32 */
-#ifdef HAVE_SMI_H
-#include <smi.h>
-#endif
-
#include <pcap.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
-#ifndef WIN32
-#include <pwd.h>
-#include <grp.h>
-#include <errno.h>
-#endif /* WIN32 */
-#include "netdissect.h"
#include "interface.h"
#include "addrtoname.h"
#include "machdep.h"
@@ -79,19 +71,33 @@ extern int SIZE_BUF;
#include "gmt2local.h"
#include "pcap-missing.h"
-netdissect_options Gndo;
-netdissect_options *gndo = &Gndo;
-
-/*
- * Define the maximum number of files for the -C flag, and how many
- * characters can be added to a filename for the -C flag (which
- * should be enough to handle MAX_CFLAG - 1).
- */
-#define MAX_CFLAG 1000000
-#define MAX_CFLAG_CHARS 6
-
int dflag; /* print filter code */
+int eflag; /* print ethernet header */
+int fflag; /* don't translate "foreign" IP address */
int Lflag; /* list available data link types and exit */
+int nflag; /* leave addresses as numbers */
+int Nflag; /* remove domains from printed host names */
+int Oflag = 1; /* run filter code optimizer */
+int pflag; /* don't go promiscuous */
+int qflag; /* quick (shorter) output */
+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 */
+int Xflag; /* print packet in ascii as well as hex */
+off_t Cflag = 0; /* rotate dump files after this many bytes */
+int Aflag = 0; /* print packet only in ascii observing LF, CR, TAB, SPACE */
+int dlt = -1; /* if != -1, ask libpcap for the DLT it names */
+
+const char *dlt_name = NULL;
+
+char *espsecret = NULL; /* ESP secret key */
+
+int packettype;
static int infodelay;
static int infoprint;
@@ -106,28 +112,19 @@ static void usage(void) __attribute__((noreturn));
static void show_dlts_and_exit(pcap_t *pd) __attribute__((noreturn));
static void print_packet(u_char *, const struct pcap_pkthdr *, const u_char *);
-static void ndo_default_print(netdissect_options *, const u_char *, u_int);
static void dump_packet_and_trunc(u_char *, const struct pcap_pkthdr *, const u_char *);
static void dump_packet(u_char *, const struct pcap_pkthdr *, const u_char *);
-static void droproot(const char *, const char *);
-static void ndo_error(netdissect_options *ndo, const char *fmt, ...);
-static void ndo_warning(netdissect_options *ndo, const char *fmt, ...);
#ifdef SIGINFO
RETSIGTYPE requestinfo(int);
#endif
-#if defined(USE_WIN32_MM_TIMER)
- #include <MMsystem.h>
- static UINT timer_id;
- static void CALLBACK verbose_stats_dump(UINT, UINT, DWORD_PTR, DWORD_PTR, DWORD_PTR);
-#elif defined(HAVE_ALARM)
- static void verbose_stats_dump(int sig);
-#endif
-
static void info(int);
static u_int packets_captured;
+/* Length of saved portion of packet. */
+int snaplen = DEFAULT_SNAPLEN;
+
typedef u_int (*if_printer)(const struct pcap_pkthdr *, const u_char *);
struct printer {
@@ -156,9 +153,6 @@ static struct printer printers[] = {
{ sl_bsdos_if_print, DLT_SLIP_BSDOS },
#endif
{ ppp_if_print, DLT_PPP },
-#ifdef DLT_PPP_WITHDIRECTION
- { ppp_if_print, DLT_PPP_WITHDIRECTION },
-#endif
#ifdef DLT_PPP_BSDOS
{ ppp_bsdos_if_print, DLT_PPP_BSDOS },
#endif
@@ -214,24 +208,9 @@ static struct printer printers[] = {
#ifdef DLT_ENC
{ enc_if_print, DLT_ENC },
#endif
-#ifdef DLT_SYMANTEC_FIREWALL
- { symantec_if_print, DLT_SYMANTEC_FIREWALL },
-#endif
#ifdef DLT_APPLE_IP_OVER_IEEE1394
{ ap1394_if_print, DLT_APPLE_IP_OVER_IEEE1394 },
#endif
-#ifdef DLT_JUNIPER_ATM1
- { juniper_atm1_print, DLT_JUNIPER_ATM1 },
-#endif
-#ifdef DLT_JUNIPER_ATM2
- { juniper_atm2_print, DLT_JUNIPER_ATM2 },
-#endif
-#ifdef DLT_JUNIPER_MLFR
- { juniper_mlfr_print, DLT_JUNIPER_MLFR },
-#endif
-#ifdef DLT_JUNIPER_MLPPP
- { juniper_mlppp_print, DLT_JUNIPER_MLPPP },
-#endif
{ NULL, 0 },
};
@@ -313,12 +292,6 @@ show_dlts_and_exit(pcap_t *pd)
#endif /* WIN32 */
#ifdef HAVE_PCAP_FINDALLDEVS
-#ifndef HAVE_PCAP_IF_T
-#undef HAVE_PCAP_FINDALLDEVS
-#endif
-#endif
-
-#ifdef HAVE_PCAP_FINDALLDEVS
#define D_FLAG "D"
#else
#define D_FLAG
@@ -330,89 +303,12 @@ show_dlts_and_exit(pcap_t *pd)
#define U_FLAG
#endif
-#ifndef WIN32
-/* Drop root privileges and chroot if necessary */
-static void
-droproot(const char *username, const char *chroot_dir)
-{
- struct passwd *pw = NULL;
-
- if (chroot_dir && !username) {
- fprintf(stderr, "tcpdump: Chroot without dropping root is insecure\n");
- exit(1);
- }
-
- pw = getpwnam(username);
- if (pw) {
- if (chroot_dir) {
- if (chroot(chroot_dir) != 0 || chdir ("/") != 0) {
- fprintf(stderr, "tcpdump: Couldn't chroot/chdir to '%.64s': %s\n",
- chroot_dir, pcap_strerror(errno));
- exit(1);
- }
- }
- if (initgroups(pw->pw_name, pw->pw_gid) != 0 ||
- setgid(pw->pw_gid) != 0 || setuid(pw->pw_uid) != 0) {
- fprintf(stderr, "tcpdump: Couldn't change to '%.32s' uid=%lu gid=%lu: %s\n",
- username,
- (unsigned long)pw->pw_uid,
- (unsigned long)pw->pw_gid,
- pcap_strerror(errno));
- exit(1);
- }
- }
- else {
- fprintf(stderr, "tcpdump: Couldn't find user '%.32s'\n",
- username);
- exit(1);
- }
-}
-#endif /* WIN32 */
-
-static int
-getWflagChars(int x)
-{
- int c = 0;
-
- x -= 1;
- while (x > 0) {
- c += 1;
- x /= 10;
- }
-
- return c;
-}
-
-
-static void
-MakeFilename(char *buffer, char *orig_name, int cnt, int max_chars)
-{
- if (cnt == 0 && max_chars == 0)
- strcpy(buffer, orig_name);
- else
- sprintf(buffer, "%s%0*d", orig_name, max_chars, cnt);
-}
-
-static int tcpdump_printf(netdissect_options *ndo _U_,
- const char *fmt, ...)
-{
-
- va_list args;
- int ret;
-
- va_start(args, fmt);
- ret=vfprintf(stdout, fmt, args);
- va_end(args);
-
- return ret;
-}
-
int
main(int argc, char **argv)
{
register int cnt, op, i;
bpf_u_int32 localnet, netmask;
- register char *cp, *infile, *cmdbuf, *device, *RFileName, *WFileName, *WFileNameAlt;
+ register char *cp, *infile, *cmdbuf, *device, *RFileName, *WFileName;
pcap_handler callback;
int type;
struct bpf_program fcode;
@@ -423,8 +319,6 @@ main(int argc, char **argv)
struct dump_info dumpinfo;
u_char *pcap_userdata;
char ebuf[PCAP_ERRBUF_SIZE];
- char *username = NULL;
- char *chroot_dir = NULL;
#ifdef HAVE_PCAP_FINDALLDEVS
pcap_if_t *devpointer;
int devnum;
@@ -435,15 +329,6 @@ main(int argc, char **argv)
if(wsockinit() != 0) return 1;
#endif /* WIN32 */
- gndo->ndo_Oflag=1;
- gndo->ndo_Rflag=1;
- gndo->ndo_dlt=-1;
- gndo->ndo_default_print=ndo_default_print;
- gndo->ndo_printf=tcpdump_printf;
- gndo->ndo_error=ndo_error;
- gndo->ndo_warning=ndo_warning;
- gndo->ndo_snaplen = DEFAULT_SNAPLEN;
-
cnt = -1;
device = NULL;
infile = NULL;
@@ -463,7 +348,7 @@ main(int argc, char **argv)
opterr = 0;
while (
- (op = getopt(argc, argv, "aA" B_FLAG "c:C:d" D_FLAG "eE:fF:i:lLm:M:nNOpqr:Rs:StT:u" U_FLAG "vw:W:xXy:YZ:")) != -1)
+ (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':
@@ -528,7 +413,7 @@ main(int argc, char **argv)
#ifndef HAVE_LIBCRYPTO
warning("crypto code not compiled in");
#endif
- gndo->ndo_espsecret = optarg;
+ espsecret = optarg;
break;
case 'f':
@@ -616,14 +501,6 @@ main(int argc, char **argv)
#endif
break;
- case 'M':
- /* TCP-MD5 shared secret */
-#ifndef HAVE_LIBCRYPTO
- warning("crypto code not compiled in");
-#endif
- tcpmd5secret = optarg;
- break;
-
case 'O':
Oflag = 0;
break;
@@ -661,7 +538,7 @@ main(int argc, char **argv)
break;
case 't':
- ++tflag;
+ --tflag;
break;
case 'T':
@@ -705,27 +582,20 @@ main(int argc, char **argv)
WFileName = optarg;
break;
- case 'W':
- Wflag = atoi(optarg);
- if (Wflag < 0)
- error("invalid number of output files %s", optarg);
- WflagChars = getWflagChars(Wflag);
- break;
-
case 'x':
++xflag;
break;
case 'X':
+ ++xflag;
++Xflag;
break;
case 'y':
- gndo->ndo_dltname = optarg;
- gndo->ndo_dlt =
- pcap_datalink_name_to_val(gndo->ndo_dltname);
- if (gndo->ndo_dlt < 0)
- error("invalid data link type %s", gndo->ndo_dltname);
+ dlt_name = optarg;
+ dlt = pcap_datalink_name_to_val(dlt_name);
+ if (dlt < 0)
+ error("invalid data link type %s", dlt_name);
break;
#if defined(HAVE_PCAP_DEBUG) || defined(HAVE_YYDEBUG)
@@ -742,55 +612,13 @@ main(int argc, char **argv)
}
break;
#endif
- case 'Z':
- if (optarg) {
- username = strdup(optarg);
- }
- else {
- usage();
- /* NOTREACHED */
- }
- break;
-
default:
usage();
/* NOTREACHED */
}
- switch (tflag) {
-
- case 0: /* Default */
- case 4: /* Default + Date*/
+ if (tflag > 0)
thiszone = gmt2local(0);
- break;
-
- case 1: /* No time stamp */
- case 2: /* Unix timeval style */
- case 3: /* Microseconds since previous packet */
- break;
-
- default: /* Not supported */
- error("only -t, -tt, -ttt, and -tttt are supported");
- break;
- }
-
-#ifdef WITH_CHROOT
- /* if run as root, prepare for chrooting */
- if (getuid() == 0 || geteuid() == 0) {
- /* future extensibility for cmd-line arguments */
- if (!chroot_dir)
- chroot_dir = WITH_CHROOT;
- }
-#endif
-
-#ifdef WITH_USER
- /* if run as root, prepare for dropping root privileges */
- if (getuid() == 0 || geteuid() == 0) {
- /* Run with '-Z root' to restore old behaviour */
- if (!username)
- username = WITH_USER;
- }
-#endif
if (RFileName != NULL) {
int dlt;
@@ -806,8 +634,7 @@ main(int argc, char **argv)
* people's trace files (especially if we're set-UID
* root).
*/
- if (setgid(getgid()) != 0 || setuid(getuid()) != 0 )
- fprintf(stderr, "Warning: setgid/setuid failed !\n");
+ setuid(getuid());
#endif /* WIN32 */
pd = pcap_open_offline(RFileName, ebuf);
if (pd == NULL)
@@ -834,8 +661,11 @@ main(int argc, char **argv)
error("%s", ebuf);
}
#ifdef WIN32
- if(strlen(device) == 1) //we assume that an ASCII string is always longer than 1 char
- { //a Unicode string has a \0 as second byte (so strlen() is 1)
+ if(IsTextUnicode(device,
+ wcslen((short*)device), // Device always ends with a double \0, so this way to determine its
+ // length should be always valid
+ NULL))
+ {
fprintf(stderr, "%s: listening on %ws\n", program_name, device);
}
else
@@ -851,24 +681,11 @@ main(int argc, char **argv)
error("%s", ebuf);
else if (*ebuf)
warning("%s", ebuf);
- /*
- * Let user own process after socket has been opened.
- */
-#ifndef WIN32
- if (setgid(getgid()) != 0 || setuid(getuid()) != 0)
- fprintf(stderr, "Warning: setgid/setuid failed !\n");
-#endif /* WIN32 */
-#ifdef WIN32
- if(UserBufferSize != 1000000)
- if(pcap_setbuff(pd, UserBufferSize)==-1){
- error("%s", pcap_geterr(pd));
- }
-#endif /* WIN32 */
if (Lflag)
show_dlts_and_exit(pd);
- if (gndo->ndo_dlt >= 0) {
+ if (dlt >= 0) {
#ifdef HAVE_PCAP_SET_DATALINK
- if (pcap_set_datalink(pd, gndo->ndo_dlt) < 0)
+ if (pcap_set_datalink(pd, dlt) < 0)
error("%s", pcap_geterr(pd));
#else
/*
@@ -876,13 +693,13 @@ main(int argc, char **argv)
* data link type, so we only let them
* set it to what it already is.
*/
- if (gndo->ndo_dlt != pcap_datalink(pd)) {
+ if (dlt != pcap_datalink(pd)) {
error("%s is not one of the DLTs supported by this device\n",
- gndo->ndo_dltname);
+ dlt_name);
}
#endif
(void)fprintf(stderr, "%s: data link type %s\n",
- program_name, gndo->ndo_dltname);
+ program_name, dlt_name);
(void)fflush(stderr);
}
i = pcap_snapshot(pd);
@@ -895,6 +712,12 @@ main(int argc, char **argv)
netmask = 0;
warning("%s", ebuf);
}
+ /*
+ * Let user own process after socket has been opened.
+ */
+#ifndef WIN32
+ setuid(getuid());
+#endif /* WIN32 */
}
if (infile)
cmdbuf = read_infile(infile);
@@ -924,13 +747,7 @@ main(int argc, char **argv)
if (pcap_setfilter(pd, &fcode) < 0)
error("%s", pcap_geterr(pd));
if (WFileName) {
- pcap_dumper_t *p;
-
- WFileNameAlt = (char *)malloc(strlen(WFileName) + MAX_CFLAG_CHARS + 1);
- if (WFileNameAlt == NULL)
- error("malloc of WFileNameAlt");
- MakeFilename(WFileNameAlt, WFileName, 0, WflagChars);
- p = pcap_dump_open(pd, WFileNameAlt);
+ pcap_dumper_t *p = pcap_dump_open(pd, WFileName);
if (p == NULL)
error("%s", pcap_geterr(pd));
if (Cflag != 0) {
@@ -947,46 +764,18 @@ main(int argc, char **argv)
type = pcap_datalink(pd);
printinfo.printer = lookup_printer(type);
if (printinfo.printer == NULL) {
- gndo->ndo_dltname = pcap_datalink_val_to_name(type);
- if (gndo->ndo_dltname != NULL)
- error("unsupported data link type %s",
- gndo->ndo_dltname);
+ dlt_name = pcap_datalink_val_to_name(type);
+ if (dlt_name != NULL)
+ error("unsupported data link type %s", dlt_name);
else
error("unsupported data link type %d", type);
}
callback = print_packet;
pcap_userdata = (u_char *)&printinfo;
}
-#ifndef WIN32
- /*
- * We cannot do this earlier, because we want to be able to open
- * the file (if done) for writing before giving up permissions.
- */
- if (getuid() == 0 || geteuid() == 0) {
- if (username || chroot_dir)
- droproot(username, chroot_dir);
- }
-#endif /* WIN32 */
#ifdef SIGINFO
(void)setsignal(SIGINFO, requestinfo);
#endif
-
- if (vflag > 0 && WFileName) {
- /*
- * When capturing to a file, "-v" means tcpdump should,
- * every 10 secodns, "v"erbosely report the number of
- * packets captured.
- */
-#ifdef USE_WIN32_MM_TIMER
- /* call verbose_stats_dump() each 1000 +/-100msec */
- timer_id = timeSetEvent(1000, 100, verbose_stats_dump, 0, TIME_PERIODIC);
- setvbuf(stderr, NULL, _IONBF, 0);
-#elif defined(HAVE_ALARM)
- (void)setsignal(SIGALRM, verbose_stats_dump);
- alarm(1);
-#endif
- }
-
#ifndef WIN32
if (RFileName == NULL) {
int dlt;
@@ -1049,14 +838,6 @@ main(int argc, char **argv)
static RETSIGTYPE
cleanup(int signo _U_)
{
-#ifdef USE_WIN32_MM_TIMER
- if (timer_id)
- timeKillEvent(timer_id);
- timer_id = 0;
-#elif defined(HAVE_ALARM)
- alarm(0);
-#endif
-
#ifdef HAVE_PCAP_BREAKLOOP
/*
* We have "pcap_breakloop()"; use it, so that we do as little
@@ -1114,9 +895,37 @@ info(register int verbose)
}
static void
+reverse(char *s)
+{
+ int i, j, c;
+
+ for (i = 0, j = strlen(s) - 1; i < j; i++, j--) {
+ c = s[i];
+ s[i] = s[j];
+ s[j] = c;
+ }
+}
+
+
+static void
+swebitoa(unsigned int n, char *s)
+{
+ unsigned int i;
+
+ i = 0;
+ do {
+ s[i++] = n % 10 + '0';
+ } while ((n /= 10) > 0);
+
+ s[i] = '\0';
+ reverse(s);
+}
+
+static void
dump_packet_and_trunc(u_char *user, const struct pcap_pkthdr *h, const u_char *sp)
{
struct dump_info *dump_info;
+ static uint cnt = 2;
char *name;
++packets_captured;
@@ -1135,18 +944,14 @@ dump_packet_and_trunc(u_char *user, const struct pcap_pkthdr *h, const u_char *s
* Close the current file and open a new one.
*/
pcap_dump_close(dump_info->p);
- Cflag_count++;
- if (Wflag > 0) {
- if (Cflag_count >= Wflag)
- Cflag_count = 0;
- } else {
- if (Cflag_count >= MAX_CFLAG)
- error("too many output files");
- }
- name = (char *)malloc(strlen(dump_info->WFileName) + MAX_CFLAG_CHARS + 1);
+ if (cnt >= 1000)
+ error("too many output files");
+ name = (char *) malloc(strlen(dump_info->WFileName) + 4);
if (name == NULL)
error("dump_packet_and_trunc: malloc");
- MakeFilename(name, dump_info->WFileName, Cflag_count, WflagChars);
+ strcpy(name, dump_info->WFileName);
+ swebitoa(cnt, name + strlen(dump_info->WFileName));
+ cnt++;
dump_info->p = pcap_dump_open(dump_info->pd, name);
free(name);
if (dump_info->p == NULL)
@@ -1211,7 +1016,7 @@ print_packet(u_char *user, const struct pcap_pkthdr *h, const u_char *sp)
/*
* Include the link-layer header.
*/
- hex_print("\n\t", sp, h->caplen);
+ default_print(sp, h->caplen);
} else {
/*
* Don't include the link-layer header - and if
@@ -1219,26 +1024,7 @@ print_packet(u_char *user, const struct pcap_pkthdr *h, const u_char *sp)
* print nothing.
*/
if (h->caplen > hdrlen)
- hex_print("\n\t", sp + hdrlen,
- h->caplen - hdrlen);
- }
- } else if (Xflag) {
- /*
- * Print the raw packet data.
- */
- if (Xflag > 1) {
- /*
- * Include the link-layer header.
- */
- ascii_print("\n\t", sp, h->caplen);
- } else {
- /*
- * Don't include the link-layer header - and if
- * we have nothing past the link-layer header,
- * print nothing.
- */
- if (h->caplen > hdrlen)
- ascii_print("\n\t", sp + hdrlen,
+ default_print(sp + hdrlen,
h->caplen - hdrlen);
}
}
@@ -1270,26 +1056,18 @@ print_packet(u_char *user, const struct pcap_pkthdr *h, const u_char *sp)
* "Wpcap_version" information on Windows.
*/
char WDversion[]="current-cvs.tcpdump.org";
-#if !defined(HAVE_GENERATED_VERSION)
char version[]="current-cvs.tcpdump.org";
-#endif
char pcap_version[]="current-cvs.tcpdump.org";
- char Wpcap_version[]="3.1";
+ char Wpcap_version[]="3.0 alpha";
#endif
/*
* By default, print the specified data out in hex.
*/
-static void
-ndo_default_print(netdissect_options *ndo _U_, const u_char *bp, u_int length)
-{
- ascii_print("\n\t", bp, length); /* pass on lf and identation string */
-}
-
void
-default_print(const u_char *bp, u_int length)
+default_print(register const u_char *bp, register u_int length)
{
- ndo_default_print(gndo, bp, length);
+ ascii_print("\n\t", bp, length); /* pass on lf and identation string */
}
#ifdef SIGINFO
@@ -1302,29 +1080,6 @@ RETSIGTYPE requestinfo(int signo _U_)
}
#endif
-/*
- * Called once each second in verbose mode while dumping to file
- */
-#ifdef USE_WIN32_MM_TIMER
-void CALLBACK verbose_stats_dump (UINT timer_id _U_, UINT msg _U_, DWORD_PTR arg _U_,
- DWORD_PTR dw1 _U_, DWORD_PTR dw2 _U_)
-{
- struct pcap_stat stat;
-
- if (infodelay == 0 && pcap_stats(pd, &stat) >= 0)
- fprintf(stderr, "Got %u\r", packets_captured);
-}
-#elif defined(HAVE_ALARM)
-static void verbose_stats_dump(int sig _U_)
-{
- struct pcap_stat stat;
-
- if (infodelay == 0 && pcap_stats(pd, &stat) >= 0)
- fprintf(stderr, "Got %u\r", packets_captured);
- alarm(1);
-}
-#endif
-
static void
usage(void)
{
@@ -1338,12 +1093,8 @@ usage(void)
#endif /* HAVE_PCAP_LIB_VERSION */
#ifdef HAVE_PCAP_LIB_VERSION
-#ifdef WIN32
- (void)fprintf(stderr, "%s version %s, based on tcpdump version %s\n", program_name, WDversion, version);
-#else /* WIN32 */
(void)fprintf(stderr, "%s version %s\n", program_name, version);
-#endif /* WIN32 */
- (void)fprintf(stderr, "%s\n",pcap_lib_version());
+ (void)fprintf(stderr, "%s\n", pcap_lib_version());
#else /* HAVE_PCAP_LIB_VERSION */
#ifdef WIN32
(void)fprintf(stderr, "%s version %s, based on tcpdump version %s\n", program_name, WDversion, version);
@@ -1356,51 +1107,10 @@ usage(void)
(void)fprintf(stderr,
"Usage: %s [-aAd" D_FLAG "eflLnNOpqRStu" U_FLAG "vxX]" B_FLAG_USAGE " [-c count] [ -C file_size ]\n", program_name);
(void)fprintf(stderr,
-"\t\t[ -E algo:secret ] [ -F file ] [ -i interface ] [ -M secret ]\n");
- (void)fprintf(stderr,
-"\t\t[ -r file ] [ -s snaplen ] [ -T type ] [ -w file ]\n");
+"\t\t[ -E algo:secret ] [ -F file ] [ -i interface ] [ -r file ]\n");
(void)fprintf(stderr,
-"\t\t[ -W filecount ] [ -y datalinktype ] [ -Z user ]\n");
+"\t\t[ -s snaplen ] [ -T type ] [ -w file ] [ -y datalinktype ]\n");
(void)fprintf(stderr,
"\t\t[ expression ]\n");
exit(1);
}
-
-
-
-/* VARARGS */
-static void
-ndo_error(netdissect_options *ndo _U_, const char *fmt, ...)
-{
- va_list ap;
-
- (void)fprintf(stderr, "%s: ", program_name);
- va_start(ap, fmt);
- (void)vfprintf(stderr, fmt, ap);
- va_end(ap);
- if (*fmt) {
- fmt += strlen(fmt);
- if (fmt[-1] != '\n')
- (void)fputc('\n', stderr);
- }
- exit(1);
- /* NOTREACHED */
-}
-
-/* VARARGS */
-static void
-ndo_warning(netdissect_options *ndo _U_, const char *fmt, ...)
-{
- va_list ap;
-
- (void)fprintf(stderr, "%s: WARNING: ", program_name);
- va_start(ap, fmt);
- (void)vfprintf(stderr, fmt, ap);
- va_end(ap);
- if (*fmt) {
- fmt += strlen(fmt);
- if (fmt[-1] != '\n')
- (void)fputc('\n', stderr);
- }
-}
-
OpenPOWER on IntegriCloud