diff --git a/libnetutil/Makefile.in b/libnetutil/Makefile.in
index 76a770f11..846c83733 100644
--- a/libnetutil/Makefile.in
+++ b/libnetutil/Makefile.in
@@ -14,8 +14,8 @@ LIBPCAPDIR = @libpcapdir@
TARGET = libnetutil.a
-SRCS = $(srcdir)/netutil.cc $(srcdir)/packettrace.cc $(srcdir)/PacketElement.cc $(srcdir)/NetworkLayerElement.cc $(srcdir)/ARPHeader.cc $(srcdir)/PacketElement.cc $(srcdir)/NetworkLayerElement.cc $(srcdir)/TransportLayerElement.cc $(srcdir)/ARPHeader.cc $(srcdir)/EthernetHeader.cc $(srcdir)/ICMPv4Header.cc $(srcdir)/ICMPv6Header.cc $(srcdir)/IPv4Header.cc $(srcdir)/IPv6Header.cc $(srcdir)/TCPHeader.cc $(srcdir)/UDPHeader.cc $(srcdir)/RawData.cc $(srcdir)/HopByHopHeader.cc $(srcdir)/DestOptsHeader.cc $(srcdir)/FragmentHeader.cc $(srcdir)/RoutingHeader.cc $(srcdir)/PacketParser.cc
-OBJS = netutil.o packettrace.o PacketElement.o NetworkLayerElement.o TransportLayerElement.o ARPHeader.o EthernetHeader.o ICMPv4Header.o ICMPv6Header.o IPv4Header.o IPv6Header.o TCPHeader.o UDPHeader.o RawData.o HopByHopHeader.o DestOptsHeader.o FragmentHeader.o RoutingHeader.o PacketParser.o
+SRCS = $(srcdir)/netutil.cc $(srcdir)/packettrace.cc $(srcdir)/PacketElement.cc $(srcdir)/NetworkLayerElement.cc $(srcdir)/ARPHeader.cc $(srcdir)/PacketElement.cc $(srcdir)/NetworkLayerElement.cc $(srcdir)/TransportLayerElement.cc $(srcdir)/ARPHeader.cc $(srcdir)/EthernetHeader.cc $(srcdir)/ICMPv4Header.cc $(srcdir)/ICMPv6Header.cc $(srcdir)/IPv4Header.cc $(srcdir)/IPv6Header.cc $(srcdir)/TCPHeader.cc $(srcdir)/UDPHeader.cc $(srcdir)/RawData.cc $(srcdir)/HopByHopHeader.cc $(srcdir)/DestOptsHeader.cc $(srcdir)/FragmentHeader.cc $(srcdir)/RoutingHeader.cc $(srcdir)/PacketParser.cc $(srcdir)/massdns.cc
+OBJS = netutil.o packettrace.o PacketElement.o NetworkLayerElement.o TransportLayerElement.o ARPHeader.o EthernetHeader.o ICMPv4Header.o ICMPv6Header.o IPv4Header.o IPv6Header.o TCPHeader.o UDPHeader.o RawData.o HopByHopHeader.o DestOptsHeader.o FragmentHeader.o RoutingHeader.o PacketParser.o massdns.o
all: $(TARGET)
diff --git a/libnetutil/libnetutil.vcxproj b/libnetutil/libnetutil.vcxproj
index c98585f1f..d5b024d8c 100644
--- a/libnetutil/libnetutil.vcxproj
+++ b/libnetutil/libnetutil.vcxproj
@@ -87,6 +87,7 @@
+
@@ -113,6 +114,7 @@
+
diff --git a/libnetutil/massdns.cc b/libnetutil/massdns.cc
new file mode 100644
index 000000000..a1044d5c2
--- /dev/null
+++ b/libnetutil/massdns.cc
@@ -0,0 +1,2134 @@
+/***************************************************************************
+ * nmap_dns.cc -- Handles parallel DNS resolution for target IPs *
+ * *
+ ***********************IMPORTANT NMAP LICENSE TERMS************************
+ *
+ * The Nmap Security Scanner is (C) 1996-2026 Nmap Software LLC ("The Nmap
+ * Project"). Nmap is also a registered trademark of the Nmap Project.
+ *
+ * This program is distributed under the terms of the Nmap Public Source
+ * License (NPSL). The exact license text applying to a particular Nmap
+ * release or source code control revision is contained in the LICENSE
+ * file distributed with that version of Nmap or source code control
+ * revision. More Nmap copyright/legal information is available from
+ * https://nmap.org/book/man-legal.html, and further information on the
+ * NPSL license itself can be found at https://nmap.org/npsl/ . This
+ * header summarizes some key points from the Nmap license, but is no
+ * substitute for the actual license text.
+ *
+ * Nmap is generally free for end users to download and use themselves,
+ * including commercial use. It is available from https://nmap.org.
+ *
+ * The Nmap license generally prohibits companies from using and
+ * redistributing Nmap in commercial products, but we sell a special Nmap
+ * OEM Edition with a more permissive license and special features for
+ * this purpose. See https://nmap.org/oem/
+ *
+ * If you have received a written Nmap license agreement or contract
+ * stating terms other than these (such as an Nmap OEM license), you may
+ * choose to use and redistribute Nmap under those terms instead.
+ *
+ * The official Nmap Windows builds include the Npcap software
+ * (https://npcap.com) for packet capture and transmission. It is under
+ * separate license terms which forbid redistribution without special
+ * permission. So the official Nmap Windows builds may not be redistributed
+ * without special permission (such as an Nmap OEM license).
+ *
+ * Source is provided to this software because we believe users have a
+ * right to know exactly what a program is going to do before they run it.
+ * This also allows you to audit the software for security holes.
+ *
+ * Source code also allows you to port Nmap to new platforms, fix bugs, and
+ * add new features. You are highly encouraged to submit your changes as a
+ * Github PR or by email to the dev@nmap.org mailing list for possible
+ * incorporation into the main distribution. Unless you specify otherwise, it
+ * is understood that you are offering us very broad rights to use your
+ * submissions as described in the Nmap Public Source License Contributor
+ * Agreement. This is important because we fund the project by selling licenses
+ * with various terms, and also because the inability to relicense code has
+ * caused devastating problems for other Free Software projects (such as KDE
+ * and NASM).
+ *
+ * The free version of Nmap is distributed in the hope that it will be
+ * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Warranties,
+ * indemnification and commercial support are all available through the
+ * Npcap OEM program--see https://nmap.org/oem/
+ *
+ ***************************************************************************/
+
+// mass_dns - Parallel Asynchronous DNS Resolution
+//
+// One of Nmap's features is to perform reverse DNS queries
+// on large number of IP addresses. Nmap supports 2 different
+// methods of accomplishing this:
+//
+// System Resolver (specified using --system-dns):
+// Performs sequential getnameinfo() calls on all the IPs.
+// As reliable as your system resolver, almost guaranteed
+// to be portable, but intolerably slow for scans of hundreds
+// or more because the result from each query needs to be
+// received before the next one can be sent.
+//
+// Mass/Async DNS (default):
+// Attempts to resolve host names in parallel using a set
+// of DNS servers. DNS servers are found here:
+//
+// --dns-servers (all platforms - overrides everything else)
+//
+// /etc/resolv.conf (only on unix)
+//
+// These registry keys: (only on windows)
+//
+// HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\NameServer
+// HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\DhcpNameServer
+// HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\*\NameServer
+// HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\*\DhcpNameServer
+//
+//
+// Also, most systems maintain a file "/etc/hosts" that contains
+// IP to hostname mappings. We also try to consult these files. Here
+// is where we look for the files:
+//
+// Unix: /etc/hosts
+//
+// Windows:
+// for 95/98/Me: WINDOWS_DIR\hosts
+// for NT/2000/XP Pro: WINDOWS_DIR\system32\drivers\etc\hosts
+// for XP Home: WINDOWS_DIR\system32\drivers\etc\hosts
+// --see http://accs-net.com/hosts/how_to_use_hosts.html
+//
+//
+// Created by Doug Hoyte http://www.hcsw.org
+// DNS Caching and aging added by Eddie Bell ejlbell@gmail.com 2007
+// IPv6 and improved DNS cache by Gioacchino Mazzurco 2015
+
+
+// TODO:
+//
+// * Tune performance parameters
+//
+// * Figure out best way to estimate completion time
+// and display it in a ScanProgressMeter
+
+#include "massdns.h"
+#include "netutil.h"
+#include
+#include
+#include
+//#include
+#include
+#include