zoukankan      html  css  js  c++  java
  • Python之——python-nmap的安装与常用方法说明

    一、python-nmap安装

    # yum -y install nmap #安装nmap工具
    # 模块pip方式安装
    # pip install nmap
    # 模块源码安装
    # wget http://xael.org/pages/python-nmap-0.6.1.tar.gz
    # tar -zxvf python-nmap-0.6.1.tar.gz
    # cd python-nmap-0.6.1
    # python setup.py install

    二、模块常用方法说明

    这里我们主要接受python-nmap模块的两个常用类,一个是PortScanner()类,实现一个nmap工具的端口扫描功能封装;另一个为PortScannerHostDict()类,实现存储与访问主机扫描结果

    1、PortScanner()类常用方法
    1-1、scan()方法

    scan(self, hosts='127.0.0.1', ports=None, arguments='-sV')

    方法,实现指定主机、端口、namp命令行参数的扫描。参数hosts为字符串类型,表示扫描的主机地址,格式可以用"scanme.nmap.org"、"192.116.0-255.1-127"、"216.163.128.20/20"表示; 参数ports为字符串类型,表示扫描的端口,可以用"22,53,110,143-4564"表示;参数namp命令行参数,格式为"-sU -sX -sC",例如:

    nm = nmap.PortScanner()
    nm.scan('192.168.209.121-122', '22,80')

    1-2、command_line()方法
    command_line(self)方法,返回的扫描方法映射到具体的nmap命令行,如:

    >>> nm.command_line()
    u'nmap -oX - -p 22,80 -sV 192.168.209.121-122'

    1-3、scaninfo()方法
    scaninfo(self)方法,返回nmap扫描信息,格式为字典类型,如:

    >>>nm.scanninfo()
    {'tcp':{'services':'22,80', 'method':'syn'}}

    1-4、all_hosts()方法
    all_hosts(self)方法,返回nmap扫描的主机清单,格式为列表类型,例如:

    ['192.168.209.121', '192.168.209.122']


    2、PortScannerHostDict()类常用方法
    2-1、hostname()方法
    hostname(self)方法,返回扫描对象的主机名,如:

    >>> nm['192.168.209.121'].hostname()

    'liuyazhuang'
    2-2、state()方法
    state(self)方法,返回扫描对象的状态,包括4中状态(up、down、unknown、skipped),如:

    >>> nm['192.168.209.121'].state()


    'up'
    2-3、all_protocols()方法
    all_protocols(self)方法,返回扫描的协议,如:

    >>> nm['192.168.209.121'].all_protocols()

    ['tcp']
    2-4、all_tcp()方法
    all_tcp(self)方法,返回TCP协议扫描的端口,如:

    >>> nm['192.168.209.121'].all_tcp()


    [22,80]
    2-5、tcp()方法
    tcp(self, port)方法,返回扫描TCP协议port(端口)的信息,如:

    >>> nm['192.168.209.121'].tcp(22)
    {'state':'open', 'reason':'syn-ack', 'name':'ssh'}

    python操作nmap

    1.简单的小案例

    创建PortScanner实例,然后扫描159.239.210.26这个IP的20-443端口。

    import nmap
    
    nm = nmap.PortScanner()
    ret = nm.scan('115.239.210.26','20')
    print ret
    
    返回格式如下:
    {'nmap': {'scanstats': 
    {'uphosts': '1', 'timestr': 'Tue Oct 25 11:30:47 2016', 'downhosts': '0', 'totalhosts': '1', 'elapsed': '1.11'},
     'scaninfo': {'tcp': {'services': '20', 'method': 'connect'}}, 'command_line': 'nmap -oX - -p 20 -sV 115.239.210.26'},
     'scan': {'115.239.210.26': {'status': {'state': 'up', 'reason': 'syn-ack'}, 'hostnames': [{'type': '', 'name': ''}],
     'vendor': {}, 'addresses': {'ipv4': '115.239.210.26'},
     'tcp': {20: {'product': '', 'state': 'filtered', 'version': '', 'name': 'ftp-data', 'conf': '3', 'extrainfo': '', 
    'reason': 'no-response', 'cpe': ''}
    }
    }
    }
    }

    2.内置方法:

    还可以打印出简单的信息

    import nmap  
    nm = nmap.PortScanner() 
    print nm.scaninfo()
    # {u'tcp': {'services': u'20-443', 'method': u'syn'}}
    print nm.command_line() 
    # u'nmap -oX - -p 20-443 -sV 115.239.210.26' 

    查看有多少个host

    print nm.all_hosts()
    # [u'115.239.210.26'] 

    查看该host的详细信息

    nm['115.239.210.26']

    查看该host包含的所有协议

    nm['115.239.210.26'].all_protocols() 

    查看该host的哪些端口提供了tcp协议

    nm['115.239.210.26']['tcp']
    
    nm['115.239.210.26']['tcp'].keys() 

    查看该端口是否提供了tcp协议

    nm['115.239.210.26'].has_tcp(21)

    还可以像这样设置nmap执行的参数

    nm.scan(hosts='192.168.1.0/24', arguments='-n -sP -PE -PA21,23,80,3389') 

    更多操作请进官网http://xael.org/pages/python-nmap-en.html 



  • 相关阅读:
    源码实现 --> strcmp
    源码实现 --> strdel
    源码实现 --> strcpy
    SoC的Testbench中的简易bus_monitor(加入print函数)
    debian 安装后需做的几件事
    使用Perl合并文件
    一个简单的Verilog计数器模型
    Environment Modules简单使用
    Git push “fatal: Authentication failed ”
    使用SystemC进行硬件仿真
  • 原文地址:https://www.cnblogs.com/-qing-/p/10900033.html
Copyright © 2011-2022 走看看