2002-06-21 01:36:27 +00:00
|
|
|
/* -*- Mode: c; tab-width: 8; indent-tabs-mode: 1; c-basic-offset: 8; -*- */
|
1996-08-19 20:36:34 +00:00
|
|
|
/*
|
1998-09-15 19:28:10 +00:00
|
|
|
* Copyright (c) 1994, 1995, 1996, 1997, 1998
|
1996-08-19 20:36:34 +00:00
|
|
|
* The Regents of the University of California. All rights reserved.
|
|
|
|
*
|
|
|
|
* Redistribution and use in source and binary forms, with or without
|
|
|
|
* modification, are permitted provided that the following conditions
|
|
|
|
* are met:
|
|
|
|
* 1. Redistributions of source code must retain the above copyright
|
|
|
|
* notice, this list of conditions and the following disclaimer.
|
|
|
|
* 2. Redistributions in binary form must reproduce the above copyright
|
|
|
|
* notice, this list of conditions and the following disclaimer in the
|
|
|
|
* documentation and/or other materials provided with the distribution.
|
|
|
|
* 3. All advertising materials mentioning features or use of this software
|
|
|
|
* must display the following acknowledgement:
|
|
|
|
* This product includes software developed by the Computer Systems
|
|
|
|
* Engineering Group at Lawrence Berkeley Laboratory.
|
|
|
|
* 4. Neither the name of the University nor of the Laboratory may be used
|
|
|
|
* to endorse or promote products derived from this software without
|
|
|
|
* specific prior written permission.
|
|
|
|
*
|
|
|
|
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
|
|
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
|
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
|
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
|
|
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
|
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
|
|
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
|
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
|
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
|
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
|
|
* SUCH DAMAGE.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef lint
|
2004-03-31 09:07:39 +00:00
|
|
|
static const char rcsid[] _U_ =
|
Update libpcap to 1.1.1.
Changes:
Thu. April 1, 2010. guy@alum.mit.edu.
Summary for 1.1.1 libpcap release
Update CHANGES to reflect more of the changes in 1.1.0.
Fix build on RHEL5.
Fix shared library build on AIX.
Thu. March 11, 2010. ken@netfunctional.ca/guy@alum.mit.edu.
Summary for 1.1.0 libpcap release
Add SocketCAN capture support
Add Myricom SNF API support
Update Endace DAG and ERF support
Add support for shared libraries on Solaris, HP-UX, and AIX
Build, install, and un-install shared libraries by default;
don't build/install shared libraries on platforms we don't support
Fix building from a directory other than the source directory
Fix compiler warnings and builds on some platforms
Update config.guess and config.sub
Support monitor mode on mac80211 devices on Linux
Fix USB memory-mapped capturing on Linux; it requires a new DLT_
value
On Linux, scan /sys/class/net for devices if we have it; scan
it, or /proc/net/dev if we don't have /sys/class/net, even if
we have getifaddrs(), as it'll find interfaces with no
addresses
Add limited support for reading pcap-ng files
Fix BPF driver-loading error handling on AIX
Support getting the full-length interface description on FreeBSD
In the lexical analyzer, free up any addrinfo structure we got back
from getaddrinfo().
Add support for BPF and libdlpi in OpenSolaris (and SXCE)
Hyphenate "link-layer" everywhere
Add /sys/kernel/debug/usb/usbmon to the list of usbmon locations
In pcap_read_linux_mmap(), if there are no frames available, call
poll() even if we're in non-blocking mode, so we pick up
errors, and check for the errors in question.
Note that poll() works on BPF devices is Snow Leopard
If an ENXIO or ENETDOWN is received, it may mean the device has
gone away. Deal with it.
For BPF, raise the default capture buffer size to from 32k to 512k
Support ps_ifdrop on Linux
Added a bunch of #ifdef directives to make wpcap.dll (WinPcap) compile
under cygwin.
Changes to Linux mmapped captures.
Fix bug where create_ring would fail for particular snaplen and
buffer size combinations
Update pcap-config so that it handles libpcap requiring
additional libraries
Add workaround for threadsafeness on Windows
Add missing mapping for DLT_ENC <-> LINKTYPE_ENC
DLT: Add DLT_CAN_SOCKETCAN
DLT: Add Solaris ipnet
Don't check for DLT_IPNET if it's not defined
Add link-layer types for Fibre Channel FC-2
Add link-layer types for Wireless HART
Add link-layer types for AOS
Add link-layer types for DECT
Autoconf fixes (AIX, HP-UX, OSF/1, Tru64 cleanups)
Install headers unconditionally, and include vlan.h/bluetooth.h if
enabled
Autoconf fixes+cleanup
Support enabling/disabling bluetooth (--{en,dis}able-bluetooth)
Support disabling SITA support (--without-sita)
Return -1 on failure to create packet ring (if supported but
creation failed)
Fix handling of 'any' device, so that it can be opened, and no longer
attempt to open it in Monitor mode
Add support for snapshot length for USB Memory-Mapped Interface
Fix configure and build on recent Linux kernels
Fix memory-mapped Linux capture to support pcap_next() and
pcap_next_ex()
Fixes for Linux USB capture
DLT: Add DLT_LINUX_EVDEV
DLT: Add DLT_GSMTAP_UM
DLT: Add DLT_GSMTAP_ABIS
2010-10-28 16:22:13 +00:00
|
|
|
"@(#) $Header: /tcpdump/master/libpcap/inet.c,v 1.79 2008-04-20 18:19:02 guy Exp $ (LBL)";
|
2001-04-03 04:18:09 +00:00
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifdef HAVE_CONFIG_H
|
|
|
|
#include "config.h"
|
1996-08-19 20:36:34 +00:00
|
|
|
#endif
|
|
|
|
|
2004-03-31 09:07:39 +00:00
|
|
|
#ifdef WIN32
|
|
|
|
#include <pcap-stdinc.h>
|
|
|
|
#else /* WIN32 */
|
|
|
|
|
1996-08-19 20:36:34 +00:00
|
|
|
#include <sys/param.h>
|
2005-05-29 17:46:52 +00:00
|
|
|
#ifndef MSDOS
|
1996-08-19 20:36:34 +00:00
|
|
|
#include <sys/file.h>
|
2005-05-29 17:46:52 +00:00
|
|
|
#endif
|
1996-08-19 20:36:34 +00:00
|
|
|
#include <sys/ioctl.h>
|
|
|
|
#include <sys/socket.h>
|
|
|
|
#ifdef HAVE_SYS_SOCKIO_H
|
|
|
|
#include <sys/sockio.h>
|
|
|
|
#endif
|
|
|
|
|
2004-03-31 09:07:39 +00:00
|
|
|
struct mbuf; /* Squelch compiler warnings on some platforms for */
|
|
|
|
struct rtentry; /* declarations in <net/if.h> */
|
1996-08-19 20:36:34 +00:00
|
|
|
#include <net/if.h>
|
|
|
|
#include <netinet/in.h>
|
2004-03-31 09:07:39 +00:00
|
|
|
#endif /* WIN32 */
|
1996-08-19 20:36:34 +00:00
|
|
|
|
|
|
|
#include <ctype.h>
|
|
|
|
#include <errno.h>
|
|
|
|
#include <memory.h>
|
|
|
|
#include <stdio.h>
|
|
|
|
#include <stdlib.h>
|
|
|
|
#include <string.h>
|
2005-05-29 17:46:52 +00:00
|
|
|
#if !defined(WIN32) && !defined(__BORLANDC__)
|
1996-08-19 20:36:34 +00:00
|
|
|
#include <unistd.h>
|
2005-05-29 17:46:52 +00:00
|
|
|
#endif /* !WIN32 && !__BORLANDC__ */
|
2002-06-21 01:36:27 +00:00
|
|
|
#ifdef HAVE_LIMITS_H
|
|
|
|
#include <limits.h>
|
|
|
|
#else
|
|
|
|
#define INT_MAX 2147483647
|
|
|
|
#endif
|
1996-08-19 20:36:34 +00:00
|
|
|
|
|
|
|
#include "pcap-int.h"
|
|
|
|
|
|
|
|
#ifdef HAVE_OS_PROTO_H
|
|
|
|
#include "os-proto.h"
|
|
|
|
#endif
|
|
|
|
|
|
|
|
/* Not all systems have IFF_LOOPBACK */
|
|
|
|
#ifdef IFF_LOOPBACK
|
2002-06-21 01:36:27 +00:00
|
|
|
#define ISLOOPBACK(name, flags) ((flags) & IFF_LOOPBACK)
|
1996-08-19 20:36:34 +00:00
|
|
|
#else
|
2002-06-21 01:36:27 +00:00
|
|
|
#define ISLOOPBACK(name, flags) ((name)[0] == 'l' && (name)[1] == 'o' && \
|
|
|
|
(isdigit((unsigned char)((name)[2])) || (name)[2] == '\0'))
|
1996-08-19 20:36:34 +00:00
|
|
|
#endif
|
|
|
|
|
2004-03-31 09:07:39 +00:00
|
|
|
struct sockaddr *
|
|
|
|
dup_sockaddr(struct sockaddr *sa, size_t sa_length)
|
2002-06-21 01:36:27 +00:00
|
|
|
{
|
|
|
|
struct sockaddr *newsa;
|
2004-03-31 09:07:39 +00:00
|
|
|
|
|
|
|
if ((newsa = malloc(sa_length)) == NULL)
|
2002-06-21 01:36:27 +00:00
|
|
|
return (NULL);
|
2004-03-31 09:07:39 +00:00
|
|
|
return (memcpy(newsa, sa, sa_length));
|
2002-06-21 01:36:27 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static int
|
2004-03-31 09:07:39 +00:00
|
|
|
get_instance(const char *name)
|
2002-06-21 01:36:27 +00:00
|
|
|
{
|
2004-03-31 09:07:39 +00:00
|
|
|
const char *cp, *endcp;
|
2002-06-21 01:36:27 +00:00
|
|
|
int n;
|
|
|
|
|
|
|
|
if (strcmp(name, "any") == 0) {
|
|
|
|
/*
|
|
|
|
* Give the "any" device an artificially high instance
|
|
|
|
* number, so it shows up after all other non-loopback
|
|
|
|
* interfaces.
|
|
|
|
*/
|
|
|
|
return INT_MAX;
|
|
|
|
}
|
|
|
|
|
|
|
|
endcp = name + strlen(name);
|
|
|
|
for (cp = name; cp < endcp && !isdigit((unsigned char)*cp); ++cp)
|
|
|
|
continue;
|
|
|
|
|
|
|
|
if (isdigit((unsigned char)*cp))
|
|
|
|
n = atoi(cp);
|
|
|
|
else
|
|
|
|
n = 0;
|
|
|
|
return (n);
|
|
|
|
}
|
|
|
|
|
2004-03-31 09:07:39 +00:00
|
|
|
int
|
|
|
|
add_or_find_if(pcap_if_t **curdev_ret, pcap_if_t **alldevs, const char *name,
|
2002-06-21 01:36:27 +00:00
|
|
|
u_int flags, const char *description, char *errbuf)
|
|
|
|
{
|
2005-05-29 17:46:52 +00:00
|
|
|
pcap_t *p;
|
2002-06-21 01:36:27 +00:00
|
|
|
pcap_if_t *curdev, *prevdev, *nextdev;
|
|
|
|
int this_instance;
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Is there already an entry in the list for this interface?
|
|
|
|
*/
|
|
|
|
for (curdev = *alldevs; curdev != NULL; curdev = curdev->next) {
|
|
|
|
if (strcmp(name, curdev->name) == 0)
|
|
|
|
break; /* yes, we found it */
|
|
|
|
}
|
2007-10-16 02:02:02 +00:00
|
|
|
|
2002-06-21 01:36:27 +00:00
|
|
|
if (curdev == NULL) {
|
|
|
|
/*
|
|
|
|
* No, we didn't find it.
|
2007-10-16 02:02:02 +00:00
|
|
|
*
|
|
|
|
* Can we open this interface for live capture?
|
|
|
|
*
|
|
|
|
* We do this check so that interfaces that are
|
|
|
|
* supplied by the interface enumeration mechanism
|
|
|
|
* we're using but that don't support packet capture
|
|
|
|
* aren't included in the list. Loopback interfaces
|
|
|
|
* on Solaris are an example of this; we don't just
|
|
|
|
* omit loopback interfaces on all platforms because
|
|
|
|
* you *can* capture on loopback interfaces on some
|
|
|
|
* OSes.
|
|
|
|
*
|
|
|
|
* On OS X, we don't do this check if the device
|
|
|
|
* name begins with "wlt"; at least some versions
|
|
|
|
* of OS X offer monitor mode capturing by having
|
|
|
|
* a separate "monitor mode" device for each wireless
|
|
|
|
* adapter, rather than by implementing the ioctls
|
|
|
|
* that {Free,Net,Open,DragonFly}BSD provide.
|
|
|
|
* Opening that device puts the adapter into monitor
|
|
|
|
* mode, which, at least for some adapters, causes
|
|
|
|
* them to deassociate from the network with which
|
|
|
|
* they're associated.
|
|
|
|
*
|
|
|
|
* Instead, we try to open the corresponding "en"
|
|
|
|
* device (so that we don't end up with, for users
|
|
|
|
* without sufficient privilege to open capture
|
|
|
|
* devices, a list of adapters that only includes
|
|
|
|
* the wlt devices).
|
|
|
|
*/
|
|
|
|
#ifdef __APPLE__
|
|
|
|
if (strncmp(name, "wlt", 3) == 0) {
|
|
|
|
char *en_name;
|
|
|
|
size_t en_name_len;
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Try to allocate a buffer for the "en"
|
|
|
|
* device's name.
|
|
|
|
*/
|
|
|
|
en_name_len = strlen(name) - 1;
|
|
|
|
en_name = malloc(en_name_len + 1);
|
|
|
|
if (en_name == NULL) {
|
|
|
|
(void)snprintf(errbuf, PCAP_ERRBUF_SIZE,
|
|
|
|
"malloc: %s", pcap_strerror(errno));
|
|
|
|
return (-1);
|
|
|
|
}
|
|
|
|
strcpy(en_name, "en");
|
|
|
|
strcat(en_name, name + 3);
|
|
|
|
p = pcap_open_live(en_name, 68, 0, 0, errbuf);
|
|
|
|
free(en_name);
|
|
|
|
} else
|
|
|
|
#endif /* __APPLE */
|
|
|
|
p = pcap_open_live(name, 68, 0, 0, errbuf);
|
|
|
|
if (p == NULL) {
|
|
|
|
/*
|
|
|
|
* No. Don't bother including it.
|
|
|
|
* Don't treat this as an error, though.
|
|
|
|
*/
|
|
|
|
*curdev_ret = NULL;
|
|
|
|
return (0);
|
|
|
|
}
|
|
|
|
pcap_close(p);
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Yes, we can open it.
|
2002-06-21 01:36:27 +00:00
|
|
|
* Allocate a new entry.
|
|
|
|
*/
|
|
|
|
curdev = malloc(sizeof(pcap_if_t));
|
|
|
|
if (curdev == NULL) {
|
|
|
|
(void)snprintf(errbuf, PCAP_ERRBUF_SIZE,
|
|
|
|
"malloc: %s", pcap_strerror(errno));
|
|
|
|
return (-1);
|
|
|
|
}
|
2004-03-31 09:07:39 +00:00
|
|
|
|
2002-06-21 01:36:27 +00:00
|
|
|
/*
|
|
|
|
* Fill in the entry.
|
|
|
|
*/
|
|
|
|
curdev->next = NULL;
|
2007-10-16 02:02:02 +00:00
|
|
|
curdev->name = strdup(name);
|
|
|
|
if (curdev->name == NULL) {
|
|
|
|
(void)snprintf(errbuf, PCAP_ERRBUF_SIZE,
|
|
|
|
"malloc: %s", pcap_strerror(errno));
|
|
|
|
free(curdev);
|
|
|
|
return (-1);
|
|
|
|
}
|
2002-06-21 01:36:27 +00:00
|
|
|
if (description != NULL) {
|
|
|
|
/*
|
|
|
|
* We have a description for this interface.
|
|
|
|
*/
|
2007-10-16 02:02:02 +00:00
|
|
|
curdev->description = strdup(description);
|
|
|
|
if (curdev->description == NULL) {
|
|
|
|
(void)snprintf(errbuf, PCAP_ERRBUF_SIZE,
|
|
|
|
"malloc: %s", pcap_strerror(errno));
|
|
|
|
free(curdev->name);
|
|
|
|
free(curdev);
|
|
|
|
return (-1);
|
|
|
|
}
|
2002-06-21 01:36:27 +00:00
|
|
|
} else {
|
|
|
|
/*
|
|
|
|
* We don't.
|
|
|
|
*/
|
|
|
|
curdev->description = NULL;
|
|
|
|
}
|
|
|
|
curdev->addresses = NULL; /* list starts out as empty */
|
|
|
|
curdev->flags = 0;
|
|
|
|
if (ISLOOPBACK(name, flags))
|
|
|
|
curdev->flags |= PCAP_IF_LOOPBACK;
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Add it to the list, in the appropriate location.
|
|
|
|
* First, get the instance number of this interface.
|
|
|
|
*/
|
|
|
|
this_instance = get_instance(name);
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Now look for the last interface with an instance number
|
|
|
|
* less than or equal to the new interface's instance
|
|
|
|
* number - except that non-loopback interfaces are
|
|
|
|
* arbitrarily treated as having interface numbers less
|
|
|
|
* than those of loopback interfaces, so the loopback
|
|
|
|
* interfaces are put at the end of the list.
|
|
|
|
*
|
|
|
|
* We start with "prevdev" being NULL, meaning we're before
|
|
|
|
* the first element in the list.
|
|
|
|
*/
|
|
|
|
prevdev = NULL;
|
|
|
|
for (;;) {
|
|
|
|
/*
|
|
|
|
* Get the interface after this one.
|
|
|
|
*/
|
|
|
|
if (prevdev == NULL) {
|
|
|
|
/*
|
|
|
|
* The next element is the first element.
|
|
|
|
*/
|
|
|
|
nextdev = *alldevs;
|
|
|
|
} else
|
|
|
|
nextdev = prevdev->next;
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Are we at the end of the list?
|
|
|
|
*/
|
|
|
|
if (nextdev == NULL) {
|
|
|
|
/*
|
|
|
|
* Yes - we have to put the new entry
|
|
|
|
* after "prevdev".
|
|
|
|
*/
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Is the new interface a non-loopback interface
|
|
|
|
* and the next interface a loopback interface?
|
|
|
|
*/
|
|
|
|
if (!(curdev->flags & PCAP_IF_LOOPBACK) &&
|
|
|
|
(nextdev->flags & PCAP_IF_LOOPBACK)) {
|
|
|
|
/*
|
|
|
|
* Yes, we should put the new entry
|
|
|
|
* before "nextdev", i.e. after "prevdev".
|
|
|
|
*/
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Is the new interface's instance number less
|
|
|
|
* than the next interface's instance number,
|
|
|
|
* and is it the case that the new interface is a
|
|
|
|
* non-loopback interface or the next interface is
|
|
|
|
* a loopback interface?
|
|
|
|
*
|
|
|
|
* (The goal of both loopback tests is to make
|
|
|
|
* sure that we never put a loopback interface
|
|
|
|
* before any non-loopback interface and that we
|
|
|
|
* always put a non-loopback interface before all
|
|
|
|
* loopback interfaces.)
|
|
|
|
*/
|
|
|
|
if (this_instance < get_instance(nextdev->name) &&
|
|
|
|
(!(curdev->flags & PCAP_IF_LOOPBACK) ||
|
|
|
|
(nextdev->flags & PCAP_IF_LOOPBACK))) {
|
|
|
|
/*
|
|
|
|
* Yes - we should put the new entry
|
|
|
|
* before "nextdev", i.e. after "prevdev".
|
|
|
|
*/
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
prevdev = nextdev;
|
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Insert before "nextdev".
|
|
|
|
*/
|
|
|
|
curdev->next = nextdev;
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Insert after "prevdev" - unless "prevdev" is null,
|
|
|
|
* in which case this is the first interface.
|
|
|
|
*/
|
|
|
|
if (prevdev == NULL) {
|
|
|
|
/*
|
|
|
|
* This is the first interface. Pass back a
|
|
|
|
* pointer to it, and put "curdev" before
|
|
|
|
* "nextdev".
|
|
|
|
*/
|
|
|
|
*alldevs = curdev;
|
|
|
|
} else
|
|
|
|
prevdev->next = curdev;
|
|
|
|
}
|
2004-03-31 09:07:39 +00:00
|
|
|
|
2002-06-21 01:36:27 +00:00
|
|
|
*curdev_ret = curdev;
|
|
|
|
return (0);
|
|
|
|
}
|
|
|
|
|
2009-03-21 20:43:56 +00:00
|
|
|
/*
|
|
|
|
* XXX - on FreeBSDs that support it, should it get the sysctl named
|
|
|
|
* "dev.{adapter family name}.{adapter unit}.%desc" to get a description
|
|
|
|
* of the adapter? Note that "dev.an.0.%desc" is "Aironet PC4500/PC4800"
|
|
|
|
* with my Cisco 350 card, so the name isn't entirely descriptive. The
|
|
|
|
* "dev.an.0.%pnpinfo" has a better description, although one might argue
|
|
|
|
* that the problem is really a driver bug - if it can find out that it's
|
|
|
|
* a Cisco 340 or 350, rather than an old Aironet card, it should use
|
|
|
|
* that in the description.
|
|
|
|
*
|
Update libpcap to 1.1.1.
Changes:
Thu. April 1, 2010. guy@alum.mit.edu.
Summary for 1.1.1 libpcap release
Update CHANGES to reflect more of the changes in 1.1.0.
Fix build on RHEL5.
Fix shared library build on AIX.
Thu. March 11, 2010. ken@netfunctional.ca/guy@alum.mit.edu.
Summary for 1.1.0 libpcap release
Add SocketCAN capture support
Add Myricom SNF API support
Update Endace DAG and ERF support
Add support for shared libraries on Solaris, HP-UX, and AIX
Build, install, and un-install shared libraries by default;
don't build/install shared libraries on platforms we don't support
Fix building from a directory other than the source directory
Fix compiler warnings and builds on some platforms
Update config.guess and config.sub
Support monitor mode on mac80211 devices on Linux
Fix USB memory-mapped capturing on Linux; it requires a new DLT_
value
On Linux, scan /sys/class/net for devices if we have it; scan
it, or /proc/net/dev if we don't have /sys/class/net, even if
we have getifaddrs(), as it'll find interfaces with no
addresses
Add limited support for reading pcap-ng files
Fix BPF driver-loading error handling on AIX
Support getting the full-length interface description on FreeBSD
In the lexical analyzer, free up any addrinfo structure we got back
from getaddrinfo().
Add support for BPF and libdlpi in OpenSolaris (and SXCE)
Hyphenate "link-layer" everywhere
Add /sys/kernel/debug/usb/usbmon to the list of usbmon locations
In pcap_read_linux_mmap(), if there are no frames available, call
poll() even if we're in non-blocking mode, so we pick up
errors, and check for the errors in question.
Note that poll() works on BPF devices is Snow Leopard
If an ENXIO or ENETDOWN is received, it may mean the device has
gone away. Deal with it.
For BPF, raise the default capture buffer size to from 32k to 512k
Support ps_ifdrop on Linux
Added a bunch of #ifdef directives to make wpcap.dll (WinPcap) compile
under cygwin.
Changes to Linux mmapped captures.
Fix bug where create_ring would fail for particular snaplen and
buffer size combinations
Update pcap-config so that it handles libpcap requiring
additional libraries
Add workaround for threadsafeness on Windows
Add missing mapping for DLT_ENC <-> LINKTYPE_ENC
DLT: Add DLT_CAN_SOCKETCAN
DLT: Add Solaris ipnet
Don't check for DLT_IPNET if it's not defined
Add link-layer types for Fibre Channel FC-2
Add link-layer types for Wireless HART
Add link-layer types for AOS
Add link-layer types for DECT
Autoconf fixes (AIX, HP-UX, OSF/1, Tru64 cleanups)
Install headers unconditionally, and include vlan.h/bluetooth.h if
enabled
Autoconf fixes+cleanup
Support enabling/disabling bluetooth (--{en,dis}able-bluetooth)
Support disabling SITA support (--without-sita)
Return -1 on failure to create packet ring (if supported but
creation failed)
Fix handling of 'any' device, so that it can be opened, and no longer
attempt to open it in Monitor mode
Add support for snapshot length for USB Memory-Mapped Interface
Fix configure and build on recent Linux kernels
Fix memory-mapped Linux capture to support pcap_next() and
pcap_next_ex()
Fixes for Linux USB capture
DLT: Add DLT_LINUX_EVDEV
DLT: Add DLT_GSMTAP_UM
DLT: Add DLT_GSMTAP_ABIS
2010-10-28 16:22:13 +00:00
|
|
|
* Do NetBSD, DragonflyBSD, or OpenBSD support this as well? FreeBSD
|
|
|
|
* and OpenBSD let you get a description, but it's not generated by the OS,
|
|
|
|
* it's set with another ioctl that ifconfig supports; we use that to get
|
|
|
|
* a description in FreeBSD and OpenBSD, but if there is no such
|
|
|
|
* description available, it still might be nice to get some description
|
|
|
|
* string based on the device type or something such as that.
|
2009-03-21 20:43:56 +00:00
|
|
|
*
|
|
|
|
* In OS X, the System Configuration framework can apparently return
|
Update libpcap to 1.1.1.
Changes:
Thu. April 1, 2010. guy@alum.mit.edu.
Summary for 1.1.1 libpcap release
Update CHANGES to reflect more of the changes in 1.1.0.
Fix build on RHEL5.
Fix shared library build on AIX.
Thu. March 11, 2010. ken@netfunctional.ca/guy@alum.mit.edu.
Summary for 1.1.0 libpcap release
Add SocketCAN capture support
Add Myricom SNF API support
Update Endace DAG and ERF support
Add support for shared libraries on Solaris, HP-UX, and AIX
Build, install, and un-install shared libraries by default;
don't build/install shared libraries on platforms we don't support
Fix building from a directory other than the source directory
Fix compiler warnings and builds on some platforms
Update config.guess and config.sub
Support monitor mode on mac80211 devices on Linux
Fix USB memory-mapped capturing on Linux; it requires a new DLT_
value
On Linux, scan /sys/class/net for devices if we have it; scan
it, or /proc/net/dev if we don't have /sys/class/net, even if
we have getifaddrs(), as it'll find interfaces with no
addresses
Add limited support for reading pcap-ng files
Fix BPF driver-loading error handling on AIX
Support getting the full-length interface description on FreeBSD
In the lexical analyzer, free up any addrinfo structure we got back
from getaddrinfo().
Add support for BPF and libdlpi in OpenSolaris (and SXCE)
Hyphenate "link-layer" everywhere
Add /sys/kernel/debug/usb/usbmon to the list of usbmon locations
In pcap_read_linux_mmap(), if there are no frames available, call
poll() even if we're in non-blocking mode, so we pick up
errors, and check for the errors in question.
Note that poll() works on BPF devices is Snow Leopard
If an ENXIO or ENETDOWN is received, it may mean the device has
gone away. Deal with it.
For BPF, raise the default capture buffer size to from 32k to 512k
Support ps_ifdrop on Linux
Added a bunch of #ifdef directives to make wpcap.dll (WinPcap) compile
under cygwin.
Changes to Linux mmapped captures.
Fix bug where create_ring would fail for particular snaplen and
buffer size combinations
Update pcap-config so that it handles libpcap requiring
additional libraries
Add workaround for threadsafeness on Windows
Add missing mapping for DLT_ENC <-> LINKTYPE_ENC
DLT: Add DLT_CAN_SOCKETCAN
DLT: Add Solaris ipnet
Don't check for DLT_IPNET if it's not defined
Add link-layer types for Fibre Channel FC-2
Add link-layer types for Wireless HART
Add link-layer types for AOS
Add link-layer types for DECT
Autoconf fixes (AIX, HP-UX, OSF/1, Tru64 cleanups)
Install headers unconditionally, and include vlan.h/bluetooth.h if
enabled
Autoconf fixes+cleanup
Support enabling/disabling bluetooth (--{en,dis}able-bluetooth)
Support disabling SITA support (--without-sita)
Return -1 on failure to create packet ring (if supported but
creation failed)
Fix handling of 'any' device, so that it can be opened, and no longer
attempt to open it in Monitor mode
Add support for snapshot length for USB Memory-Mapped Interface
Fix configure and build on recent Linux kernels
Fix memory-mapped Linux capture to support pcap_next() and
pcap_next_ex()
Fixes for Linux USB capture
DLT: Add DLT_LINUX_EVDEV
DLT: Add DLT_GSMTAP_UM
DLT: Add DLT_GSMTAP_ABIS
2010-10-28 16:22:13 +00:00
|
|
|
* names in 10.4 and later.
|
2009-03-21 20:43:56 +00:00
|
|
|
*
|
Update libpcap to 1.1.1.
Changes:
Thu. April 1, 2010. guy@alum.mit.edu.
Summary for 1.1.1 libpcap release
Update CHANGES to reflect more of the changes in 1.1.0.
Fix build on RHEL5.
Fix shared library build on AIX.
Thu. March 11, 2010. ken@netfunctional.ca/guy@alum.mit.edu.
Summary for 1.1.0 libpcap release
Add SocketCAN capture support
Add Myricom SNF API support
Update Endace DAG and ERF support
Add support for shared libraries on Solaris, HP-UX, and AIX
Build, install, and un-install shared libraries by default;
don't build/install shared libraries on platforms we don't support
Fix building from a directory other than the source directory
Fix compiler warnings and builds on some platforms
Update config.guess and config.sub
Support monitor mode on mac80211 devices on Linux
Fix USB memory-mapped capturing on Linux; it requires a new DLT_
value
On Linux, scan /sys/class/net for devices if we have it; scan
it, or /proc/net/dev if we don't have /sys/class/net, even if
we have getifaddrs(), as it'll find interfaces with no
addresses
Add limited support for reading pcap-ng files
Fix BPF driver-loading error handling on AIX
Support getting the full-length interface description on FreeBSD
In the lexical analyzer, free up any addrinfo structure we got back
from getaddrinfo().
Add support for BPF and libdlpi in OpenSolaris (and SXCE)
Hyphenate "link-layer" everywhere
Add /sys/kernel/debug/usb/usbmon to the list of usbmon locations
In pcap_read_linux_mmap(), if there are no frames available, call
poll() even if we're in non-blocking mode, so we pick up
errors, and check for the errors in question.
Note that poll() works on BPF devices is Snow Leopard
If an ENXIO or ENETDOWN is received, it may mean the device has
gone away. Deal with it.
For BPF, raise the default capture buffer size to from 32k to 512k
Support ps_ifdrop on Linux
Added a bunch of #ifdef directives to make wpcap.dll (WinPcap) compile
under cygwin.
Changes to Linux mmapped captures.
Fix bug where create_ring would fail for particular snaplen and
buffer size combinations
Update pcap-config so that it handles libpcap requiring
additional libraries
Add workaround for threadsafeness on Windows
Add missing mapping for DLT_ENC <-> LINKTYPE_ENC
DLT: Add DLT_CAN_SOCKETCAN
DLT: Add Solaris ipnet
Don't check for DLT_IPNET if it's not defined
Add link-layer types for Fibre Channel FC-2
Add link-layer types for Wireless HART
Add link-layer types for AOS
Add link-layer types for DECT
Autoconf fixes (AIX, HP-UX, OSF/1, Tru64 cleanups)
Install headers unconditionally, and include vlan.h/bluetooth.h if
enabled
Autoconf fixes+cleanup
Support enabling/disabling bluetooth (--{en,dis}able-bluetooth)
Support disabling SITA support (--without-sita)
Return -1 on failure to create packet ring (if supported but
creation failed)
Fix handling of 'any' device, so that it can be opened, and no longer
attempt to open it in Monitor mode
Add support for snapshot length for USB Memory-Mapped Interface
Fix configure and build on recent Linux kernels
Fix memory-mapped Linux capture to support pcap_next() and
pcap_next_ex()
Fixes for Linux USB capture
DLT: Add DLT_LINUX_EVDEV
DLT: Add DLT_GSMTAP_UM
DLT: Add DLT_GSMTAP_ABIS
2010-10-28 16:22:13 +00:00
|
|
|
* It also appears that freedesktop.org's HAL offers an "info.product"
|
|
|
|
* string, but the HAL specification says it "should not be used in any
|
|
|
|
* UI" and "subsystem/capability specific properties" should be used
|
|
|
|
* instead and, in any case, I think HAL is being deprecated in
|
|
|
|
* favor of other stuff such as DeviceKit. DeviceKit doesn't appear
|
|
|
|
* to have any obvious product information for devices, but maybe
|
|
|
|
* I haven't looked hard enough.
|
2009-03-21 20:43:56 +00:00
|
|
|
*
|
Update libpcap to 1.1.1.
Changes:
Thu. April 1, 2010. guy@alum.mit.edu.
Summary for 1.1.1 libpcap release
Update CHANGES to reflect more of the changes in 1.1.0.
Fix build on RHEL5.
Fix shared library build on AIX.
Thu. March 11, 2010. ken@netfunctional.ca/guy@alum.mit.edu.
Summary for 1.1.0 libpcap release
Add SocketCAN capture support
Add Myricom SNF API support
Update Endace DAG and ERF support
Add support for shared libraries on Solaris, HP-UX, and AIX
Build, install, and un-install shared libraries by default;
don't build/install shared libraries on platforms we don't support
Fix building from a directory other than the source directory
Fix compiler warnings and builds on some platforms
Update config.guess and config.sub
Support monitor mode on mac80211 devices on Linux
Fix USB memory-mapped capturing on Linux; it requires a new DLT_
value
On Linux, scan /sys/class/net for devices if we have it; scan
it, or /proc/net/dev if we don't have /sys/class/net, even if
we have getifaddrs(), as it'll find interfaces with no
addresses
Add limited support for reading pcap-ng files
Fix BPF driver-loading error handling on AIX
Support getting the full-length interface description on FreeBSD
In the lexical analyzer, free up any addrinfo structure we got back
from getaddrinfo().
Add support for BPF and libdlpi in OpenSolaris (and SXCE)
Hyphenate "link-layer" everywhere
Add /sys/kernel/debug/usb/usbmon to the list of usbmon locations
In pcap_read_linux_mmap(), if there are no frames available, call
poll() even if we're in non-blocking mode, so we pick up
errors, and check for the errors in question.
Note that poll() works on BPF devices is Snow Leopard
If an ENXIO or ENETDOWN is received, it may mean the device has
gone away. Deal with it.
For BPF, raise the default capture buffer size to from 32k to 512k
Support ps_ifdrop on Linux
Added a bunch of #ifdef directives to make wpcap.dll (WinPcap) compile
under cygwin.
Changes to Linux mmapped captures.
Fix bug where create_ring would fail for particular snaplen and
buffer size combinations
Update pcap-config so that it handles libpcap requiring
additional libraries
Add workaround for threadsafeness on Windows
Add missing mapping for DLT_ENC <-> LINKTYPE_ENC
DLT: Add DLT_CAN_SOCKETCAN
DLT: Add Solaris ipnet
Don't check for DLT_IPNET if it's not defined
Add link-layer types for Fibre Channel FC-2
Add link-layer types for Wireless HART
Add link-layer types for AOS
Add link-layer types for DECT
Autoconf fixes (AIX, HP-UX, OSF/1, Tru64 cleanups)
Install headers unconditionally, and include vlan.h/bluetooth.h if
enabled
Autoconf fixes+cleanup
Support enabling/disabling bluetooth (--{en,dis}able-bluetooth)
Support disabling SITA support (--without-sita)
Return -1 on failure to create packet ring (if supported but
creation failed)
Fix handling of 'any' device, so that it can be opened, and no longer
attempt to open it in Monitor mode
Add support for snapshot length for USB Memory-Mapped Interface
Fix configure and build on recent Linux kernels
Fix memory-mapped Linux capture to support pcap_next() and
pcap_next_ex()
Fixes for Linux USB capture
DLT: Add DLT_LINUX_EVDEV
DLT: Add DLT_GSMTAP_UM
DLT: Add DLT_GSMTAP_ABIS
2010-10-28 16:22:13 +00:00
|
|
|
* Using the System Configuration framework, or HAL, or DeviceKit, or
|
|
|
|
* whatever, would require that libpcap applications be linked with
|
|
|
|
* the frameworks/libraries in question. That shouldn't be a problem
|
|
|
|
* for programs linking with the shared version of libpcap (unless
|
|
|
|
* you're running on AIX - which I think is the only UN*X that doesn't
|
|
|
|
* support linking a shared library with other libraries on which it
|
|
|
|
* depends, and having an executable linked only with the first shared
|
|
|
|
* library automatically pick up the other libraries when started -
|
|
|
|
* and using HAL or whatever). Programs linked with the static
|
|
|
|
* version of libpcap would have to use pcap-config with the --static
|
|
|
|
* flag in order to get the right linker flags in order to pick up
|
|
|
|
* the additional libraries/frameworks; those programs need that anyway
|
|
|
|
* for libpcap 1.1 and beyond on Linux, as, by default, it requires
|
|
|
|
* -lnl.
|
2009-03-21 20:43:56 +00:00
|
|
|
*
|
|
|
|
* Do any other UN*Xes, or desktop environments support getting a
|
|
|
|
* description?
|
|
|
|
*/
|
2004-03-31 09:07:39 +00:00
|
|
|
int
|
2005-05-29 17:46:52 +00:00
|
|
|
add_addr_to_iflist(pcap_if_t **alldevs, const char *name, u_int flags,
|
2004-03-31 09:07:39 +00:00
|
|
|
struct sockaddr *addr, size_t addr_size,
|
|
|
|
struct sockaddr *netmask, size_t netmask_size,
|
|
|
|
struct sockaddr *broadaddr, size_t broadaddr_size,
|
|
|
|
struct sockaddr *dstaddr, size_t dstaddr_size,
|
|
|
|
char *errbuf)
|
1996-08-19 20:36:34 +00:00
|
|
|
{
|
2002-06-21 01:36:27 +00:00
|
|
|
pcap_if_t *curdev;
|
2009-03-21 20:43:56 +00:00
|
|
|
char *description = NULL;
|
2002-06-21 01:36:27 +00:00
|
|
|
pcap_addr_t *curaddr, *prevaddr, *nextaddr;
|
2009-03-21 20:43:56 +00:00
|
|
|
#ifdef SIOCGIFDESCR
|
|
|
|
int s;
|
Update libpcap to 1.1.1.
Changes:
Thu. April 1, 2010. guy@alum.mit.edu.
Summary for 1.1.1 libpcap release
Update CHANGES to reflect more of the changes in 1.1.0.
Fix build on RHEL5.
Fix shared library build on AIX.
Thu. March 11, 2010. ken@netfunctional.ca/guy@alum.mit.edu.
Summary for 1.1.0 libpcap release
Add SocketCAN capture support
Add Myricom SNF API support
Update Endace DAG and ERF support
Add support for shared libraries on Solaris, HP-UX, and AIX
Build, install, and un-install shared libraries by default;
don't build/install shared libraries on platforms we don't support
Fix building from a directory other than the source directory
Fix compiler warnings and builds on some platforms
Update config.guess and config.sub
Support monitor mode on mac80211 devices on Linux
Fix USB memory-mapped capturing on Linux; it requires a new DLT_
value
On Linux, scan /sys/class/net for devices if we have it; scan
it, or /proc/net/dev if we don't have /sys/class/net, even if
we have getifaddrs(), as it'll find interfaces with no
addresses
Add limited support for reading pcap-ng files
Fix BPF driver-loading error handling on AIX
Support getting the full-length interface description on FreeBSD
In the lexical analyzer, free up any addrinfo structure we got back
from getaddrinfo().
Add support for BPF and libdlpi in OpenSolaris (and SXCE)
Hyphenate "link-layer" everywhere
Add /sys/kernel/debug/usb/usbmon to the list of usbmon locations
In pcap_read_linux_mmap(), if there are no frames available, call
poll() even if we're in non-blocking mode, so we pick up
errors, and check for the errors in question.
Note that poll() works on BPF devices is Snow Leopard
If an ENXIO or ENETDOWN is received, it may mean the device has
gone away. Deal with it.
For BPF, raise the default capture buffer size to from 32k to 512k
Support ps_ifdrop on Linux
Added a bunch of #ifdef directives to make wpcap.dll (WinPcap) compile
under cygwin.
Changes to Linux mmapped captures.
Fix bug where create_ring would fail for particular snaplen and
buffer size combinations
Update pcap-config so that it handles libpcap requiring
additional libraries
Add workaround for threadsafeness on Windows
Add missing mapping for DLT_ENC <-> LINKTYPE_ENC
DLT: Add DLT_CAN_SOCKETCAN
DLT: Add Solaris ipnet
Don't check for DLT_IPNET if it's not defined
Add link-layer types for Fibre Channel FC-2
Add link-layer types for Wireless HART
Add link-layer types for AOS
Add link-layer types for DECT
Autoconf fixes (AIX, HP-UX, OSF/1, Tru64 cleanups)
Install headers unconditionally, and include vlan.h/bluetooth.h if
enabled
Autoconf fixes+cleanup
Support enabling/disabling bluetooth (--{en,dis}able-bluetooth)
Support disabling SITA support (--without-sita)
Return -1 on failure to create packet ring (if supported but
creation failed)
Fix handling of 'any' device, so that it can be opened, and no longer
attempt to open it in Monitor mode
Add support for snapshot length for USB Memory-Mapped Interface
Fix configure and build on recent Linux kernels
Fix memory-mapped Linux capture to support pcap_next() and
pcap_next_ex()
Fixes for Linux USB capture
DLT: Add DLT_LINUX_EVDEV
DLT: Add DLT_GSMTAP_UM
DLT: Add DLT_GSMTAP_ABIS
2010-10-28 16:22:13 +00:00
|
|
|
struct ifreq ifrdesc;
|
|
|
|
#ifndef IFDESCRSIZE
|
|
|
|
size_t descrlen = 64;
|
|
|
|
#else
|
|
|
|
size_t descrlen = IFDESCRSIZE;
|
|
|
|
#endif /* IFDESCRSIZE */
|
|
|
|
#endif /* SIOCGIFDESCR */
|
2002-06-21 01:36:27 +00:00
|
|
|
|
2009-03-21 20:43:56 +00:00
|
|
|
#ifdef SIOCGIFDESCR
|
|
|
|
/*
|
|
|
|
* Get the description for the interface.
|
|
|
|
*/
|
|
|
|
memset(&ifrdesc, 0, sizeof ifrdesc);
|
|
|
|
strlcpy(ifrdesc.ifr_name, name, sizeof ifrdesc.ifr_name);
|
|
|
|
s = socket(AF_INET, SOCK_DGRAM, 0);
|
|
|
|
if (s >= 0) {
|
2011-03-11 00:38:07 +00:00
|
|
|
#ifdef __FreeBSD__
|
|
|
|
/*
|
|
|
|
* On FreeBSD, if the buffer isn't big enough for the
|
|
|
|
* description, the ioctl succeeds, but the description
|
|
|
|
* isn't copied, ifr_buffer.length is set to the description
|
|
|
|
* length, and ifr_buffer.buffer is set to NULL.
|
|
|
|
*/
|
Update libpcap to 1.1.1.
Changes:
Thu. April 1, 2010. guy@alum.mit.edu.
Summary for 1.1.1 libpcap release
Update CHANGES to reflect more of the changes in 1.1.0.
Fix build on RHEL5.
Fix shared library build on AIX.
Thu. March 11, 2010. ken@netfunctional.ca/guy@alum.mit.edu.
Summary for 1.1.0 libpcap release
Add SocketCAN capture support
Add Myricom SNF API support
Update Endace DAG and ERF support
Add support for shared libraries on Solaris, HP-UX, and AIX
Build, install, and un-install shared libraries by default;
don't build/install shared libraries on platforms we don't support
Fix building from a directory other than the source directory
Fix compiler warnings and builds on some platforms
Update config.guess and config.sub
Support monitor mode on mac80211 devices on Linux
Fix USB memory-mapped capturing on Linux; it requires a new DLT_
value
On Linux, scan /sys/class/net for devices if we have it; scan
it, or /proc/net/dev if we don't have /sys/class/net, even if
we have getifaddrs(), as it'll find interfaces with no
addresses
Add limited support for reading pcap-ng files
Fix BPF driver-loading error handling on AIX
Support getting the full-length interface description on FreeBSD
In the lexical analyzer, free up any addrinfo structure we got back
from getaddrinfo().
Add support for BPF and libdlpi in OpenSolaris (and SXCE)
Hyphenate "link-layer" everywhere
Add /sys/kernel/debug/usb/usbmon to the list of usbmon locations
In pcap_read_linux_mmap(), if there are no frames available, call
poll() even if we're in non-blocking mode, so we pick up
errors, and check for the errors in question.
Note that poll() works on BPF devices is Snow Leopard
If an ENXIO or ENETDOWN is received, it may mean the device has
gone away. Deal with it.
For BPF, raise the default capture buffer size to from 32k to 512k
Support ps_ifdrop on Linux
Added a bunch of #ifdef directives to make wpcap.dll (WinPcap) compile
under cygwin.
Changes to Linux mmapped captures.
Fix bug where create_ring would fail for particular snaplen and
buffer size combinations
Update pcap-config so that it handles libpcap requiring
additional libraries
Add workaround for threadsafeness on Windows
Add missing mapping for DLT_ENC <-> LINKTYPE_ENC
DLT: Add DLT_CAN_SOCKETCAN
DLT: Add Solaris ipnet
Don't check for DLT_IPNET if it's not defined
Add link-layer types for Fibre Channel FC-2
Add link-layer types for Wireless HART
Add link-layer types for AOS
Add link-layer types for DECT
Autoconf fixes (AIX, HP-UX, OSF/1, Tru64 cleanups)
Install headers unconditionally, and include vlan.h/bluetooth.h if
enabled
Autoconf fixes+cleanup
Support enabling/disabling bluetooth (--{en,dis}able-bluetooth)
Support disabling SITA support (--without-sita)
Return -1 on failure to create packet ring (if supported but
creation failed)
Fix handling of 'any' device, so that it can be opened, and no longer
attempt to open it in Monitor mode
Add support for snapshot length for USB Memory-Mapped Interface
Fix configure and build on recent Linux kernels
Fix memory-mapped Linux capture to support pcap_next() and
pcap_next_ex()
Fixes for Linux USB capture
DLT: Add DLT_LINUX_EVDEV
DLT: Add DLT_GSMTAP_UM
DLT: Add DLT_GSMTAP_ABIS
2010-10-28 16:22:13 +00:00
|
|
|
for (;;) {
|
|
|
|
free(description);
|
|
|
|
if ((description = malloc(descrlen)) != NULL) {
|
|
|
|
ifrdesc.ifr_buffer.buffer = description;
|
|
|
|
ifrdesc.ifr_buffer.length = descrlen;
|
2011-03-11 00:38:07 +00:00
|
|
|
if (ioctl(s, SIOCGIFDESCR, &ifrdesc) == 0) {
|
|
|
|
if (ifrdesc.ifr_buffer.buffer ==
|
|
|
|
description)
|
|
|
|
break;
|
|
|
|
else
|
|
|
|
descrlen = ifrdesc.ifr_buffer.length;
|
|
|
|
} else {
|
|
|
|
/*
|
|
|
|
* Failed to get interface description.
|
|
|
|
*/
|
|
|
|
free(description);
|
|
|
|
description = NULL;
|
Update libpcap to 1.1.1.
Changes:
Thu. April 1, 2010. guy@alum.mit.edu.
Summary for 1.1.1 libpcap release
Update CHANGES to reflect more of the changes in 1.1.0.
Fix build on RHEL5.
Fix shared library build on AIX.
Thu. March 11, 2010. ken@netfunctional.ca/guy@alum.mit.edu.
Summary for 1.1.0 libpcap release
Add SocketCAN capture support
Add Myricom SNF API support
Update Endace DAG and ERF support
Add support for shared libraries on Solaris, HP-UX, and AIX
Build, install, and un-install shared libraries by default;
don't build/install shared libraries on platforms we don't support
Fix building from a directory other than the source directory
Fix compiler warnings and builds on some platforms
Update config.guess and config.sub
Support monitor mode on mac80211 devices on Linux
Fix USB memory-mapped capturing on Linux; it requires a new DLT_
value
On Linux, scan /sys/class/net for devices if we have it; scan
it, or /proc/net/dev if we don't have /sys/class/net, even if
we have getifaddrs(), as it'll find interfaces with no
addresses
Add limited support for reading pcap-ng files
Fix BPF driver-loading error handling on AIX
Support getting the full-length interface description on FreeBSD
In the lexical analyzer, free up any addrinfo structure we got back
from getaddrinfo().
Add support for BPF and libdlpi in OpenSolaris (and SXCE)
Hyphenate "link-layer" everywhere
Add /sys/kernel/debug/usb/usbmon to the list of usbmon locations
In pcap_read_linux_mmap(), if there are no frames available, call
poll() even if we're in non-blocking mode, so we pick up
errors, and check for the errors in question.
Note that poll() works on BPF devices is Snow Leopard
If an ENXIO or ENETDOWN is received, it may mean the device has
gone away. Deal with it.
For BPF, raise the default capture buffer size to from 32k to 512k
Support ps_ifdrop on Linux
Added a bunch of #ifdef directives to make wpcap.dll (WinPcap) compile
under cygwin.
Changes to Linux mmapped captures.
Fix bug where create_ring would fail for particular snaplen and
buffer size combinations
Update pcap-config so that it handles libpcap requiring
additional libraries
Add workaround for threadsafeness on Windows
Add missing mapping for DLT_ENC <-> LINKTYPE_ENC
DLT: Add DLT_CAN_SOCKETCAN
DLT: Add Solaris ipnet
Don't check for DLT_IPNET if it's not defined
Add link-layer types for Fibre Channel FC-2
Add link-layer types for Wireless HART
Add link-layer types for AOS
Add link-layer types for DECT
Autoconf fixes (AIX, HP-UX, OSF/1, Tru64 cleanups)
Install headers unconditionally, and include vlan.h/bluetooth.h if
enabled
Autoconf fixes+cleanup
Support enabling/disabling bluetooth (--{en,dis}able-bluetooth)
Support disabling SITA support (--without-sita)
Return -1 on failure to create packet ring (if supported but
creation failed)
Fix handling of 'any' device, so that it can be opened, and no longer
attempt to open it in Monitor mode
Add support for snapshot length for USB Memory-Mapped Interface
Fix configure and build on recent Linux kernels
Fix memory-mapped Linux capture to support pcap_next() and
pcap_next_ex()
Fixes for Linux USB capture
DLT: Add DLT_LINUX_EVDEV
DLT: Add DLT_GSMTAP_UM
DLT: Add DLT_GSMTAP_ABIS
2010-10-28 16:22:13 +00:00
|
|
|
break;
|
2011-03-11 00:38:07 +00:00
|
|
|
}
|
Update libpcap to 1.1.1.
Changes:
Thu. April 1, 2010. guy@alum.mit.edu.
Summary for 1.1.1 libpcap release
Update CHANGES to reflect more of the changes in 1.1.0.
Fix build on RHEL5.
Fix shared library build on AIX.
Thu. March 11, 2010. ken@netfunctional.ca/guy@alum.mit.edu.
Summary for 1.1.0 libpcap release
Add SocketCAN capture support
Add Myricom SNF API support
Update Endace DAG and ERF support
Add support for shared libraries on Solaris, HP-UX, and AIX
Build, install, and un-install shared libraries by default;
don't build/install shared libraries on platforms we don't support
Fix building from a directory other than the source directory
Fix compiler warnings and builds on some platforms
Update config.guess and config.sub
Support monitor mode on mac80211 devices on Linux
Fix USB memory-mapped capturing on Linux; it requires a new DLT_
value
On Linux, scan /sys/class/net for devices if we have it; scan
it, or /proc/net/dev if we don't have /sys/class/net, even if
we have getifaddrs(), as it'll find interfaces with no
addresses
Add limited support for reading pcap-ng files
Fix BPF driver-loading error handling on AIX
Support getting the full-length interface description on FreeBSD
In the lexical analyzer, free up any addrinfo structure we got back
from getaddrinfo().
Add support for BPF and libdlpi in OpenSolaris (and SXCE)
Hyphenate "link-layer" everywhere
Add /sys/kernel/debug/usb/usbmon to the list of usbmon locations
In pcap_read_linux_mmap(), if there are no frames available, call
poll() even if we're in non-blocking mode, so we pick up
errors, and check for the errors in question.
Note that poll() works on BPF devices is Snow Leopard
If an ENXIO or ENETDOWN is received, it may mean the device has
gone away. Deal with it.
For BPF, raise the default capture buffer size to from 32k to 512k
Support ps_ifdrop on Linux
Added a bunch of #ifdef directives to make wpcap.dll (WinPcap) compile
under cygwin.
Changes to Linux mmapped captures.
Fix bug where create_ring would fail for particular snaplen and
buffer size combinations
Update pcap-config so that it handles libpcap requiring
additional libraries
Add workaround for threadsafeness on Windows
Add missing mapping for DLT_ENC <-> LINKTYPE_ENC
DLT: Add DLT_CAN_SOCKETCAN
DLT: Add Solaris ipnet
Don't check for DLT_IPNET if it's not defined
Add link-layer types for Fibre Channel FC-2
Add link-layer types for Wireless HART
Add link-layer types for AOS
Add link-layer types for DECT
Autoconf fixes (AIX, HP-UX, OSF/1, Tru64 cleanups)
Install headers unconditionally, and include vlan.h/bluetooth.h if
enabled
Autoconf fixes+cleanup
Support enabling/disabling bluetooth (--{en,dis}able-bluetooth)
Support disabling SITA support (--without-sita)
Return -1 on failure to create packet ring (if supported but
creation failed)
Fix handling of 'any' device, so that it can be opened, and no longer
attempt to open it in Monitor mode
Add support for snapshot length for USB Memory-Mapped Interface
Fix configure and build on recent Linux kernels
Fix memory-mapped Linux capture to support pcap_next() and
pcap_next_ex()
Fixes for Linux USB capture
DLT: Add DLT_LINUX_EVDEV
DLT: Add DLT_GSMTAP_UM
DLT: Add DLT_GSMTAP_ABIS
2010-10-28 16:22:13 +00:00
|
|
|
} else
|
|
|
|
break;
|
|
|
|
}
|
2011-03-11 00:38:07 +00:00
|
|
|
#else /* __FreeBSD__ */
|
|
|
|
/*
|
|
|
|
* The only other OS that currently supports
|
|
|
|
* SIOCGIFDESCR is OpenBSD, and it has no way
|
|
|
|
* to get the description length - it's clamped
|
|
|
|
* to a maximum of IFDESCRSIZE.
|
|
|
|
*/
|
|
|
|
if ((description = malloc(descrlen)) != NULL) {
|
|
|
|
ifrdesc.ifr_data = (caddr_t)description;
|
|
|
|
if (ioctl(s, SIOCGIFDESCR, &ifrdesc) != 0) {
|
|
|
|
/*
|
|
|
|
* Failed to get interface description.
|
|
|
|
*/
|
|
|
|
free(description);
|
|
|
|
description = NULL;
|
|
|
|
}
|
|
|
|
} else
|
|
|
|
break;
|
|
|
|
#endif /* __FreeBSD__ */
|
2009-03-21 20:43:56 +00:00
|
|
|
close(s);
|
Update libpcap to 1.1.1.
Changes:
Thu. April 1, 2010. guy@alum.mit.edu.
Summary for 1.1.1 libpcap release
Update CHANGES to reflect more of the changes in 1.1.0.
Fix build on RHEL5.
Fix shared library build on AIX.
Thu. March 11, 2010. ken@netfunctional.ca/guy@alum.mit.edu.
Summary for 1.1.0 libpcap release
Add SocketCAN capture support
Add Myricom SNF API support
Update Endace DAG and ERF support
Add support for shared libraries on Solaris, HP-UX, and AIX
Build, install, and un-install shared libraries by default;
don't build/install shared libraries on platforms we don't support
Fix building from a directory other than the source directory
Fix compiler warnings and builds on some platforms
Update config.guess and config.sub
Support monitor mode on mac80211 devices on Linux
Fix USB memory-mapped capturing on Linux; it requires a new DLT_
value
On Linux, scan /sys/class/net for devices if we have it; scan
it, or /proc/net/dev if we don't have /sys/class/net, even if
we have getifaddrs(), as it'll find interfaces with no
addresses
Add limited support for reading pcap-ng files
Fix BPF driver-loading error handling on AIX
Support getting the full-length interface description on FreeBSD
In the lexical analyzer, free up any addrinfo structure we got back
from getaddrinfo().
Add support for BPF and libdlpi in OpenSolaris (and SXCE)
Hyphenate "link-layer" everywhere
Add /sys/kernel/debug/usb/usbmon to the list of usbmon locations
In pcap_read_linux_mmap(), if there are no frames available, call
poll() even if we're in non-blocking mode, so we pick up
errors, and check for the errors in question.
Note that poll() works on BPF devices is Snow Leopard
If an ENXIO or ENETDOWN is received, it may mean the device has
gone away. Deal with it.
For BPF, raise the default capture buffer size to from 32k to 512k
Support ps_ifdrop on Linux
Added a bunch of #ifdef directives to make wpcap.dll (WinPcap) compile
under cygwin.
Changes to Linux mmapped captures.
Fix bug where create_ring would fail for particular snaplen and
buffer size combinations
Update pcap-config so that it handles libpcap requiring
additional libraries
Add workaround for threadsafeness on Windows
Add missing mapping for DLT_ENC <-> LINKTYPE_ENC
DLT: Add DLT_CAN_SOCKETCAN
DLT: Add Solaris ipnet
Don't check for DLT_IPNET if it's not defined
Add link-layer types for Fibre Channel FC-2
Add link-layer types for Wireless HART
Add link-layer types for AOS
Add link-layer types for DECT
Autoconf fixes (AIX, HP-UX, OSF/1, Tru64 cleanups)
Install headers unconditionally, and include vlan.h/bluetooth.h if
enabled
Autoconf fixes+cleanup
Support enabling/disabling bluetooth (--{en,dis}able-bluetooth)
Support disabling SITA support (--without-sita)
Return -1 on failure to create packet ring (if supported but
creation failed)
Fix handling of 'any' device, so that it can be opened, and no longer
attempt to open it in Monitor mode
Add support for snapshot length for USB Memory-Mapped Interface
Fix configure and build on recent Linux kernels
Fix memory-mapped Linux capture to support pcap_next() and
pcap_next_ex()
Fixes for Linux USB capture
DLT: Add DLT_LINUX_EVDEV
DLT: Add DLT_GSMTAP_UM
DLT: Add DLT_GSMTAP_ABIS
2010-10-28 16:22:13 +00:00
|
|
|
if (description != NULL && strlen(description) == 0) {
|
|
|
|
free(description);
|
|
|
|
description = NULL;
|
|
|
|
}
|
2009-03-21 20:43:56 +00:00
|
|
|
}
|
Update libpcap to 1.1.1.
Changes:
Thu. April 1, 2010. guy@alum.mit.edu.
Summary for 1.1.1 libpcap release
Update CHANGES to reflect more of the changes in 1.1.0.
Fix build on RHEL5.
Fix shared library build on AIX.
Thu. March 11, 2010. ken@netfunctional.ca/guy@alum.mit.edu.
Summary for 1.1.0 libpcap release
Add SocketCAN capture support
Add Myricom SNF API support
Update Endace DAG and ERF support
Add support for shared libraries on Solaris, HP-UX, and AIX
Build, install, and un-install shared libraries by default;
don't build/install shared libraries on platforms we don't support
Fix building from a directory other than the source directory
Fix compiler warnings and builds on some platforms
Update config.guess and config.sub
Support monitor mode on mac80211 devices on Linux
Fix USB memory-mapped capturing on Linux; it requires a new DLT_
value
On Linux, scan /sys/class/net for devices if we have it; scan
it, or /proc/net/dev if we don't have /sys/class/net, even if
we have getifaddrs(), as it'll find interfaces with no
addresses
Add limited support for reading pcap-ng files
Fix BPF driver-loading error handling on AIX
Support getting the full-length interface description on FreeBSD
In the lexical analyzer, free up any addrinfo structure we got back
from getaddrinfo().
Add support for BPF and libdlpi in OpenSolaris (and SXCE)
Hyphenate "link-layer" everywhere
Add /sys/kernel/debug/usb/usbmon to the list of usbmon locations
In pcap_read_linux_mmap(), if there are no frames available, call
poll() even if we're in non-blocking mode, so we pick up
errors, and check for the errors in question.
Note that poll() works on BPF devices is Snow Leopard
If an ENXIO or ENETDOWN is received, it may mean the device has
gone away. Deal with it.
For BPF, raise the default capture buffer size to from 32k to 512k
Support ps_ifdrop on Linux
Added a bunch of #ifdef directives to make wpcap.dll (WinPcap) compile
under cygwin.
Changes to Linux mmapped captures.
Fix bug where create_ring would fail for particular snaplen and
buffer size combinations
Update pcap-config so that it handles libpcap requiring
additional libraries
Add workaround for threadsafeness on Windows
Add missing mapping for DLT_ENC <-> LINKTYPE_ENC
DLT: Add DLT_CAN_SOCKETCAN
DLT: Add Solaris ipnet
Don't check for DLT_IPNET if it's not defined
Add link-layer types for Fibre Channel FC-2
Add link-layer types for Wireless HART
Add link-layer types for AOS
Add link-layer types for DECT
Autoconf fixes (AIX, HP-UX, OSF/1, Tru64 cleanups)
Install headers unconditionally, and include vlan.h/bluetooth.h if
enabled
Autoconf fixes+cleanup
Support enabling/disabling bluetooth (--{en,dis}able-bluetooth)
Support disabling SITA support (--without-sita)
Return -1 on failure to create packet ring (if supported but
creation failed)
Fix handling of 'any' device, so that it can be opened, and no longer
attempt to open it in Monitor mode
Add support for snapshot length for USB Memory-Mapped Interface
Fix configure and build on recent Linux kernels
Fix memory-mapped Linux capture to support pcap_next() and
pcap_next_ex()
Fixes for Linux USB capture
DLT: Add DLT_LINUX_EVDEV
DLT: Add DLT_GSMTAP_UM
DLT: Add DLT_GSMTAP_ABIS
2010-10-28 16:22:13 +00:00
|
|
|
#endif /* SIOCGIFDESCR */
|
2009-03-21 20:43:56 +00:00
|
|
|
|
|
|
|
if (add_or_find_if(&curdev, alldevs, name, flags, description,
|
|
|
|
errbuf) == -1) {
|
Update libpcap to 1.1.1.
Changes:
Thu. April 1, 2010. guy@alum.mit.edu.
Summary for 1.1.1 libpcap release
Update CHANGES to reflect more of the changes in 1.1.0.
Fix build on RHEL5.
Fix shared library build on AIX.
Thu. March 11, 2010. ken@netfunctional.ca/guy@alum.mit.edu.
Summary for 1.1.0 libpcap release
Add SocketCAN capture support
Add Myricom SNF API support
Update Endace DAG and ERF support
Add support for shared libraries on Solaris, HP-UX, and AIX
Build, install, and un-install shared libraries by default;
don't build/install shared libraries on platforms we don't support
Fix building from a directory other than the source directory
Fix compiler warnings and builds on some platforms
Update config.guess and config.sub
Support monitor mode on mac80211 devices on Linux
Fix USB memory-mapped capturing on Linux; it requires a new DLT_
value
On Linux, scan /sys/class/net for devices if we have it; scan
it, or /proc/net/dev if we don't have /sys/class/net, even if
we have getifaddrs(), as it'll find interfaces with no
addresses
Add limited support for reading pcap-ng files
Fix BPF driver-loading error handling on AIX
Support getting the full-length interface description on FreeBSD
In the lexical analyzer, free up any addrinfo structure we got back
from getaddrinfo().
Add support for BPF and libdlpi in OpenSolaris (and SXCE)
Hyphenate "link-layer" everywhere
Add /sys/kernel/debug/usb/usbmon to the list of usbmon locations
In pcap_read_linux_mmap(), if there are no frames available, call
poll() even if we're in non-blocking mode, so we pick up
errors, and check for the errors in question.
Note that poll() works on BPF devices is Snow Leopard
If an ENXIO or ENETDOWN is received, it may mean the device has
gone away. Deal with it.
For BPF, raise the default capture buffer size to from 32k to 512k
Support ps_ifdrop on Linux
Added a bunch of #ifdef directives to make wpcap.dll (WinPcap) compile
under cygwin.
Changes to Linux mmapped captures.
Fix bug where create_ring would fail for particular snaplen and
buffer size combinations
Update pcap-config so that it handles libpcap requiring
additional libraries
Add workaround for threadsafeness on Windows
Add missing mapping for DLT_ENC <-> LINKTYPE_ENC
DLT: Add DLT_CAN_SOCKETCAN
DLT: Add Solaris ipnet
Don't check for DLT_IPNET if it's not defined
Add link-layer types for Fibre Channel FC-2
Add link-layer types for Wireless HART
Add link-layer types for AOS
Add link-layer types for DECT
Autoconf fixes (AIX, HP-UX, OSF/1, Tru64 cleanups)
Install headers unconditionally, and include vlan.h/bluetooth.h if
enabled
Autoconf fixes+cleanup
Support enabling/disabling bluetooth (--{en,dis}able-bluetooth)
Support disabling SITA support (--without-sita)
Return -1 on failure to create packet ring (if supported but
creation failed)
Fix handling of 'any' device, so that it can be opened, and no longer
attempt to open it in Monitor mode
Add support for snapshot length for USB Memory-Mapped Interface
Fix configure and build on recent Linux kernels
Fix memory-mapped Linux capture to support pcap_next() and
pcap_next_ex()
Fixes for Linux USB capture
DLT: Add DLT_LINUX_EVDEV
DLT: Add DLT_GSMTAP_UM
DLT: Add DLT_GSMTAP_ABIS
2010-10-28 16:22:13 +00:00
|
|
|
free(description);
|
2002-06-21 01:36:27 +00:00
|
|
|
/*
|
|
|
|
* Error - give up.
|
|
|
|
*/
|
|
|
|
return (-1);
|
|
|
|
}
|
Update libpcap to 1.1.1.
Changes:
Thu. April 1, 2010. guy@alum.mit.edu.
Summary for 1.1.1 libpcap release
Update CHANGES to reflect more of the changes in 1.1.0.
Fix build on RHEL5.
Fix shared library build on AIX.
Thu. March 11, 2010. ken@netfunctional.ca/guy@alum.mit.edu.
Summary for 1.1.0 libpcap release
Add SocketCAN capture support
Add Myricom SNF API support
Update Endace DAG and ERF support
Add support for shared libraries on Solaris, HP-UX, and AIX
Build, install, and un-install shared libraries by default;
don't build/install shared libraries on platforms we don't support
Fix building from a directory other than the source directory
Fix compiler warnings and builds on some platforms
Update config.guess and config.sub
Support monitor mode on mac80211 devices on Linux
Fix USB memory-mapped capturing on Linux; it requires a new DLT_
value
On Linux, scan /sys/class/net for devices if we have it; scan
it, or /proc/net/dev if we don't have /sys/class/net, even if
we have getifaddrs(), as it'll find interfaces with no
addresses
Add limited support for reading pcap-ng files
Fix BPF driver-loading error handling on AIX
Support getting the full-length interface description on FreeBSD
In the lexical analyzer, free up any addrinfo structure we got back
from getaddrinfo().
Add support for BPF and libdlpi in OpenSolaris (and SXCE)
Hyphenate "link-layer" everywhere
Add /sys/kernel/debug/usb/usbmon to the list of usbmon locations
In pcap_read_linux_mmap(), if there are no frames available, call
poll() even if we're in non-blocking mode, so we pick up
errors, and check for the errors in question.
Note that poll() works on BPF devices is Snow Leopard
If an ENXIO or ENETDOWN is received, it may mean the device has
gone away. Deal with it.
For BPF, raise the default capture buffer size to from 32k to 512k
Support ps_ifdrop on Linux
Added a bunch of #ifdef directives to make wpcap.dll (WinPcap) compile
under cygwin.
Changes to Linux mmapped captures.
Fix bug where create_ring would fail for particular snaplen and
buffer size combinations
Update pcap-config so that it handles libpcap requiring
additional libraries
Add workaround for threadsafeness on Windows
Add missing mapping for DLT_ENC <-> LINKTYPE_ENC
DLT: Add DLT_CAN_SOCKETCAN
DLT: Add Solaris ipnet
Don't check for DLT_IPNET if it's not defined
Add link-layer types for Fibre Channel FC-2
Add link-layer types for Wireless HART
Add link-layer types for AOS
Add link-layer types for DECT
Autoconf fixes (AIX, HP-UX, OSF/1, Tru64 cleanups)
Install headers unconditionally, and include vlan.h/bluetooth.h if
enabled
Autoconf fixes+cleanup
Support enabling/disabling bluetooth (--{en,dis}able-bluetooth)
Support disabling SITA support (--without-sita)
Return -1 on failure to create packet ring (if supported but
creation failed)
Fix handling of 'any' device, so that it can be opened, and no longer
attempt to open it in Monitor mode
Add support for snapshot length for USB Memory-Mapped Interface
Fix configure and build on recent Linux kernels
Fix memory-mapped Linux capture to support pcap_next() and
pcap_next_ex()
Fixes for Linux USB capture
DLT: Add DLT_LINUX_EVDEV
DLT: Add DLT_GSMTAP_UM
DLT: Add DLT_GSMTAP_ABIS
2010-10-28 16:22:13 +00:00
|
|
|
free(description);
|
2002-06-21 01:36:27 +00:00
|
|
|
if (curdev == NULL) {
|
|
|
|
/*
|
|
|
|
* Device wasn't added because it can't be opened.
|
|
|
|
* Not a fatal error.
|
|
|
|
*/
|
|
|
|
return (0);
|
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
* "curdev" is an entry for this interface; add an entry for this
|
|
|
|
* address to its list of addresses.
|
|
|
|
*
|
|
|
|
* Allocate the new entry and fill it in.
|
|
|
|
*/
|
|
|
|
curaddr = malloc(sizeof(pcap_addr_t));
|
|
|
|
if (curaddr == NULL) {
|
|
|
|
(void)snprintf(errbuf, PCAP_ERRBUF_SIZE,
|
|
|
|
"malloc: %s", pcap_strerror(errno));
|
|
|
|
return (-1);
|
|
|
|
}
|
|
|
|
|
|
|
|
curaddr->next = NULL;
|
|
|
|
if (addr != NULL) {
|
2004-03-31 09:07:39 +00:00
|
|
|
curaddr->addr = dup_sockaddr(addr, addr_size);
|
2002-06-21 01:36:27 +00:00
|
|
|
if (curaddr->addr == NULL) {
|
|
|
|
(void)snprintf(errbuf, PCAP_ERRBUF_SIZE,
|
|
|
|
"malloc: %s", pcap_strerror(errno));
|
|
|
|
free(curaddr);
|
|
|
|
return (-1);
|
|
|
|
}
|
|
|
|
} else
|
|
|
|
curaddr->addr = NULL;
|
|
|
|
|
|
|
|
if (netmask != NULL) {
|
2004-03-31 09:07:39 +00:00
|
|
|
curaddr->netmask = dup_sockaddr(netmask, netmask_size);
|
2002-06-21 01:36:27 +00:00
|
|
|
if (curaddr->netmask == NULL) {
|
|
|
|
(void)snprintf(errbuf, PCAP_ERRBUF_SIZE,
|
|
|
|
"malloc: %s", pcap_strerror(errno));
|
2007-10-16 02:02:02 +00:00
|
|
|
if (curaddr->addr != NULL)
|
|
|
|
free(curaddr->addr);
|
2002-06-21 01:36:27 +00:00
|
|
|
free(curaddr);
|
|
|
|
return (-1);
|
|
|
|
}
|
|
|
|
} else
|
|
|
|
curaddr->netmask = NULL;
|
2004-03-31 09:07:39 +00:00
|
|
|
|
2002-06-21 01:36:27 +00:00
|
|
|
if (broadaddr != NULL) {
|
2004-03-31 09:07:39 +00:00
|
|
|
curaddr->broadaddr = dup_sockaddr(broadaddr, broadaddr_size);
|
2002-06-21 01:36:27 +00:00
|
|
|
if (curaddr->broadaddr == NULL) {
|
|
|
|
(void)snprintf(errbuf, PCAP_ERRBUF_SIZE,
|
|
|
|
"malloc: %s", pcap_strerror(errno));
|
2007-10-16 02:02:02 +00:00
|
|
|
if (curaddr->netmask != NULL)
|
|
|
|
free(curaddr->netmask);
|
|
|
|
if (curaddr->addr != NULL)
|
|
|
|
free(curaddr->addr);
|
2002-06-21 01:36:27 +00:00
|
|
|
free(curaddr);
|
|
|
|
return (-1);
|
|
|
|
}
|
|
|
|
} else
|
|
|
|
curaddr->broadaddr = NULL;
|
2004-03-31 09:07:39 +00:00
|
|
|
|
2002-06-21 01:36:27 +00:00
|
|
|
if (dstaddr != NULL) {
|
2004-03-31 09:07:39 +00:00
|
|
|
curaddr->dstaddr = dup_sockaddr(dstaddr, dstaddr_size);
|
2002-06-21 01:36:27 +00:00
|
|
|
if (curaddr->dstaddr == NULL) {
|
|
|
|
(void)snprintf(errbuf, PCAP_ERRBUF_SIZE,
|
|
|
|
"malloc: %s", pcap_strerror(errno));
|
2007-10-16 02:02:02 +00:00
|
|
|
if (curaddr->broadaddr != NULL)
|
|
|
|
free(curaddr->broadaddr);
|
|
|
|
if (curaddr->netmask != NULL)
|
|
|
|
free(curaddr->netmask);
|
|
|
|
if (curaddr->addr != NULL)
|
|
|
|
free(curaddr->addr);
|
2002-06-21 01:36:27 +00:00
|
|
|
free(curaddr);
|
|
|
|
return (-1);
|
|
|
|
}
|
|
|
|
} else
|
|
|
|
curaddr->dstaddr = NULL;
|
2004-03-31 09:07:39 +00:00
|
|
|
|
2002-06-21 01:36:27 +00:00
|
|
|
/*
|
|
|
|
* Find the end of the list of addresses.
|
|
|
|
*/
|
|
|
|
for (prevaddr = curdev->addresses; prevaddr != NULL; prevaddr = nextaddr) {
|
|
|
|
nextaddr = prevaddr->next;
|
|
|
|
if (nextaddr == NULL) {
|
|
|
|
/*
|
|
|
|
* This is the end of the list.
|
|
|
|
*/
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (prevaddr == NULL) {
|
|
|
|
/*
|
|
|
|
* The list was empty; this is the first member.
|
|
|
|
*/
|
|
|
|
curdev->addresses = curaddr;
|
|
|
|
} else {
|
|
|
|
/*
|
|
|
|
* "prevaddr" is the last member of the list; append
|
|
|
|
* this member to it.
|
|
|
|
*/
|
|
|
|
prevaddr->next = curaddr;
|
|
|
|
}
|
|
|
|
|
|
|
|
return (0);
|
|
|
|
}
|
|
|
|
|
2004-03-31 09:07:39 +00:00
|
|
|
int
|
2005-05-29 17:46:52 +00:00
|
|
|
pcap_add_if(pcap_if_t **devlist, const char *name, u_int flags,
|
2002-06-21 01:36:27 +00:00
|
|
|
const char *description, char *errbuf)
|
|
|
|
{
|
|
|
|
pcap_if_t *curdev;
|
|
|
|
|
|
|
|
return (add_or_find_if(&curdev, devlist, name, flags, description,
|
|
|
|
errbuf));
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Free a list of interfaces.
|
|
|
|
*/
|
|
|
|
void
|
|
|
|
pcap_freealldevs(pcap_if_t *alldevs)
|
|
|
|
{
|
|
|
|
pcap_if_t *curdev, *nextdev;
|
|
|
|
pcap_addr_t *curaddr, *nextaddr;
|
|
|
|
|
|
|
|
for (curdev = alldevs; curdev != NULL; curdev = nextdev) {
|
|
|
|
nextdev = curdev->next;
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Free all addresses.
|
|
|
|
*/
|
|
|
|
for (curaddr = curdev->addresses; curaddr != NULL; curaddr = nextaddr) {
|
|
|
|
nextaddr = curaddr->next;
|
|
|
|
if (curaddr->addr)
|
|
|
|
free(curaddr->addr);
|
|
|
|
if (curaddr->netmask)
|
|
|
|
free(curaddr->netmask);
|
|
|
|
if (curaddr->broadaddr)
|
|
|
|
free(curaddr->broadaddr);
|
|
|
|
if (curaddr->dstaddr)
|
|
|
|
free(curaddr->dstaddr);
|
|
|
|
free(curaddr);
|
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Free the name string.
|
|
|
|
*/
|
|
|
|
free(curdev->name);
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Free the description string, if any.
|
|
|
|
*/
|
|
|
|
if (curdev->description != NULL)
|
|
|
|
free(curdev->description);
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Free the interface.
|
|
|
|
*/
|
|
|
|
free(curdev);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2005-05-29 17:46:52 +00:00
|
|
|
#if !defined(WIN32) && !defined(MSDOS)
|
2004-03-31 09:07:39 +00:00
|
|
|
|
2002-06-21 01:36:27 +00:00
|
|
|
/*
|
|
|
|
* Return the name of a network interface attached to the system, or NULL
|
|
|
|
* if none can be found. The interface must be configured up; the
|
|
|
|
* lowest unit number is preferred; loopback is ignored.
|
|
|
|
*/
|
|
|
|
char *
|
|
|
|
pcap_lookupdev(errbuf)
|
|
|
|
register char *errbuf;
|
|
|
|
{
|
|
|
|
pcap_if_t *alldevs;
|
|
|
|
/* for old BSD systems, including bsdi3 */
|
|
|
|
#ifndef IF_NAMESIZE
|
|
|
|
#define IF_NAMESIZE IFNAMSIZ
|
|
|
|
#endif
|
|
|
|
static char device[IF_NAMESIZE + 1];
|
|
|
|
char *ret;
|
|
|
|
|
|
|
|
if (pcap_findalldevs(&alldevs, errbuf) == -1)
|
|
|
|
return (NULL);
|
2004-03-31 09:07:39 +00:00
|
|
|
|
2002-06-21 01:36:27 +00:00
|
|
|
if (alldevs == NULL || (alldevs->flags & PCAP_IF_LOOPBACK)) {
|
|
|
|
/*
|
|
|
|
* There are no devices on the list, or the first device
|
|
|
|
* on the list is a loopback device, which means there
|
|
|
|
* are no non-loopback devices on the list. This means
|
|
|
|
* we can't return any device.
|
|
|
|
*
|
|
|
|
* XXX - why not return a loopback device? If we can't
|
|
|
|
* capture on it, it won't be on the list, and if it's
|
|
|
|
* on the list, there aren't any non-loopback devices,
|
|
|
|
* so why not just supply it as the default device?
|
|
|
|
*/
|
2001-04-03 04:18:09 +00:00
|
|
|
(void)strlcpy(errbuf, "no suitable device found",
|
|
|
|
PCAP_ERRBUF_SIZE);
|
2002-06-21 01:36:27 +00:00
|
|
|
ret = NULL;
|
|
|
|
} else {
|
|
|
|
/*
|
|
|
|
* Return the name of the first device on the list.
|
|
|
|
*/
|
|
|
|
(void)strlcpy(device, alldevs->name, sizeof(device));
|
|
|
|
ret = device;
|
1996-08-19 20:36:34 +00:00
|
|
|
}
|
|
|
|
|
2002-06-21 01:36:27 +00:00
|
|
|
pcap_freealldevs(alldevs);
|
|
|
|
return (ret);
|
1996-08-19 20:36:34 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
int
|
|
|
|
pcap_lookupnet(device, netp, maskp, errbuf)
|
2004-03-31 09:07:39 +00:00
|
|
|
register const char *device;
|
1996-08-19 20:36:34 +00:00
|
|
|
register bpf_u_int32 *netp, *maskp;
|
|
|
|
register char *errbuf;
|
|
|
|
{
|
|
|
|
register int fd;
|
2007-10-16 02:02:02 +00:00
|
|
|
register struct sockaddr_in *sin4;
|
1996-08-19 20:36:34 +00:00
|
|
|
struct ifreq ifr;
|
|
|
|
|
2004-03-31 09:07:39 +00:00
|
|
|
/*
|
2001-04-03 04:18:09 +00:00
|
|
|
* The pseudo-device "any" listens on all interfaces and therefore
|
|
|
|
* has the network address and -mask "0.0.0.0" therefore catching
|
|
|
|
* all traffic. Using NULL for the interface is the same as "any".
|
|
|
|
*/
|
2004-03-31 09:07:39 +00:00
|
|
|
if (!device || strcmp(device, "any") == 0
|
|
|
|
#ifdef HAVE_DAG_API
|
|
|
|
|| strstr(device, "dag") != NULL
|
2005-07-11 03:24:53 +00:00
|
|
|
#endif
|
|
|
|
#ifdef HAVE_SEPTEL_API
|
|
|
|
|| strstr(device, "septel") != NULL
|
2009-03-21 20:43:56 +00:00
|
|
|
#endif
|
|
|
|
#ifdef PCAP_SUPPORT_BT
|
|
|
|
|| strstr(device, "bluetooth") != NULL
|
|
|
|
#endif
|
|
|
|
#ifdef PCAP_SUPPORT_USB
|
Update libpcap to 1.1.1.
Changes:
Thu. April 1, 2010. guy@alum.mit.edu.
Summary for 1.1.1 libpcap release
Update CHANGES to reflect more of the changes in 1.1.0.
Fix build on RHEL5.
Fix shared library build on AIX.
Thu. March 11, 2010. ken@netfunctional.ca/guy@alum.mit.edu.
Summary for 1.1.0 libpcap release
Add SocketCAN capture support
Add Myricom SNF API support
Update Endace DAG and ERF support
Add support for shared libraries on Solaris, HP-UX, and AIX
Build, install, and un-install shared libraries by default;
don't build/install shared libraries on platforms we don't support
Fix building from a directory other than the source directory
Fix compiler warnings and builds on some platforms
Update config.guess and config.sub
Support monitor mode on mac80211 devices on Linux
Fix USB memory-mapped capturing on Linux; it requires a new DLT_
value
On Linux, scan /sys/class/net for devices if we have it; scan
it, or /proc/net/dev if we don't have /sys/class/net, even if
we have getifaddrs(), as it'll find interfaces with no
addresses
Add limited support for reading pcap-ng files
Fix BPF driver-loading error handling on AIX
Support getting the full-length interface description on FreeBSD
In the lexical analyzer, free up any addrinfo structure we got back
from getaddrinfo().
Add support for BPF and libdlpi in OpenSolaris (and SXCE)
Hyphenate "link-layer" everywhere
Add /sys/kernel/debug/usb/usbmon to the list of usbmon locations
In pcap_read_linux_mmap(), if there are no frames available, call
poll() even if we're in non-blocking mode, so we pick up
errors, and check for the errors in question.
Note that poll() works on BPF devices is Snow Leopard
If an ENXIO or ENETDOWN is received, it may mean the device has
gone away. Deal with it.
For BPF, raise the default capture buffer size to from 32k to 512k
Support ps_ifdrop on Linux
Added a bunch of #ifdef directives to make wpcap.dll (WinPcap) compile
under cygwin.
Changes to Linux mmapped captures.
Fix bug where create_ring would fail for particular snaplen and
buffer size combinations
Update pcap-config so that it handles libpcap requiring
additional libraries
Add workaround for threadsafeness on Windows
Add missing mapping for DLT_ENC <-> LINKTYPE_ENC
DLT: Add DLT_CAN_SOCKETCAN
DLT: Add Solaris ipnet
Don't check for DLT_IPNET if it's not defined
Add link-layer types for Fibre Channel FC-2
Add link-layer types for Wireless HART
Add link-layer types for AOS
Add link-layer types for DECT
Autoconf fixes (AIX, HP-UX, OSF/1, Tru64 cleanups)
Install headers unconditionally, and include vlan.h/bluetooth.h if
enabled
Autoconf fixes+cleanup
Support enabling/disabling bluetooth (--{en,dis}able-bluetooth)
Support disabling SITA support (--without-sita)
Return -1 on failure to create packet ring (if supported but
creation failed)
Fix handling of 'any' device, so that it can be opened, and no longer
attempt to open it in Monitor mode
Add support for snapshot length for USB Memory-Mapped Interface
Fix configure and build on recent Linux kernels
Fix memory-mapped Linux capture to support pcap_next() and
pcap_next_ex()
Fixes for Linux USB capture
DLT: Add DLT_LINUX_EVDEV
DLT: Add DLT_GSMTAP_UM
DLT: Add DLT_GSMTAP_ABIS
2010-10-28 16:22:13 +00:00
|
|
|
|| strstr(device, "usbmon") != NULL
|
|
|
|
#endif
|
|
|
|
#ifdef HAVE_SNF_API
|
|
|
|
|| strstr(device, "snf") != NULL
|
2004-03-31 09:07:39 +00:00
|
|
|
#endif
|
|
|
|
) {
|
2001-04-03 04:18:09 +00:00
|
|
|
*netp = *maskp = 0;
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
1996-08-19 20:36:34 +00:00
|
|
|
fd = socket(AF_INET, SOCK_DGRAM, 0);
|
|
|
|
if (fd < 0) {
|
2001-04-03 04:18:09 +00:00
|
|
|
(void)snprintf(errbuf, PCAP_ERRBUF_SIZE, "socket: %s",
|
|
|
|
pcap_strerror(errno));
|
1996-08-19 20:36:34 +00:00
|
|
|
return (-1);
|
|
|
|
}
|
|
|
|
memset(&ifr, 0, sizeof(ifr));
|
|
|
|
#ifdef linux
|
|
|
|
/* XXX Work around Linux kernel bug */
|
|
|
|
ifr.ifr_addr.sa_family = AF_INET;
|
|
|
|
#endif
|
|
|
|
(void)strncpy(ifr.ifr_name, device, sizeof(ifr.ifr_name));
|
|
|
|
if (ioctl(fd, SIOCGIFADDR, (char *)&ifr) < 0) {
|
2000-01-30 00:32:56 +00:00
|
|
|
if (errno == EADDRNOTAVAIL) {
|
2001-04-03 04:18:09 +00:00
|
|
|
(void)snprintf(errbuf, PCAP_ERRBUF_SIZE,
|
|
|
|
"%s: no IPv4 address assigned", device);
|
2000-01-30 00:32:56 +00:00
|
|
|
} else {
|
2001-04-03 04:18:09 +00:00
|
|
|
(void)snprintf(errbuf, PCAP_ERRBUF_SIZE,
|
|
|
|
"SIOCGIFADDR: %s: %s",
|
2000-01-30 00:32:56 +00:00
|
|
|
device, pcap_strerror(errno));
|
|
|
|
}
|
1996-08-19 20:36:34 +00:00
|
|
|
(void)close(fd);
|
|
|
|
return (-1);
|
|
|
|
}
|
2007-10-16 02:02:02 +00:00
|
|
|
sin4 = (struct sockaddr_in *)&ifr.ifr_addr;
|
|
|
|
*netp = sin4->sin_addr.s_addr;
|
Update libpcap to 1.1.1.
Changes:
Thu. April 1, 2010. guy@alum.mit.edu.
Summary for 1.1.1 libpcap release
Update CHANGES to reflect more of the changes in 1.1.0.
Fix build on RHEL5.
Fix shared library build on AIX.
Thu. March 11, 2010. ken@netfunctional.ca/guy@alum.mit.edu.
Summary for 1.1.0 libpcap release
Add SocketCAN capture support
Add Myricom SNF API support
Update Endace DAG and ERF support
Add support for shared libraries on Solaris, HP-UX, and AIX
Build, install, and un-install shared libraries by default;
don't build/install shared libraries on platforms we don't support
Fix building from a directory other than the source directory
Fix compiler warnings and builds on some platforms
Update config.guess and config.sub
Support monitor mode on mac80211 devices on Linux
Fix USB memory-mapped capturing on Linux; it requires a new DLT_
value
On Linux, scan /sys/class/net for devices if we have it; scan
it, or /proc/net/dev if we don't have /sys/class/net, even if
we have getifaddrs(), as it'll find interfaces with no
addresses
Add limited support for reading pcap-ng files
Fix BPF driver-loading error handling on AIX
Support getting the full-length interface description on FreeBSD
In the lexical analyzer, free up any addrinfo structure we got back
from getaddrinfo().
Add support for BPF and libdlpi in OpenSolaris (and SXCE)
Hyphenate "link-layer" everywhere
Add /sys/kernel/debug/usb/usbmon to the list of usbmon locations
In pcap_read_linux_mmap(), if there are no frames available, call
poll() even if we're in non-blocking mode, so we pick up
errors, and check for the errors in question.
Note that poll() works on BPF devices is Snow Leopard
If an ENXIO or ENETDOWN is received, it may mean the device has
gone away. Deal with it.
For BPF, raise the default capture buffer size to from 32k to 512k
Support ps_ifdrop on Linux
Added a bunch of #ifdef directives to make wpcap.dll (WinPcap) compile
under cygwin.
Changes to Linux mmapped captures.
Fix bug where create_ring would fail for particular snaplen and
buffer size combinations
Update pcap-config so that it handles libpcap requiring
additional libraries
Add workaround for threadsafeness on Windows
Add missing mapping for DLT_ENC <-> LINKTYPE_ENC
DLT: Add DLT_CAN_SOCKETCAN
DLT: Add Solaris ipnet
Don't check for DLT_IPNET if it's not defined
Add link-layer types for Fibre Channel FC-2
Add link-layer types for Wireless HART
Add link-layer types for AOS
Add link-layer types for DECT
Autoconf fixes (AIX, HP-UX, OSF/1, Tru64 cleanups)
Install headers unconditionally, and include vlan.h/bluetooth.h if
enabled
Autoconf fixes+cleanup
Support enabling/disabling bluetooth (--{en,dis}able-bluetooth)
Support disabling SITA support (--without-sita)
Return -1 on failure to create packet ring (if supported but
creation failed)
Fix handling of 'any' device, so that it can be opened, and no longer
attempt to open it in Monitor mode
Add support for snapshot length for USB Memory-Mapped Interface
Fix configure and build on recent Linux kernels
Fix memory-mapped Linux capture to support pcap_next() and
pcap_next_ex()
Fixes for Linux USB capture
DLT: Add DLT_LINUX_EVDEV
DLT: Add DLT_GSMTAP_UM
DLT: Add DLT_GSMTAP_ABIS
2010-10-28 16:22:13 +00:00
|
|
|
memset(&ifr, 0, sizeof(ifr));
|
|
|
|
#ifdef linux
|
|
|
|
/* XXX Work around Linux kernel bug */
|
|
|
|
ifr.ifr_addr.sa_family = AF_INET;
|
|
|
|
#endif
|
|
|
|
(void)strncpy(ifr.ifr_name, device, sizeof(ifr.ifr_name));
|
1996-08-19 20:36:34 +00:00
|
|
|
if (ioctl(fd, SIOCGIFNETMASK, (char *)&ifr) < 0) {
|
2001-04-03 04:18:09 +00:00
|
|
|
(void)snprintf(errbuf, PCAP_ERRBUF_SIZE,
|
|
|
|
"SIOCGIFNETMASK: %s: %s", device, pcap_strerror(errno));
|
1996-08-19 20:36:34 +00:00
|
|
|
(void)close(fd);
|
|
|
|
return (-1);
|
|
|
|
}
|
|
|
|
(void)close(fd);
|
2007-10-16 02:02:02 +00:00
|
|
|
*maskp = sin4->sin_addr.s_addr;
|
1996-08-19 20:36:34 +00:00
|
|
|
if (*maskp == 0) {
|
|
|
|
if (IN_CLASSA(*netp))
|
|
|
|
*maskp = IN_CLASSA_NET;
|
|
|
|
else if (IN_CLASSB(*netp))
|
|
|
|
*maskp = IN_CLASSB_NET;
|
|
|
|
else if (IN_CLASSC(*netp))
|
|
|
|
*maskp = IN_CLASSC_NET;
|
|
|
|
else {
|
2001-04-03 04:18:09 +00:00
|
|
|
(void)snprintf(errbuf, PCAP_ERRBUF_SIZE,
|
|
|
|
"inet class for 0x%x unknown", *netp);
|
1996-08-19 20:36:34 +00:00
|
|
|
return (-1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
*netp &= *maskp;
|
|
|
|
return (0);
|
|
|
|
}
|
2004-03-31 09:07:39 +00:00
|
|
|
|
2005-05-29 17:46:52 +00:00
|
|
|
#elif defined(WIN32)
|
2004-03-31 09:07:39 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* Return the name of a network interface attached to the system, or NULL
|
|
|
|
* if none can be found. The interface must be configured up; the
|
|
|
|
* lowest unit number is preferred; loopback is ignored.
|
|
|
|
*/
|
|
|
|
char *
|
|
|
|
pcap_lookupdev(errbuf)
|
|
|
|
register char *errbuf;
|
|
|
|
{
|
|
|
|
DWORD dwVersion;
|
|
|
|
DWORD dwWindowsMajorVersion;
|
|
|
|
dwVersion = GetVersion(); /* get the OS version */
|
|
|
|
dwWindowsMajorVersion = (DWORD)(LOBYTE(LOWORD(dwVersion)));
|
|
|
|
|
|
|
|
if (dwVersion >= 0x80000000 && dwWindowsMajorVersion >= 4) {
|
|
|
|
/*
|
|
|
|
* Windows 95, 98, ME.
|
|
|
|
*/
|
|
|
|
ULONG NameLength = 8192;
|
|
|
|
static char AdaptersName[8192];
|
|
|
|
|
2005-05-29 17:46:52 +00:00
|
|
|
if (PacketGetAdapterNames(AdaptersName,&NameLength) )
|
|
|
|
return (AdaptersName);
|
|
|
|
else
|
|
|
|
return NULL;
|
2004-03-31 09:07:39 +00:00
|
|
|
} else {
|
|
|
|
/*
|
|
|
|
* Windows NT (NT 4.0, W2K, WXP). Convert the names to UNICODE for backward compatibility
|
|
|
|
*/
|
|
|
|
ULONG NameLength = 8192;
|
|
|
|
static WCHAR AdaptersName[8192];
|
|
|
|
char *tAstr;
|
|
|
|
WCHAR *tUstr;
|
|
|
|
WCHAR *TAdaptersName = (WCHAR*)malloc(8192 * sizeof(WCHAR));
|
|
|
|
int NAdapts = 0;
|
|
|
|
|
|
|
|
if(TAdaptersName == NULL)
|
|
|
|
{
|
|
|
|
(void)snprintf(errbuf, PCAP_ERRBUF_SIZE, "memory allocation failure");
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
2005-05-29 17:46:52 +00:00
|
|
|
if ( !PacketGetAdapterNames((PTSTR)TAdaptersName,&NameLength) )
|
|
|
|
{
|
|
|
|
(void)snprintf(errbuf, PCAP_ERRBUF_SIZE,
|
|
|
|
"PacketGetAdapterNames: %s",
|
|
|
|
pcap_win32strerror());
|
|
|
|
free(TAdaptersName);
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
2004-03-31 09:07:39 +00:00
|
|
|
|
|
|
|
tAstr = (char*)TAdaptersName;
|
|
|
|
tUstr = (WCHAR*)AdaptersName;
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Convert and copy the device names
|
|
|
|
*/
|
|
|
|
while(sscanf(tAstr, "%S", tUstr) > 0)
|
|
|
|
{
|
|
|
|
tAstr += strlen(tAstr) + 1;
|
|
|
|
tUstr += wcslen(tUstr) + 1;
|
|
|
|
NAdapts ++;
|
|
|
|
}
|
|
|
|
|
|
|
|
tAstr++;
|
|
|
|
*tUstr = 0;
|
|
|
|
tUstr++;
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Copy the descriptions
|
|
|
|
*/
|
|
|
|
while(NAdapts--)
|
|
|
|
{
|
|
|
|
strcpy((char*)tUstr, tAstr);
|
|
|
|
(char*)tUstr += strlen(tAstr) + 1;;
|
|
|
|
tAstr += strlen(tAstr) + 1;
|
|
|
|
}
|
|
|
|
|
2005-05-29 17:46:52 +00:00
|
|
|
free(TAdaptersName);
|
2004-03-31 09:07:39 +00:00
|
|
|
return (char *)(AdaptersName);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
int
|
|
|
|
pcap_lookupnet(device, netp, maskp, errbuf)
|
2005-05-29 17:46:52 +00:00
|
|
|
register const char *device;
|
2004-03-31 09:07:39 +00:00
|
|
|
register bpf_u_int32 *netp, *maskp;
|
|
|
|
register char *errbuf;
|
|
|
|
{
|
|
|
|
/*
|
|
|
|
* We need only the first IPv4 address, so we must scan the array returned by PacketGetNetInfo()
|
|
|
|
* in order to skip non IPv4 (i.e. IPv6 addresses)
|
|
|
|
*/
|
|
|
|
npf_if_addr if_addrs[MAX_NETWORK_ADDRESSES];
|
|
|
|
LONG if_addr_size = 1;
|
|
|
|
struct sockaddr_in *t_addr;
|
|
|
|
unsigned int i;
|
|
|
|
|
|
|
|
if (!PacketGetNetInfoEx((void *)device, if_addrs, &if_addr_size)) {
|
|
|
|
*netp = *maskp = 0;
|
|
|
|
return (0);
|
|
|
|
}
|
|
|
|
|
|
|
|
for(i=0; i<MAX_NETWORK_ADDRESSES; i++)
|
|
|
|
{
|
|
|
|
if(if_addrs[i].IPAddress.ss_family == AF_INET)
|
|
|
|
{
|
|
|
|
t_addr = (struct sockaddr_in *) &(if_addrs[i].IPAddress);
|
|
|
|
*netp = t_addr->sin_addr.S_un.S_addr;
|
|
|
|
t_addr = (struct sockaddr_in *) &(if_addrs[i].SubnetMask);
|
|
|
|
*maskp = t_addr->sin_addr.S_un.S_addr;
|
|
|
|
|
|
|
|
*netp &= *maskp;
|
|
|
|
return (0);
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
*netp = *maskp = 0;
|
|
|
|
return (0);
|
|
|
|
}
|
|
|
|
|
2005-05-29 17:46:52 +00:00
|
|
|
#endif /* !WIN32 && !MSDOS */
|