Add support for RADGalaxy and neoVI FIRE 2 over Ethernet

This commit is contained in:
Paul Hollinsky
2018-09-18 16:50:42 -04:00
parent 5b1a56ee6c
commit 8375a354af
28 changed files with 3852 additions and 14 deletions
@@ -0,0 +1,53 @@
#ifndef __PCAPDLL_WINDOWS_H_
#define __PCAPDLL_WINDOWS_H_
#include <Windows.h>
#include <winsock2.h>
#include <pcap.h>
namespace icsneo {
// Helper loader for the PCAP DLL
class PCAPDLL {
public:
// Functions
typedef int(__cdecl* PCAPFINDDEVICE)(char* source, struct pcap_rmtauth* auth, pcap_if_t** alldevs, char* errbuf);
typedef pcap_t*(__cdecl* PCAPOPEN)(const char* source, int snaplen, int flags, int read_timeout, struct pcap_rmtauth* auth, char* errbuf);
typedef void(__cdecl* PCAPFREEDEVS)(pcap_if_t* alldevsp);
typedef void(__cdecl* PCAPCLOSE)(pcap_t* p);
typedef int(__cdecl* PCAPSTATS)(pcap_t* p, struct pcap_stat* ps);
typedef int(__cdecl* PCAPNEXTEX)(pcap_t* p, struct pcap_pkthdr** pkt_header, const u_char** pkt_data);
typedef int(__cdecl* PCAPSENDPACKET)(pcap_t* p, const u_char* buf, int size);
// typedef pcap_send_queue*(__cdecl* PCAPSENDQUEUEALLOC)(u_int memsize);
// typedef int(__cdecl* PCAPSENDQUEUEQUEUE)(pcap_send_queue* queue, const struct pcap_pkthdr* pkt_header, const u_char* pkt_data);
// typedef void(__cdecl* PCAPSENDQUEUEDESTROY)(pcap_send_queue* queue);
// typedef u_int(__cdecl* PCAPSENDQUEUETRANSMIT)(pcap_t* p, pcap_send_queue* queue, int sync);
typedef int(__cdecl* PCAPDATALINK)(pcap_t* p);
typedef int(__cdecl* PCAPCREATESRCSTR)(char* source, int type, const char* host, const char* port, const char* name, char* errbuf);
typedef int(__cdecl* PCAPSETBUFF)(pcap_t* p, int dim);
PCAPFINDDEVICE findalldevs_ex;
PCAPOPEN open;
PCAPFREEDEVS freealldevs;
PCAPCLOSE close;
PCAPSTATS stats;
PCAPNEXTEX next_ex;
PCAPSENDPACKET sendpacket;
// PCAPSENDQUEUEALLOC sendqueue_alloc;
// PCAPSENDQUEUEQUEUE sendqueue_queue;
// PCAPSENDQUEUEDESTROY sendqueue_destroy;
// PCAPSENDQUEUETRANSMIT sendqueue_transmit;
PCAPDATALINK datalink;
PCAPCREATESRCSTR createsrcstr;
PCAPSETBUFF setbuff;
PCAPDLL();
~PCAPDLL() { closeDLL(); }
bool ok() const { return dll != nullptr; }
private:
HINSTANCE dll;
void closeDLL();
};
};
#endif
+43
View File
@@ -0,0 +1,43 @@
#include "platform/windows/internal/include/pcapdll.h"
using namespace icsneo;
PCAPDLL::PCAPDLL() {
dll = LoadLibrary("wpcap.dll");
if(dll == NULL) {
closeDLL();
} else {
findalldevs_ex = (PCAPFINDDEVICE)GetProcAddress(dll, "pcap_findalldevs_ex");
open = (PCAPOPEN)GetProcAddress(dll, "pcap_open");
freealldevs = (PCAPFREEDEVS)GetProcAddress(dll, "pcap_freealldevs");
close = (PCAPCLOSE)GetProcAddress(dll, "pcap_close");
stats = (PCAPSTATS)GetProcAddress(dll, "pcap_stats");
next_ex = (PCAPNEXTEX)GetProcAddress(dll, "pcap_next_ex");
sendpacket = (PCAPSENDPACKET)GetProcAddress(dll, "pcap_sendpacket");
// sendqueue_alloc = (PCAPSENDQUEUEALLOC)GetProcAddress(dll, "pcap_sendqueue_alloc");
// sendqueue_queue = (PCAPSENDQUEUEQUEUE)GetProcAddress(dll, "pcap_sendqueue_queue");
// sendqueue_destroy = (PCAPSENDQUEUEDESTROY)GetProcAddress(dll, "pcap_sendqueue_destroy");
// sendqueue_transmit = (PCAPSENDQUEUETRANSMIT)GetProcAddress(dll, "pcap_sendqueue_transmit");
datalink = (PCAPDATALINK)GetProcAddress(dll, "pcap_datalink");
createsrcstr = (PCAPCREATESRCSTR)GetProcAddress(dll, "pcap_createsrcstr");
setbuff = (PCAPSETBUFF)GetProcAddress(dll, "pcap_setbuff");
if(findalldevs_ex == NULL || open == NULL ||
freealldevs == NULL || close == NULL ||
stats == NULL || next_ex == NULL ||
sendpacket == NULL ||
// sendqueue_alloc == NULL ||
// sendqueue_queue == NULL || sendqueue_destroy == NULL ||
// sendqueue_transmit == NULL ||
datalink == NULL ||
createsrcstr == NULL || setbuff == NULL) {
closeDLL();
}
}
}
void PCAPDLL::closeDLL() {
if(dll)
FreeLibrary(dll);
dll = nullptr;
}