From 584fa078d321114427877570394837cd6549d976 Mon Sep 17 00:00:00 2001 From: waltje Date: Mon, 5 Jun 2017 00:36:03 -0400 Subject: [PATCH] Updated pcap_if.exe to also use the dynamic loader, removed the pcap/ subfolder now. --- src/Makefile.mingw | 11 +++---- src/pcap/libwpcapdelay.a | Bin 88406 -> 0 bytes src/pcap_if.c | 65 +++++++++++++++++++++++++++++++++------ 3 files changed, 59 insertions(+), 17 deletions(-) delete mode 100644 src/pcap/libwpcapdelay.a diff --git a/src/Makefile.mingw b/src/Makefile.mingw index 1a6f76df5..83987d9c4 100644 --- a/src/Makefile.mingw +++ b/src/Makefile.mingw @@ -8,7 +8,7 @@ # # Modified Makefile for Win32 (MinGW32) environment. # -# Version: @(#)Makefile.mingw 1.0.23 2017/06/03 +# Version: @(#)Makefile.mingw 1.0.24 2017/06/04 # # Authors: Miran Grca, # Fred N. van Kempen, @@ -249,17 +249,14 @@ all: $(PROG).exe pcap_if.exe $(PROG).exe: $(OBJ) $(LZFOBJ) $(SLIRPOBJ) @echo Linking $(PROG).exe .. - @$(CC) -o $(PROG).exe \ - $(OBJ) $(LZFOBJ) $(SLIRPOBJ) \ - $(LIBS) #-static -Lpcap -lwpcapdelay + @$(CC) -o $(PROG).exe $(OBJ) $(LZFOBJ) $(SLIRPOBJ) $(LIBS) ifneq ($(DEBUG), y) @strip $(PROG).exe endif -pcap_if.exe: pcap_if.o pcap_if.res +pcap_if.exe: pcap_if.o win_dynld.o pcap_if.res @echo Linking pcap_if.exe .. - @$(CC) -o pcap_if.exe \ - pcap_if.o pcap_if.res -static -Lpcap -lwpcapdelay + @$(CC) -o pcap_if.exe pcap_if.o win_dynld.o pcap_if.res ifneq ($(DEBUG), y) @strip pcap_if.exe endif diff --git a/src/pcap/libwpcapdelay.a b/src/pcap/libwpcapdelay.a deleted file mode 100644 index c9d175845d939ebb7aae9a6882df7445d9e7efe9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 88406 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 */ #include #include +#include #include #include +#include "plat_dynld.h" + + +static void *pcap_handle; /* handle to WinPcap DLL */ + + +/* Pointers to the real functions. */ +static int (*f_pcap_findalldevs)(pcap_if_t **,char *); +static void (*f_pcap_freealldevs)(pcap_if_t *); +static pcap_t *(*f_pcap_open_live)(const char *,int,int,int,char *); +static int (*f_pcap_next_ex)(pcap_t*,struct pcap_pkthdr**,const unsigned char**); +static void (*f_pcap_close)(pcap_t *); +static dllimp_t pcap_imports[] = { + { "pcap_findalldevs", &f_pcap_findalldevs }, + { "pcap_freealldevs", &f_pcap_freealldevs }, + { "pcap_open_live", &f_pcap_open_live }, + { "pcap_next_ex", &f_pcap_next_ex }, + { "pcap_close", &f_pcap_close }, + { NULL, NULL }, +}; typedef struct { @@ -35,7 +56,7 @@ get_devlist(dev_t *list) int i = 0; /* Retrieve the device list from the local machine */ - if (pcap_findalldevs(&devlist, errbuf) == -1) { + if (f_pcap_findalldevs(&devlist, errbuf) == -1) { fprintf(stderr,"Error in pcap_findalldevs_ex: %s\n", errbuf); return(-1); } @@ -51,7 +72,7 @@ get_devlist(dev_t *list) } /* Release the memory. */ - pcap_freealldevs(devlist); + f_pcap_freealldevs(devlist); return(i); } @@ -130,11 +151,11 @@ start_cap(char *dev) int rc; /* Open the device for reading from it. */ - pcap = pcap_open_live(dev, - 1518, /* MTU */ - 1, /* promisc mode */ - 10, /* timeout */ - temp); + pcap = f_pcap_open_live(dev, + 1518, /* MTU */ + 1, /* promisc mode */ + 10, /* timeout */ + temp); if (pcap == NULL) { fprintf(stderr, "Pcap: open_live(%s): %s\n", dev, temp); return(2); @@ -142,7 +163,7 @@ start_cap(char *dev) printf("Listening on '%s'..\n", dev); for (;;) { - rc = pcap_next_ex(pcap, &hdr, &pkt); + rc = f_pcap_next_ex(pcap, &hdr, &pkt); if (rc < 0) break; /* Did we time out? */ @@ -161,7 +182,7 @@ start_cap(char *dev) } /* All done, close up. */ - pcap_close(pcap); + f_pcap_close(pcap); return(0); } @@ -191,6 +212,17 @@ show_devs(dev_t *list, int num) } +void +pclog(const char *fmt, ...) +{ + va_list ap; + + va_start(ap, fmt); + vfprintf(stderr, fmt, ap); + va_end(ap); +} + + int main(int argc, char **argv) { @@ -198,6 +230,13 @@ main(int argc, char **argv) dev_t *dev = interfaces; int numdev, i; + /* Try loading the DLL. */ + pcap_handle = dynld_module("wpcap.dll", pcap_imports); + if (pcap_handle == NULL) { + fprintf(stderr, "Unable to load WinPcap DLL !\n"); + return(1); + } + /* Get the list. */ numdev = get_devlist(interfaces); @@ -205,6 +244,8 @@ main(int argc, char **argv) /* No arguments, just show the list. */ show_devs(interfaces, numdev); + dynld_close(pcap_handle); + return(numdev); } @@ -213,11 +254,15 @@ main(int argc, char **argv) if (i < 0 || i > numdev) { fprintf(stderr, "Invalid interface number %d !\n", i); + dynld_close(pcap_handle); + return(1); } /* Looks good, go and listen.. */ i = start_cap(interfaces[i-1].device); + dynld_close(pcap_handle); + return(i); }