• 使用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

  • 相关阅读:
    微信浏览器 video
    css 日常
    input file 上传文件类型控制
    JS的一些日常
    使用canvas时, 如何用相对单位(rem, rpx)来适配不同机型
    微信小程序 textarea的placeholder层级过高 在弹层之上 bug解决方法
    保留两位小数, 不足自动补零
    Java创建线程的两个方法
    android socket 网络数据传输
    java中InputStream中read()与read(byte[] b) 用法介绍
  • 原文地址:https://www.cnblogs.com/yaqiong-hu/p/10099432.html
Copyright © 2020-2023  润新知