使用NMAP端口扫描代码实现

   Nmap是一个网络连接端扫描软件,用来扫描网上电脑开放的网络连接端。确定哪些服务运行在哪些连接端,并且推断计算机运行哪个操作系统(这是亦称 fingerprinting)。其基本功能有三个,一是探测一组主机是否在线;其次是扫描 主机端口,嗅探所提供的网络服务;还可以推断主机所用的操作系统 。它 以隐秘的手法,避开闯入检测系统的监视,并尽可能不影响目标系统的日常操作,因此也常被黑客所青睐。本文以Centos7为例,用python实现NMAP进行端口扫描。

 一、安装NMAP

1.下载NMAP源码

cd /usr/src
git clone https://github.com/nmap/nmap.git

2.进行编译安装

cd nmap
./configure

(若安装过程中报错,如make[1]:g++:conmand not found等,则需要安装一下依赖库)

 

 yum -y install gcc automake autoconf libtool make 

 

yum install gcc gcc-c++

 接下来进行编译

make
make install

 

出现以上界面表示安装成功

3.清除安装时生成的临时文件

make clean

4.查看nmap的版本

nmap version

成功安装nmap

二、安装python-nmap

直接通过pip安装(若linux环境下无pip可自行安装)

python -m pip install python-nmap

三、功能实现

      安装好以上工具之后,将Nmap import到脚本中,就可以使用Nmap扫描功能了。PortScanner类对象能完成扫描功能,PortScanner类有一个scan()函数,它可将目标和端口的列表作为参数输入,并对他们进行基本的Nmap扫描功能。另外,还可以把目标主机的地址/端口放入数组中备查,并打印出端口的状态。在接下来的部分中,依靠该功能来定位和识别目标。

#!/usr/bin/env Python
import nmap
import optparse

def nmapScan(tgtHost,tgtPort):
    nmScan=nmap.PortScanner()
    nmScan.scan(tgtHost,tgtPort)
    state=nmScan[tgtHost]['tcp'][int (tgtPort)]['state']
    print("[*]"+tgtHost+" tcp/"+tgtPort+""+state)
def main():
    parser=optparse.OptionParser('using%prog'+'-H <target host> -p <target port>')
    parser.add_option('-H',dest='tgtHost',type='string',help='specify target host')
    parser.add_option('-p',dest='tgtPort',type='string',help='specify target port[s] separated by comma')
    (options,args)=parser.parse_args()
    tgtHost=options.tgtHost
    tgtPorts=str(options.tgtPort).split(',')
    if (tgtHost==None)|(tgtPorts[0]==None):
        print(parser.usage)
        exit(0)
    for tgtPort in tgtPorts:
        nmapScan(tgtHost,tgtPort)
if __name__ =='__main__':
    main()

实例如下:

python scan-nmap.py -H 172.22.32.12 -p 21,1720,88,22,25,49,69,80,107,115,161,163,443,514

 

posted @ 2018-12-10 21:55  木v凉  阅读(2197)  评论(0编辑  收藏  举报