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); }