Nmap/Old Windows Releases
While Nmap supports all modern versions of Windows, it no longer officially supports some which are so old that even Microsoft has ceased all support for them. This includes Windows NT, Windows 2000, and Windows XP.
We would highly recommend upgrading any Windows systems that old for security purposes if nothing else. But if you must run Nmap on such a system, the easiest option is to use use an older Nmap release. You can find these in the Nmap dist directory (or older still versions in dist-old. The latest version reported to work on Windows XP SP2/SP3 is Nmap 6.47. For older versions of Windows such as Windows 2K or XP without Service Pack 2, we recommend Nmap 5.35DC1 or older.
When using Nmap on Windows 2000 (either an old version as described above, or a newer version as described later on this page), a couple dependencies from Microsoft may need to be installed first. Those are the Windows Installer 3.1 (v2) and the Security Update for Windows 2000 (KB835732). After installing these, follow the general instructions in the following two sections to install Nmap.
Even current versions of Nmap may be usable with Windows 2000 or XP if compiled the right way. First familiarize yourself with Nmap's normal Windows compilation instructions. Then follow these instructions first reported by David Millis:
Here's exactly what I did to get static 2010-built executables that work under earlier Windows versions. I've hardly ever touched VC++, so pardon my repeated static-setting and rebuild lines at the end, if there's an abridged equivalent. :)
- Open nmap-5.51/mswin32/nmap.sln
- Solution-Configuration Manager: Active Config = Release
- ncat Project-Build Customizations...: masm = true (do before adding .asm's)
- ncat Project-Add-New Item (C++): pointer.asm
.model flat .data __imp__EncodePointer () 4 dd dummy __imp__DecodePointer () 4 dd dummy EXTERNDEF __imp__EncodePointer () 4 : DWORD EXTERNDEF __imp__DecodePointer () 4 : DWORD .code dummy proc mov eax, [esp+4] ret 4 dummy endp end
- ncat Project-Properties-Linker-System: Minimum Req Version = 5.0
- ncat Project-Properties-C/C++-Code Generation: Runtime Library = Multi-Threaded (non-dll)
- nbase Project-Properties-C/C++-Code Generation: Runtime Library = Multi-Threaded (non-dll)
- nsock Project-Properties-C/C++-Code Generation: Runtime Library = Multi-Threaded (non-dll)
- nbase Project-Project Only-Rebuild
- nsock Project-Project Only-Rebuild
- ncat Project-Project Only-Rebuild
nmap and nping worked the same way. Libs get MT. Executables get the MinReq and Asm as well.
The TedWVC blog has a useful guide on Win2K compatability when compiling with Visual C++ 2010.