26 "@(#) Copyright (c) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 2000\n\
27 The Regents of the University of California. All rights reserved.\n";
44 #include <sys/types.h>
93 #define COMMAND_OPTIONS B_OPTION "i:mn" R_OPTION S_OPTION "t:"
94 #define USAGE_OPTIONS "-" B_OPTION "mn" R_OPTION S_OPTION
97 main(
int argc,
char **argv)
100 register char *cp, *cmdbuf, *
device;
118 if ((cp = strrchr(argv[0],
'/')) != NULL)
157 if (p ==
optarg || *p !=
'\0') {
158 error(
"Timeout value \"%s\" is not a number",
163 error(
"Timeout value %ld is negative", longarg);
166 if (longarg > INT_MAX) {
167 error(
"Timeout value %ld is too large (> %d)",
171 timeout = (int)longarg;
184 error(
"no interfaces available for capture");
195 struct sigaction action;
198 sigemptyset(&action.sa_mask);
203 action.sa_flags = sigrestart ? SA_RESTART : 0;
205 if (sigaction(SIGINT, &action, NULL) == -1)
206 error(
"Can't catch SIGINT: %s\n",
216 error(
"%s: pcap_set_snaplen failed: %s",
221 error(
"%s: pcap_set_immediate_mode failed: %s",
226 error(
"%s: pcap_set_timeout failed: %s",
235 }
else if (status > 0) {
256 error(
"pcap_setnonblock failed: %s", ebuf);
261 (u_char *)&packet_count);
265 printf(
"%d packets seen, %d packets counted after pcap_dispatch returns\n",
266 status, packet_count);
269 printf(
"%d ps_recv, %d ps_drop, %d ps_ifdrop\n",
280 printf(
"Broken out of loop from SIGINT handler\n");
282 (void)fflush(stdout);
287 (void)fprintf(stderr,
"%s: pcap_dispatch: %s\n",
293 exit(status == -1 ? 1 : 0);
299 int *counterp = (
int *)user;
307 (void)fprintf(stderr,
"Usage: %s [ " USAGE_OPTIONS " ] [ -i interface ] [ -t timeout] [expression]\n",
320 (void)vfprintf(stderr, fmt, ap);
325 (void)fputc(
'\n', stderr);
339 (void)vfprintf(stderr, fmt, ap);
344 (void)fputc(
'\n', stderr);
355 register size_t len = 0;
364 len += strlen(*p++) + 1;
366 buf = (
char *)malloc(len);
368 error(
"copy_argv: malloc");
372 while ((src = *p++) != NULL) {
373 while ((*dst++ = *src++) !=
'\0')
static void warning(const char *,...)
static void error(const char *,...)
static char * program_name
static const char copyright[]
static char * copy_argv(char **)
static void sigint_handler(int signum)
int main(int argc, char **argv)
static void countme(u_char *, const struct pcap_pkthdr *, const u_char *)
#define PCAP_PRINTFLIKE(x, y)
int pcap_compile(pcap_t *p, struct bpf_program *program, const char *buf, int optimize, bpf_u_int32 mask)
void pcap_freecode(struct bpf_program *program)
int getopt(int, char *const *, const char *)
long strtol(const char *, char **, int)
int printf(const char *,...)
int pcap_lookupnet(const char *device, bpf_u_int32 *localnet, bpf_u_int32 *netmask, char *errbuf)
int pcap_set_snaplen(pcap_t *p, int snaplen)
int pcap_set_timeout(pcap_t *p, int timeout_ms)
void pcap_breakloop(pcap_t *p)
void pcap_freealldevs(pcap_if_t *alldevs)
int pcap_activate(pcap_t *p)
int pcap_setnonblock(pcap_t *p, int nonblock, char *errbuf)
int pcap_dispatch(pcap_t *p, int cnt, pcap_handler callback, u_char *user)
int pcap_findalldevs(pcap_if_t **alldevsp, char *errbuf)
char * pcap_geterr(pcap_t *p)
const char * pcap_statustostr(int errnum)
pcap_t * pcap_create(const char *device, char *errbuf)
void pcap_close(pcap_t *p)
int pcap_stats(pcap_t *p, struct pcap_stat *ps)
int pcap_set_immediate_mode(pcap_t *p, int immediate)
int pcap_setfilter(pcap_t *p, struct bpf_program *fp)