diff --git a/CMakeLists.txt b/CMakeLists.txt index 35a092ca7..7dbafe741 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -689,7 +689,7 @@ elseif(WIN32) src/detection/physicaldisk/physicaldisk_windows.c src/detection/diskio/diskio_windows.c src/detection/displayserver/displayserver_windows.c - src/detection/dns/dns_linux.c + src/detection/dns/dns_windows.c src/detection/font/font_windows.c src/detection/gpu/gpu_windows.c src/detection/host/host_windows.c diff --git a/src/detection/dns/dns_nosupport.c b/src/detection/dns/dns_nosupport.c deleted file mode 100644 index f92597962..000000000 --- a/src/detection/dns/dns_nosupport.c +++ /dev/null @@ -1,6 +0,0 @@ -#include "detection/dns/dns.h" - -const char* ffDetectDNS(FF_MAYBE_UNUSED FFlist* results) -{ - return "Not supported on this platform"; -} diff --git a/src/detection/dns/dns_windows.c b/src/detection/dns/dns_windows.c new file mode 100644 index 000000000..3aea5fb19 --- /dev/null +++ b/src/detection/dns/dns_windows.c @@ -0,0 +1,30 @@ +#include "detection/dns/dns.h" +#include "util/mallocHelper.h" + +#include + +const char* ffDetectDNS(FFlist* results) +{ + FF_AUTO_FREE FIXED_INFO* fixedInfo = malloc(sizeof(FIXED_INFO)); + ULONG size = sizeof(fixedInfo); + while (true) + { + DWORD res = GetNetworkParams(fixedInfo, &size); + if (res == ERROR_BUFFER_OVERFLOW) + { + fixedInfo = realloc(fixedInfo, size); + continue; + } + else if (res != ERROR_SUCCESS) + return "GetNetworkParams() failed"; + break; + } + + for (IP_ADDR_STRING* dns = &fixedInfo->DnsServerList; dns; dns = dns->Next) + { + FFstrbuf* item = (FFstrbuf*) ffListAdd(results); + ffStrbufInitS(item, dns->IpAddress.String); + ffStrbufTrimRightSpace(item); + } + return NULL; +} diff --git a/src/modules/dns/dns.c b/src/modules/dns/dns.c index 49e80f325..121d28f50 100644 --- a/src/modules/dns/dns.c +++ b/src/modules/dns/dns.c @@ -20,7 +20,7 @@ void ffPrintDNS(FFDNSOptions* options) if (result.length == 0) { - ffPrintError(FF_DNS_MODULE_NAME, 0, &options->moduleArgs, FF_PRINT_TYPE_DEFAULT, "NO DNS detected"); + ffPrintError(FF_DNS_MODULE_NAME, 0, &options->moduleArgs, FF_PRINT_TYPE_DEFAULT, "NO DNS servers detected"); return; }