执行编译时间是2020-10-28,当前nmap最新版本是7.91.
1.下载源码
SVN check out : nmap-mswin32-aux (https://svn.nmap.org/nmap-mswin32-aux) 和 nmap(https://svn.nmap.org/nmap) ,需要放在同一目录下即可。(nmap项目里面的附件目录已经设置了相对路径)
2.源码编译
a.下载安装VS2013 , 最好是用2013的VS,一开始我使用的是VS2019 进行的编译,报sprintf重定义,尝试做了修改,但涉及的内容比较多,后来就换成VS2013了。(有用VS2019编程成功麻烦提供下修改过程)
b.用VS2013打开 /nmap/mswin32/nmap.sln, 进行编译。整个编译过程遇到一个问题:
(1)无法打开nmap.rc:could not open nmap.rc
解决方法:在mswin32目录有一个nmap.rc.in 文件, 修改后缀名,去掉.in,重新编译。 这时会报nmap.rc里面有不可识别的字符:%0x40。 点击编辑该资源文件,修改如下:
FILEVERSION @@COMMAVERSION@@ 修改为:FILEVERSION 1,0,0,1
VALUE "FileVersion", @@FILEVERSION@@ 修改为:VALUE "FileVersion", "@@FILEVERSION@@\0"
至此,能编译成功了。
3.nmap运行
a.使用编译生成的nmap执行命令,会报缺少:zlibwapi.dll 和 libssh2.dll,分别在“/nmap/libz/** ”和 “/nmap/mswin32/**”目录下面找到对应的dll放入可执行程序同一目录即可。(debug编译的用debug的dll,release编译的用release的dll)。
b.这时执行-sV或脚本命令是会报“nmap could not locate nse_main.lua” 的错误信息,这是因为没找到这个文件。看了下源码,nmap有好几种定位文件的方法:
在nmap.cc的nmap_fetchfile_sub函数里,其中一个是通过环境变量的路径去查找,我的解决方案就是创建了“NMAPDIR”的环境变量,指向“/nmap”的目录(mswin32的上一个目录)。重新编译,执行命令,成功获取目标端口服务的版本信息。