mirror of
https://git.FreeBSD.org/src.git
synced 2025-01-16 15:11:52 +00:00
Merge libpcap version 0.4
PR: bin/7877
This commit is contained in:
parent
4e4869f856
commit
dfd1ee14ff
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=39294
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1990, 1991, 1992, 1993, 1994, 1995, 1996
|
* Copyright (c) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998
|
||||||
* The Regents of the University of California. All rights reserved.
|
* The Regents of the University of California. All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
@ -20,7 +20,7 @@
|
|||||||
*/
|
*/
|
||||||
#ifndef lint
|
#ifndef lint
|
||||||
static const char rcsid[] =
|
static const char rcsid[] =
|
||||||
"@(#) $Header: gencode.c,v 1.91 96/12/11 19:10:23 leres Exp $ (LBL)";
|
"@(#) $Header: gencode.c,v 1.94 98/07/12 13:06:49 leres Exp $ (LBL)";
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
@ -52,6 +52,7 @@ struct rtentry;
|
|||||||
#include "ethertype.h"
|
#include "ethertype.h"
|
||||||
#include "nlpid.h"
|
#include "nlpid.h"
|
||||||
#include "gencode.h"
|
#include "gencode.h"
|
||||||
|
#include "ppp.h"
|
||||||
#include <pcap-namedb.h>
|
#include <pcap-namedb.h>
|
||||||
|
|
||||||
#include "gnuc.h"
|
#include "gnuc.h"
|
||||||
@ -475,6 +476,13 @@ init_linktype(type)
|
|||||||
off_nl = 16;
|
off_nl = 16;
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
case DLT_SLIP_BSDOS:
|
||||||
|
/* XXX this may be the same as the DLT_PPP_BSDOS case */
|
||||||
|
off_linktype = -1;
|
||||||
|
/* XXX end */
|
||||||
|
off_nl = 24;
|
||||||
|
return;
|
||||||
|
|
||||||
case DLT_NULL:
|
case DLT_NULL:
|
||||||
off_linktype = 0;
|
off_linktype = 0;
|
||||||
off_nl = 4;
|
off_nl = 4;
|
||||||
@ -485,6 +493,11 @@ init_linktype(type)
|
|||||||
off_nl = 4;
|
off_nl = 4;
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
case DLT_PPP_BSDOS:
|
||||||
|
off_linktype = 5;
|
||||||
|
off_nl = 24;
|
||||||
|
return;
|
||||||
|
|
||||||
case DLT_FDDI:
|
case DLT_FDDI:
|
||||||
/*
|
/*
|
||||||
* FDDI doesn't really have a link-level type field.
|
* FDDI doesn't really have a link-level type field.
|
||||||
@ -553,8 +566,10 @@ gen_false()
|
|||||||
|
|
||||||
static struct block *
|
static struct block *
|
||||||
gen_linktype(proto)
|
gen_linktype(proto)
|
||||||
int proto;
|
register int proto;
|
||||||
{
|
{
|
||||||
|
struct block *b0, *b1;
|
||||||
|
|
||||||
/* If we're not using encapsulation and checking for IP, we're done */
|
/* If we're not using encapsulation and checking for IP, we're done */
|
||||||
if (off_linktype == -1 && proto == ETHERTYPE_IP)
|
if (off_linktype == -1 && proto == ETHERTYPE_IP)
|
||||||
return gen_true();
|
return gen_true();
|
||||||
@ -566,7 +581,32 @@ gen_linktype(proto)
|
|||||||
|
|
||||||
case DLT_PPP:
|
case DLT_PPP:
|
||||||
if (proto == ETHERTYPE_IP)
|
if (proto == ETHERTYPE_IP)
|
||||||
proto = 0x0021; /* XXX - need ppp.h defs */
|
proto = PPP_IP; /* XXX was 0x21 */
|
||||||
|
break;
|
||||||
|
|
||||||
|
case DLT_PPP_BSDOS:
|
||||||
|
switch (proto) {
|
||||||
|
|
||||||
|
case ETHERTYPE_IP:
|
||||||
|
b0 = gen_cmp(off_linktype, BPF_H, PPP_IP);
|
||||||
|
b1 = gen_cmp(off_linktype, BPF_H, PPP_VJC);
|
||||||
|
gen_or(b0, b1);
|
||||||
|
b0 = gen_cmp(off_linktype, BPF_H, PPP_VJNC);
|
||||||
|
gen_or(b1, b0);
|
||||||
|
return b0;
|
||||||
|
|
||||||
|
case ETHERTYPE_DN:
|
||||||
|
proto = PPP_DECNET;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ETHERTYPE_ATALK:
|
||||||
|
proto = PPP_APPLE;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ETHERTYPE_NS:
|
||||||
|
proto = PPP_NS;
|
||||||
|
break;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DLT_NULL:
|
case DLT_NULL:
|
||||||
@ -1374,11 +1414,17 @@ gen_mcode(s1, s2, masklen, q)
|
|||||||
mlen = __pcap_atoin(s2, &m);
|
mlen = __pcap_atoin(s2, &m);
|
||||||
/* Promote short ipaddr */
|
/* Promote short ipaddr */
|
||||||
m <<= 32 - mlen;
|
m <<= 32 - mlen;
|
||||||
|
if ((n & ~m) != 0)
|
||||||
|
bpf_error("non-network bits set in \"%s mask %s\"",
|
||||||
|
s1, s2);
|
||||||
} else {
|
} else {
|
||||||
/* Convert mask len to mask */
|
/* Convert mask len to mask */
|
||||||
if (masklen > 32)
|
if (masklen > 32)
|
||||||
bpf_error("mask length must be <= 32");
|
bpf_error("mask length must be <= 32");
|
||||||
m = 0xffffffff << (32 - masklen);
|
m = 0xffffffff << (32 - masklen);
|
||||||
|
if ((n & ~m) != 0)
|
||||||
|
bpf_error("non-network bits set in \"%s/%d\"",
|
||||||
|
s1, masklen);
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (q.addr) {
|
switch (q.addr) {
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1990, 1991, 1992, 1993, 1994, 1995, 1996
|
* Copyright (c) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998
|
||||||
* The Regents of the University of California. All rights reserved.
|
* The Regents of the University of California. All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
@ -24,7 +24,7 @@
|
|||||||
|
|
||||||
#ifndef lint
|
#ifndef lint
|
||||||
static const char rcsid[] =
|
static const char rcsid[] =
|
||||||
"@(#) $Header: nametoaddr.c,v 1.45 96/10/17 23:26:53 leres Exp $ (LBL)";
|
"@(#) $Header: nametoaddr.c,v 1.48 98/07/12 13:15:36 leres Exp $ (LBL)";
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <sys/param.h>
|
#include <sys/param.h>
|
||||||
@ -345,7 +345,7 @@ pcap_ether_hostton(const char *name)
|
|||||||
if (ether_hostton((char *)name, (struct ether_addr *)a) == 0) {
|
if (ether_hostton((char *)name, (struct ether_addr *)a) == 0) {
|
||||||
ap = (u_char *)malloc(6);
|
ap = (u_char *)malloc(6);
|
||||||
if (ap != NULL)
|
if (ap != NULL)
|
||||||
memcpy(ap, a, 6);
|
memcpy((char *)ap, (char *)a, 6);
|
||||||
}
|
}
|
||||||
return (ap);
|
return (ap);
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
.\" Copyright (c) 1994, 1996
|
.\" Copyright (c) 1994, 1996, 1997
|
||||||
.\" The Regents of the University of California. All rights reserved.
|
.\" The Regents of the University of California. All rights reserved.
|
||||||
.\"
|
.\"
|
||||||
.\" Redistribution and use in source and binary forms, with or without
|
.\" Redistribution and use in source and binary forms, with or without
|
||||||
@ -19,7 +19,7 @@
|
|||||||
.\"
|
.\"
|
||||||
.\" $Id$
|
.\" $Id$
|
||||||
.\"
|
.\"
|
||||||
.TH PCAP 3 "18 August 1996"
|
.TH PCAP 3 "24 June 1998"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
pcap \- Packet Capture library
|
pcap \- Packet Capture library
|
||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
@ -39,9 +39,9 @@ pcap_dumper_t *pcap_dump_open(pcap_t *p, char *fname)
|
|||||||
.ft B
|
.ft B
|
||||||
char errbuf[PCAP_ERRBUF_SIZE];
|
char errbuf[PCAP_ERRBUF_SIZE];
|
||||||
char *pcap_lookupdev(char *errbuf)
|
char *pcap_lookupdev(char *errbuf)
|
||||||
int pcap_lookupnet(char *device, u_long *netp,
|
int pcap_lookupnet(char *device, bpf_u_int32 *netp,
|
||||||
.ti +8
|
.ti +8
|
||||||
u_long *maskp, char *errbuf)
|
bpf_u_int32 *maskp, char *errbuf)
|
||||||
.ft
|
.ft
|
||||||
.LP
|
.LP
|
||||||
.ft B
|
.ft B
|
||||||
@ -59,7 +59,7 @@ u_char *sp)
|
|||||||
.ft B
|
.ft B
|
||||||
int pcap_compile(pcap_t *p, struct bpf_program *fp,
|
int pcap_compile(pcap_t *p, struct bpf_program *fp,
|
||||||
.ti +8
|
.ti +8
|
||||||
char *str, int optimize, u_long netmask)
|
char *str, int optimize, bpf_u_int32 netmask)
|
||||||
int pcap_setfilter(pcap_t *p, struct bpf_program *fp)
|
int pcap_setfilter(pcap_t *p, struct bpf_program *fp)
|
||||||
.ft
|
.ft
|
||||||
.LP
|
.LP
|
||||||
@ -100,6 +100,10 @@ at packets on the network.
|
|||||||
is a string that specifies the network device to open.
|
is a string that specifies the network device to open.
|
||||||
.I snaplen
|
.I snaplen
|
||||||
specifies the maximum number of bytes to capture.
|
specifies the maximum number of bytes to capture.
|
||||||
|
.I promisc
|
||||||
|
specifies if the interface is to be put into promiscuous mode.
|
||||||
|
(Note that even if this parameter is false, the interface
|
||||||
|
could well be in promiscuous mode for some other reason.)
|
||||||
.I to_ms
|
.I to_ms
|
||||||
specifies the read timeout in milliseconds.
|
specifies the read timeout in milliseconds.
|
||||||
.I ebuf
|
.I ebuf
|
||||||
@ -165,7 +169,7 @@ Both
|
|||||||
and
|
and
|
||||||
.I maskp
|
.I maskp
|
||||||
are
|
are
|
||||||
.I u_long
|
.I bpf_u_int32
|
||||||
pointers.
|
pointers.
|
||||||
A return of -1 indicates an error in which case
|
A return of -1 indicates an error in which case
|
||||||
.I errbuf
|
.I errbuf
|
||||||
@ -178,9 +182,10 @@ specifies the maximum number of packets to process before returning. A
|
|||||||
.I cnt
|
.I cnt
|
||||||
of -1 processes all the packets received in one buffer. A
|
of -1 processes all the packets received in one buffer. A
|
||||||
.I cnt
|
.I cnt
|
||||||
of 0 processes all packets until an error occurs (or
|
of 0 processes all packets until an error occurs,
|
||||||
.B EOF
|
.B EOF
|
||||||
is reached).
|
is reached, or the read times out (when doing live reads and a non-zero
|
||||||
|
read timeout is specified).
|
||||||
.I callback
|
.I callback
|
||||||
specifies a routine to be called with three arguments:
|
specifies a routine to be called with three arguments:
|
||||||
a
|
a
|
||||||
@ -190,7 +195,9 @@ pointer which is passed in from
|
|||||||
a pointer to the
|
a pointer to the
|
||||||
.I pcap_pkthdr
|
.I pcap_pkthdr
|
||||||
struct (which precede the actual network headers and data),
|
struct (which precede the actual network headers and data),
|
||||||
and a length. The number of packets read is returned.
|
and a
|
||||||
|
.I u_char
|
||||||
|
pointer to the packet data. The number of packets read is returned.
|
||||||
Zero is returned when
|
Zero is returned when
|
||||||
.B EOF
|
.B EOF
|
||||||
is reached in a ``savefile.'' A return of -1 indicates
|
is reached in a ``savefile.'' A return of -1 indicates
|
||||||
@ -221,12 +228,16 @@ controls whether optimization on the resulting code is performed.
|
|||||||
specifies the netmask of the local net.
|
specifies the netmask of the local net.
|
||||||
.PP
|
.PP
|
||||||
.B pcap_setfilter()
|
.B pcap_setfilter()
|
||||||
is used to specify the a filter program.
|
is used to specify a filter program.
|
||||||
.I fp
|
.I fp
|
||||||
is a pointer to an array of
|
is a pointer to an array of
|
||||||
.I bpf_program
|
.I bpf_program
|
||||||
struct, usually the result of a call to
|
struct, usually the result of a call to
|
||||||
.BR pcap_compile() .
|
.BR pcap_compile() .
|
||||||
|
.B \-1
|
||||||
|
is returned on failure;
|
||||||
|
.B 0
|
||||||
|
is returned on success.
|
||||||
.PP
|
.PP
|
||||||
.B pcap_loop()
|
.B pcap_loop()
|
||||||
is similar to
|
is similar to
|
||||||
@ -234,6 +245,15 @@ is similar to
|
|||||||
except it keeps reading packets until
|
except it keeps reading packets until
|
||||||
.I cnt
|
.I cnt
|
||||||
packets are processed or an error occurs.
|
packets are processed or an error occurs.
|
||||||
|
It does
|
||||||
|
.B not
|
||||||
|
return when live read timeouts occur.
|
||||||
|
Rather, specifying a non-zero read timeout to
|
||||||
|
.B pcap_open_live()
|
||||||
|
and then calling
|
||||||
|
.B pcap_dispatch()
|
||||||
|
allows the reception and processing of any packets that arrive when the
|
||||||
|
timeout occurs.
|
||||||
A negative
|
A negative
|
||||||
.I cnt
|
.I cnt
|
||||||
causes
|
causes
|
||||||
@ -263,7 +283,7 @@ returns the major number of the version of the pcap used to write the
|
|||||||
savefile.
|
savefile.
|
||||||
.PP
|
.PP
|
||||||
.B pcap_minor_version()
|
.B pcap_minor_version()
|
||||||
returns the major number of the version of the pcap used to write the
|
returns the minor number of the version of the pcap used to write the
|
||||||
savefile.
|
savefile.
|
||||||
.PP
|
.PP
|
||||||
.B pcap_file()
|
.B pcap_file()
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1993, 1994, 1995, 1996
|
* Copyright (c) 1993, 1994, 1995, 1996, 1997
|
||||||
* The Regents of the University of California. All rights reserved.
|
* The Regents of the University of California. All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
@ -30,7 +30,7 @@
|
|||||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
* SUCH DAMAGE.
|
* SUCH DAMAGE.
|
||||||
*
|
*
|
||||||
* @(#) $Header: pcap.h,v 1.20 96/07/12 19:24:15 leres Exp $ (LBL)
|
* @(#) $Header: pcap.h,v 1.21 97/10/15 21:59:13 leres Exp $ (LBL)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef lib_pcap_h
|
#ifndef lib_pcap_h
|
||||||
@ -107,7 +107,7 @@ typedef void (*pcap_handler)(u_char *, const struct pcap_pkthdr *,
|
|||||||
char *pcap_lookupdev(char *);
|
char *pcap_lookupdev(char *);
|
||||||
int pcap_lookupnet(char *, bpf_u_int32 *, bpf_u_int32 *, char *);
|
int pcap_lookupnet(char *, bpf_u_int32 *, bpf_u_int32 *, char *);
|
||||||
pcap_t *pcap_open_live(char *, int, int, int, char *);
|
pcap_t *pcap_open_live(char *, int, int, int, char *);
|
||||||
pcap_t *pcap_open_offline(char *, char *);
|
pcap_t *pcap_open_offline(const char *, char *);
|
||||||
void pcap_close(pcap_t *);
|
void pcap_close(pcap_t *);
|
||||||
int pcap_loop(pcap_t *, int, pcap_handler, u_char *);
|
int pcap_loop(pcap_t *, int, pcap_handler, u_char *);
|
||||||
int pcap_dispatch(pcap_t *, int, pcap_handler, u_char *);
|
int pcap_dispatch(pcap_t *, int, pcap_handler, u_char *);
|
||||||
@ -132,7 +132,7 @@ int pcap_minor_version(pcap_t *);
|
|||||||
FILE *pcap_file(pcap_t *);
|
FILE *pcap_file(pcap_t *);
|
||||||
int pcap_fileno(pcap_t *);
|
int pcap_fileno(pcap_t *);
|
||||||
|
|
||||||
pcap_dumper_t *pcap_dump_open(pcap_t *, char *);
|
pcap_dumper_t *pcap_dump_open(pcap_t *, const char *);
|
||||||
void pcap_dump_close(pcap_dumper_t *);
|
void pcap_dump_close(pcap_dumper_t *);
|
||||||
void pcap_dump(u_char *, const struct pcap_pkthdr *, const u_char *);
|
void pcap_dump(u_char *, const struct pcap_pkthdr *, const u_char *);
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
%{
|
%{
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996
|
* Copyright (c) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997
|
||||||
* The Regents of the University of California. All rights reserved.
|
* The Regents of the University of California. All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
@ -22,7 +22,7 @@
|
|||||||
|
|
||||||
#ifndef lint
|
#ifndef lint
|
||||||
static const char rcsid[] =
|
static const char rcsid[] =
|
||||||
"@(#) $Header: scanner.l,v 1.55 96/09/27 22:34:45 leres Exp $ (LBL)";
|
"@(#) $Header: scanner.l,v 1.56 97/07/21 13:31:50 leres Exp $ (LBL)";
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
@ -139,14 +139,15 @@ outbound return OUTBOUND;
|
|||||||
">>" return RSH;
|
">>" return RSH;
|
||||||
{N} { yylval.i = stoi((char *)yytext); return NUM; }
|
{N} { yylval.i = stoi((char *)yytext); return NUM; }
|
||||||
({N}\.{N})|({N}\.{N}\.{N})|({N}\.{N}\.{N}\.{N}) {
|
({N}\.{N})|({N}\.{N}\.{N})|({N}\.{N}\.{N}\.{N}) {
|
||||||
yylval.s = sdup((char *)yytext); return HID;
|
yylval.s = sdup((char *)yytext); return HID; }
|
||||||
}
|
|
||||||
{B}:{B}:{B}:{B}:{B}:{B} { yylval.e = pcap_ether_aton((char *)yytext);
|
{B}:{B}:{B}:{B}:{B}:{B} { yylval.e = pcap_ether_aton((char *)yytext);
|
||||||
return EID; }
|
return EID; }
|
||||||
{B}:+({B}:+)+ { bpf_error("bogus ethernet address %s", yytext); }
|
{B}:+({B}:+)+ { bpf_error("bogus ethernet address %s", yytext); }
|
||||||
[A-Za-z][-_.A-Za-z0-9]* { yylval.s = sdup((char *)yytext); return ID; }
|
[A-Za-z0-9][-_.A-Za-z0-9]*[.A-Za-z0-9] {
|
||||||
|
yylval.s = sdup((char *)yytext); return ID; }
|
||||||
"\\"[^ !()\n\t]+ { yylval.s = sdup((char *)yytext + 1); return ID; }
|
"\\"[^ !()\n\t]+ { yylval.s = sdup((char *)yytext + 1); return ID; }
|
||||||
[^ \[\]\t\n\-_.A-Za-z0-9!<>()&|=]+ { bpf_error("illegal token: %s\n", yytext); }
|
[^ \[\]\t\n\-_.A-Za-z0-9!<>()&|=]+i {
|
||||||
|
bpf_error("illegal token: %s\n", yytext); }
|
||||||
. { bpf_error("illegal char '%c'", *yytext); }
|
. { bpf_error("illegal char '%c'", *yytext); }
|
||||||
%%
|
%%
|
||||||
void
|
void
|
||||||
|
Loading…
Reference in New Issue
Block a user