当前nmap的最新的版本为7.80网上有很多教程指导编译nmap7.80自己试了但是还是遇到了比较多的问题,现在把我自己编译遇到的问题告诉大家解决办法,帮助大家少走写弯路。

首先是下载源代码:

源代码的地址为:https://nmap.org/dist/nmap-7.80.tar.bz2

使用 wget https://nmap.org/dist/nmap-7.80.tar.bz2 进行源码的下载

解压缩:tar -zxvf nmap-7.80.tar.bz2 

依赖软件:

由于nmap的源码编译需要flex和bison可以使用which查看电脑中是否安装这两个程序。如果没有安装使用yum或者是apt-get进行安装。

进入源程序文件夹:cd nmap-7.80

运行configure: ./configure

编译:make

在编译这一步我遇到了问题错误提示如下:

g++ -Wl,-E  -Lnbase -Lnsock/src/   -o nmap charpool.o FingerPrintResults.o FPEngine.o FPModel.o idle_scan.o MACLookup.o nmap_dns.o nmap_error.o nmap.o nmap_ftp.o NmapOps.o NmapOutputTable.o nmap_tty.o osscan2.o osscan.o output.o payload.o portlist.o portreasons.o protocols.o scan_engine.o scan_engine_connect.o scan_engine_raw.o scan_lists.o service_scan.o services.o NewTargets.o TargetGroup.o Target.o targets.o tcpip.o timing.o traceroute.o utils.o xml.o nse_main.o nse_utility.o nse_nsock.o nse_dnet.o nse_fs.o nse_nmaplib.o nse_debug.o nse_pcrelib.o nse_lpeg.o nse_openssl.o nse_ssl_cert.o nse_libssh2.o nse_zlib.o main.o -lnsock -lnbase -lpcre libpcap/libpcap.a libssh2/lib/libssh2.a -lssl -lcrypto -lz libnetutil/libnetutil.a ./libdnet-stripped/src/.libs/libdnet.a ./liblua/liblua.a ./liblinear/liblinear.a -ldl 
libpcap/libpcap.a(pcap-rdmasniff.o):在函数‘rdmasniff_read’中:
/home/jifukui/jifukuistudy/sourcecode/nmap/libpcap/./pcap-rdmasniff.c:125:对‘ibv_get_cq_event’未定义的引用
/home/jifukui/jifukuistudy/sourcecode/nmap/libpcap/./pcap-rdmasniff.c:134:对‘ibv_ack_cq_events’未定义的引用
/home/jifukui/jifukuistudy/sourcecode/nmap/libpcap/./pcap-rdmasniff.c:146:对‘ibv_wc_status_str’未定义的引用
libpcap/libpcap.a(pcap-rdmasniff.o):在函数‘rdmasniff_activate’中:
/home/jifukui/jifukuistudy/sourcecode/nmap/libpcap/./pcap-rdmasniff.c:198:对‘ibv_open_device’未定义的引用
/home/jifukui/jifukuistudy/sourcecode/nmap/libpcap/./pcap-rdmasniff.c:205:对‘ibv_alloc_pd’未定义的引用
/home/jifukui/jifukuistudy/sourcecode/nmap/libpcap/./pcap-rdmasniff.c:212:对‘ibv_create_comp_channel’未定义的引用
/home/jifukui/jifukuistudy/sourcecode/nmap/libpcap/./pcap-rdmasniff.c:219:对‘ibv_create_cq’未定义的引用
/home/jifukui/jifukuistudy/sourcecode/nmap/libpcap/./pcap-rdmasniff.c:234:对‘ibv_create_qp’未定义的引用
/home/jifukui/jifukuistudy/sourcecode/nmap/libpcap/./pcap-rdmasniff.c:244:对‘ibv_modify_qp’未定义的引用
/home/jifukui/jifukuistudy/sourcecode/nmap/libpcap/./pcap-rdmasniff.c:322:对‘ibv_dereg_mr’未定义的引用
/home/jifukui/jifukuistudy/sourcecode/nmap/libpcap/./pcap-rdmasniff.c:330:对‘ibv_destroy_qp’未定义的引用
/home/jifukui/jifukuistudy/sourcecode/nmap/libpcap/./pcap-rdmasniff.c:334:对‘ibv_destroy_cq’未定义的引用
/home/jifukui/jifukuistudy/sourcecode/nmap/libpcap/./pcap-rdmasniff.c:338:对‘ibv_destroy_comp_channel’未定义的引用
/home/jifukui/jifukuistudy/sourcecode/nmap/libpcap/./pcap-rdmasniff.c:342:对‘ibv_dealloc_pd’未定义的引用
/home/jifukui/jifukuistudy/sourcecode/nmap/libpcap/./pcap-rdmasniff.c:346:对‘ibv_close_device’未定义的引用
/home/jifukui/jifukuistudy/sourcecode/nmap/libpcap/./pcap-rdmasniff.c:252:对‘ibv_modify_qp’未定义的引用
/home/jifukui/jifukuistudy/sourcecode/nmap/libpcap/./pcap-rdmasniff.c:284:对‘ibv_reg_mr’未定义的引用
libpcap/libpcap.a(pcap-rdmasniff.o):在函数‘___ibv_query_port’中:
/usr/include/infiniband/verbs.h:1617:对‘ibv_query_port’未定义的引用
libpcap/libpcap.a(pcap-rdmasniff.o):在函数‘rdmasniff_cleanup’中:
/home/jifukui/jifukuistudy/sourcecode/nmap/libpcap/./pcap-rdmasniff.c:82:对‘ibv_dereg_mr’未定义的引用
/home/jifukui/jifukuistudy/sourcecode/nmap/libpcap/./pcap-rdmasniff.c:84:对‘ibv_destroy_qp’未定义的引用
/home/jifukui/jifukuistudy/sourcecode/nmap/libpcap/./pcap-rdmasniff.c:85:对‘ibv_destroy_cq’未定义的引用
/home/jifukui/jifukuistudy/sourcecode/nmap/libpcap/./pcap-rdmasniff.c:86:对‘ibv_dealloc_pd’未定义的引用
/home/jifukui/jifukuistudy/sourcecode/nmap/libpcap/./pcap-rdmasniff.c:87:对‘ibv_destroy_comp_channel’未定义的引用
/home/jifukui/jifukuistudy/sourcecode/nmap/libpcap/./pcap-rdmasniff.c:88:对‘ibv_close_device’未定义的引用
libpcap/libpcap.a(pcap-rdmasniff.o):在函数‘rdmasniff_create’中:
/home/jifukui/jifukuistudy/sourcecode/nmap/libpcap/./pcap-rdmasniff.c:370:对‘ibv_get_device_list’未定义的引用
/home/jifukui/jifukuistudy/sourcecode/nmap/libpcap/./pcap-rdmasniff.c:405:对‘ibv_free_device_list’未定义的引用
libpcap/libpcap.a(pcap-rdmasniff.o):在函数‘rdmasniff_findalldevs’中:
/home/jifukui/jifukuistudy/sourcecode/nmap/libpcap/./pcap-rdmasniff.c:417:对‘ibv_get_device_list’未定义的引用
/home/jifukui/jifukuistudy/sourcecode/nmap/libpcap/./pcap-rdmasniff.c:434:对‘ibv_free_device_list’未定义的引用
collect2: 错误:ld 返回 1
make: *** [nmap] 错误 1

