summaryrefslogtreecommitdiffstats
path: root/contrib/tcpdump/tcpdump.c
diff options
context:
space:
mode:
authorfenner <fenner@FreeBSD.org>2000-01-30 00:45:58 +0000
committerfenner <fenner@FreeBSD.org>2000-01-30 00:45:58 +0000
commit54c4a9c9f2aca2e032cbf41f5eb012e2e9628dd4 (patch)
treed25e1fd8c818bfce397a4c7e3f2c66229c814b2a /contrib/tcpdump/tcpdump.c
parent0c669098d078c88cf703bade2263846b39e01d83 (diff)
downloadFreeBSD-src-54c4a9c9f2aca2e032cbf41f5eb012e2e9628dd4.zip
FreeBSD-src-54c4a9c9f2aca2e032cbf41f5eb012e2e9628dd4.tar.gz
Virgin import of tcpdump.org tcpdump v3.5
Diffstat (limited to 'contrib/tcpdump/tcpdump.c')
-rw-r--r--contrib/tcpdump/tcpdump.c109
1 files changed, 79 insertions, 30 deletions
diff --git a/contrib/tcpdump/tcpdump.c b/contrib/tcpdump/tcpdump.c
index 14a12e7..7273866 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.c,v 1.129 97/06/13 13:10:11 leres Exp $ (LBL)";
+ "@(#) $Header: /tcpdump/master/tcpdump/tcpdump.c,v 1.138.2.1 2000/01/11 07:34:00 fenner Exp $ (LBL)";
#endif
/*
@@ -35,6 +35,10 @@ static const char rcsid[] =
* combined efforts of Van, Steve McCanne and Craig Leres of LBL.
*/
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
#include <sys/types.h>
#include <sys/time.h>
@@ -46,6 +50,10 @@ static const char rcsid[] =
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
+#include <ctype.h>
+
+#include <netinet/in_systm.h>
+#include <netinet/ip.h>
#include "interface.h"
#include "addrtoname.h"
@@ -62,10 +70,16 @@ 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 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;
@@ -92,6 +106,12 @@ struct printer {
static struct printer printers[] = {
{ ether_if_print, DLT_EN10MB },
{ ether_if_print, DLT_IEEE802 },
+#ifdef DLT_LANE8023
+ { lane_if_print, DLT_LANE8023 },
+#endif
+#ifdef DLT_CIP
+ { cip_if_print, DLT_CIP },
+#endif
{ sl_if_print, DLT_SLIP },
{ sl_bsdos_if_print, DLT_SLIP_BSDOS },
{ ppp_if_print, DLT_PPP },
@@ -100,6 +120,9 @@ static struct printer printers[] = {
{ null_if_print, DLT_NULL },
{ raw_if_print, DLT_RAW },
{ atm_if_print, DLT_ATM_RFC1483 },
+#ifdef DLT_CHDLC
+ { chdlc_if_print, DLT_CHDLC },
+#endif
{ NULL, 0 },
};
@@ -147,15 +170,28 @@ main(int argc, char **argv)
if (abort_on_misalignment(ebuf) < 0)
error("%s", ebuf);
+#ifdef LIBSMI
+ smiInit("tcpdump");
+#endif
+
opterr = 0;
while (
- (op = getopt(argc, argv, "ac:defF:i:lnNOpqr:s:StT:vw:xY")) != EOF)
+ (op = getopt(argc, argv, "ac:deE:fF:i:lnNm:Opqr:Rs:StT:vw:xXY")) != EOF)
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)
@@ -170,6 +206,13 @@ main(int argc, char **argv)
++eflag;
break;
+ case 'E':
+#ifndef CRYPTO
+ warning("crypto code not compiled in");
+#endif
+ espsecret = optarg;
+ break;
+
case 'f':
++fflag;
break;
@@ -198,6 +241,18 @@ main(int argc, char **argv)
++Nflag;
break;
+ case 'm':
+#ifdef LIBSMI
+ if (smiLoadModule(optarg) == 0) {
+ error("could not load MIB module %s", optarg);
+ }
+ sflag = 1;
+#else
+ (void)fprintf(stderr, "%s: ignoring option `-m %s' ",
+ program_name, optarg);
+ (void)fprintf(stderr, "(no libsmi support)\n");
+#endif
+
case 'O':
Oflag = 0;
break;
@@ -214,6 +269,10 @@ main(int argc, char **argv)
RFileName = optarg;
break;
+ case 'R':
+ Rflag = 0;
+ break;
+
case 's':
snaplen = atoi(optarg);
if (snaplen <= 0)
@@ -239,6 +298,8 @@ main(int argc, char **argv)
packettype = PT_RTP;
else if (strcasecmp(optarg, "rtcp") == 0)
packettype = PT_RTCP;
+ else if (strcasecmp(optarg, "snmp") == 0)
+ packettype = PT_SNMP;
else
error("unknown packet type `%s'", optarg);
break;
@@ -250,6 +311,16 @@ main(int argc, char **argv)
case 'w':
WFileName = optarg;
break;
+
+ case 'x':
+ ++xflag;
+ break;
+
+ case 'X':
+ ++xflag;
+ ++Xflag;
+ break;
+
#ifdef YYDEBUG
case 'Y':
{
@@ -259,10 +330,6 @@ main(int argc, char **argv)
}
break;
#endif
- case 'x':
- ++xflag;
- break;
-
default:
usage();
/* NOTREACHED */
@@ -388,6 +455,10 @@ default_print_unaligned(register const u_char *cp, register u_int length)
register u_int i, s;
register int nshorts;
+ if (Xflag) {
+ ascii_print(cp, length);
+ return;
+ }
nshorts = (u_int) length / sizeof(u_short);
i = 0;
while (--nshorts >= 0) {
@@ -405,33 +476,11 @@ default_print_unaligned(register const u_char *cp, register u_int length)
/*
* By default, print the packet out in hex.
- *
- * (BTW, please don't send us patches to print the packet out in ascii)
*/
void
default_print(register const u_char *bp, register u_int length)
{
- register const u_short *sp;
- register u_int i;
- register int nshorts;
-
- if ((long)bp & 1) {
- default_print_unaligned(bp, length);
- return;
- }
- sp = (u_short *)bp;
- nshorts = (u_int) length / sizeof(u_short);
- i = 0;
- while (--nshorts >= 0) {
- if ((i++ % 8) == 0)
- (void)printf("\n\t\t\t");
- (void)printf(" %04x", ntohs(*sp++));
- }
- if (length & 1) {
- if ((i % 8) == 0)
- (void)printf("\n\t\t\t");
- (void)printf(" %02x", *(u_char *)sp);
- }
+ default_print_unaligned(bp, length);
}
__dead void
@@ -443,7 +492,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 [-adeflnNOpqStvx] [-c count] [ -F file ]\n", program_name);
+"Usage: %s [-adeflnNOpqStvxX] [-c count] [ -F file ]\n", program_name);
(void)fprintf(stderr,
"\t\t[ -i interface ] [ -r file ] [ -s snaplen ]\n");
(void)fprintf(stderr,
OpenPOWER on IntegriCloud