summaryrefslogtreecommitdiff
path: root/usr.sbin/tcpdump/tcpdump.c
diff options
context:
space:
mode:
authorDamien Miller <djm@cvs.openbsd.org>2008-04-18 21:35:12 +0000
committerDamien Miller <djm@cvs.openbsd.org>2008-04-18 21:35:12 +0000
commitade8c4cfcd982e74d7424cee174e1dbee07b073f (patch)
tree6277f946f3ce2b2d81564e022ce99ad3efa972ae /usr.sbin/tcpdump/tcpdump.c
parent983ca28ce3a05bfdc4449230df279a94e44e81d5 (diff)
add filtering on direction; ok mpf@ deraadt@ feedback jmc@
Diffstat (limited to 'usr.sbin/tcpdump/tcpdump.c')
-rw-r--r--usr.sbin/tcpdump/tcpdump.c26
1 files changed, 18 insertions, 8 deletions
diff --git a/usr.sbin/tcpdump/tcpdump.c b/usr.sbin/tcpdump/tcpdump.c
index f5dfcead941..37031cd6b0c 100644
--- a/usr.sbin/tcpdump/tcpdump.c
+++ b/usr.sbin/tcpdump/tcpdump.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: tcpdump.c,v 1.59 2007/10/07 16:41:05 deraadt Exp $ */
+/* $OpenBSD: tcpdump.c,v 1.60 2008/04/18 21:35:11 djm Exp $ */
/*
* Copyright (c) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997
@@ -26,7 +26,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[] =
- "@(#) $Id: tcpdump.c,v 1.59 2007/10/07 16:41:05 deraadt Exp $ (LBL)";
+ "@(#) $Id: tcpdump.c,v 1.60 2008/04/18 21:35:11 djm Exp $ (LBL)";
#endif
/*
@@ -221,7 +221,7 @@ main(int argc, char **argv)
pcap_handler printer;
struct bpf_program *fcode;
u_char *pcap_userdata;
- u_int dlt = (u_int) -1;
+ u_int dirfilt = 0, dlt = (u_int) -1;
if ((cp = strrchr(argv[0], '/')) != NULL)
program_name = cp + 1;
@@ -237,7 +237,7 @@ main(int argc, char **argv)
opterr = 0;
while ((op = getopt(argc, argv,
- "ac:deE:fF:i:IlLnNOopqr:s:StT:vw:xXy:Y")) != -1)
+ "ac:D:deE:fF:i:IlLnNOopqr:s:StT:vw:xXy:Y")) != -1)
switch (op) {
case 'a':
@@ -250,6 +250,15 @@ main(int argc, char **argv)
error("invalid packet count %s", optarg);
break;
+ case 'D':
+ if (strcasecmp(optarg, "in") == 0)
+ dirfilt = BPF_DIRECTION_OUT;
+ else if (strcasecmp(optarg, "out") == 0)
+ dirfilt = BPF_DIRECTION_IN;
+ else
+ error("invalid traffic direction %s", optarg);
+ break;
+
case 'd':
++dflag;
break;
@@ -422,7 +431,8 @@ main(int argc, char **argv)
if (device == NULL)
error("%s", ebuf);
}
- pd = priv_pcap_live(device, snaplen, !pflag, 1000, ebuf, dlt);
+ pd = priv_pcap_live(device, snaplen, !pflag, 1000, ebuf,
+ dlt, dirfilt);
if (pd == NULL)
error("%s", ebuf);
@@ -669,11 +679,11 @@ __dead void
usage(void)
{
(void)fprintf(stderr,
-"Usage: %s [-adefILlNnOopqStvXx] [-c count] [-E [espalg:]espkey] [-F file]\n",
+"Usage: %s [-adefILlNnOopqStvXx] [-c count] [-D direction]\n",
program_name);
(void)fprintf(stderr,
-"\t [-i interface] [-r file] [-s snaplen] [-T type] [-w file]\n");
+"\t [-E [espalg:]espkey] [-F file] [-i interface] [-r file]\n");
(void)fprintf(stderr,
-"\t [-y datalinktype] [expression]\n");
+"\t [-s snaplen] [-T type] [-w file] [-y datalinktype] [expression]\n");
exit(1);
}