主要原因是由于libpacp.a这个静态库使用了libibverbs.so这个动态库,libpacp.a只是添加了使用的符号标记但是并没有真正的将使用的libibverbs.so库中的函数内容导致程序连接时找不到对应的函数实现。

现在有两个方法进行解决:

(1)如果电脑中安装了libpcap,可以在运行configure程序的时候指定pcap的安装位置比如我的安装位置是/usr/local

进行如下设置./configure --with-libpcap=/usr/local/

(2)修改Makefile文件:在LIBS中添加-libverbs

如下所示:

LIBS =  -lnsock -lnbase -lpcre $(LIBPCAPDIR)/libpcap.a $(LIBSSH2_LIBS) $(OPENSSL_LIBS) $(ZLIB_LIBS) libnetutil/libnet    util.a $(top_srcdir)/libdnet-stripped/src/.libs/libdnet.a $(top_srcdir)/liblua/liblua.a $(top_srcdir)/liblinear/libli    near.a -ldl  -libverbs
然后在进行编译将会看见生成了nmap的可执行文件。

按照如下方式进行验证nmap的安装状态:

输入:

./nmap --version

显示:

Nmap version 7.80 ( https://nmap.org )
Platform: i686-pc-linux-gnu
Compiled with: nmap-liblua-5.3.5 openssl-1.0.2k nmap-libssh2-1.8.2 libz-1.2.7 libpcre-8.32 nmap-libpcap-1.9.0 nmap-libdnet-1.12 ipv6
Compiled without:
Available nsock engines: epoll poll select
表示nmap编译成功。

安装:

安装需要root权限,在root权限下运行make install

运行nmap --version查看是否安装成功。

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