/* Initialize the (Win)Pcap module for use. */ int network_pcap_init(netdev_t *list) { char errbuf[PCAP_ERRBUF_SIZE]; pcap_if_t *devlist, *dev; int i = 0; /* Local variables. */ pcap = NULL; /* Try loading the DLL. */ pcap_handle = dynld_module("wpcap.dll", pcap_imports); if (pcap_handle == NULL) return(-1); /* Retrieve the device list from the local machine */ if (f_pcap_findalldevs(&devlist, errbuf) == -1) { pclog("PCAP: error in pcap_findalldevs: %s\n", errbuf); return(-1); } for (dev=devlist; dev!=NULL; dev=dev->next) { strcpy(list->device, dev->name); if (dev->description) strcpy(list->description, dev->description); else memset(list->description, '\0', sizeof(list->description)); list++; i++; } /* Release the memory. */ f_pcap_freealldevs(devlist); return(i); }
/* Retrieve an easy-to-use list of devices. */ static int get_devlist(capdev_t *list) { char errbuf[PCAP_ERRBUF_SIZE]; pcap_if_t *devlist, *dev; int i = 0; /* Retrieve the device list from the local machine */ if (f_pcap_findalldevs(&devlist, errbuf) == -1) { fprintf(stderr,"Error in pcap_findalldevs_ex: %s\n", errbuf); return(-1); } for (dev=devlist; dev!=NULL; dev=dev->next) { strcpy(list->device, dev->name); if (dev->description) strcpy(list->description, dev->description); else memset(list->description, '\0', sizeof(list->description)); list++; i++; } /* Release the memory. */ f_pcap_freealldevs(devlist); return(i); }