对于端口扫描,使用的最多的就是nmap这个工具,不想python已经强大到,提供了nmap这个扫描端口的模块。

本片文章主要介绍nmap模块的两个常用类:

  • PortScanner()类,实现一个nmap工具的端口扫描功能的封装;
  • PortScannerHostDict()类,实现存储与访问主机的扫描结果。

安装:这里需要安装的是python-nmap模块,不是nmap模块,pip install python-nmap。

PortScanner()类的一些常用方法:

1. scan()方法:

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

实现指定主机,端口,nmap命令行参数的扫描。

参数说明:

  • hosts:字符串类型,表示扫描的主机的地址,格式可以用"scanme.nmap.org","127.0.0.1/24"表示;
  • ports:字符串类型,表示要扫描的端口,可以用"22,80,443-1000"表示;
  • arguments:字符串类型,表示nmap命令行参数,格式为"-sU -sX -sC"表示。
import nmap
#实例化
nm = nmap.PortScanner()
#端口扫描
nm.scan('www.baidu.com','22,80,443','-sV')

2. command_line(self)方法

返回的扫描方法映射到具体的nmap命令行

nm.command_line()

3. scaninfo(self)方法

返回nmap扫描信息,格式为字典类型

nm.scaninfo()

4. all_hosts(self)方法

返回nmap扫描的主机清单,格式为列表类型

nm.all_hosts()

------------------------------------------------------

PortScannerHostDict()类的一些常用方法

1. hostname(self)方法

返回扫描对象的主机名

nm['61.135.169.125'].hostname()

2. state(self)方法

返回扫描对象的状态,包括四种状态(up,down,unknown,skipped)

nm['61.135.169.125'].state()

3. all_protocols(self)方法

返回扫描的协议

nm['61.135.169.125'].all_protocols()

4.all_tcp(self)方法

返回TCP协议扫描的端口

nm['61.135.169.125'].all_tcp()

5.tcp(self,port)方法

返回扫描TCP协议port的信息

nm['61.135.169.125'].tcp()

实践:实现高效的端口扫描

实践代码采用scan()方法的arguments参数指定为 "-v  -PE  -p + 端口",-v表示启用细节模式,可以返回非up状态主机清单;-PE 表示采用TCP同步扫描(TCP,SYN)方式;-p指定扫描端口范围。程序输出部分采用了三个for循环体,第一层遍历扫描主机,第二层遍历协议,第三层遍历端口,最后输出主机状态。

import sys
import nmap scan_row=[]
input_data = input('Please input hosts and port: ')
scan_row = input_data.split(" ")
if len(scan_row)!=2:
    print("Input errors,example \"192.168.1.0/24 80,443,22\"")
    sys.exit(0)
#接收用户输入的主机
hosts=scan_row[0]
#接收用户输入的端口
port=scan_row[1] try:
    #创建端口扫描对象
    nm = nmap.PortScanner()
except nmap.PortScannerError:
    print('Nmap not found', sys.exc_info()[0])
    sys.exit(0)
except:
    print("Unexpected error:", sys.exc_info()[0])
    sys.exit(0) try:
    #调用扫描方法,参数指定扫描主机hosts,nmap扫描命令行参数arguments
    nm.scan(hosts=hosts, arguments=' -v -sS -p '+port)
except Exception as e:
    print("Scan erro:"+str(e))
    
#遍历扫描主机
for host in nm.all_hosts():
    print('----------------------------------------------------')
    #输出主机及主机名
    print('Host : %s (%s)' % (host, nm[host].hostname()))
    #输出主机状态,如up、down
    print('State : %s' % nm[host].state())
    for proto in nm[host].all_protocols():
        #遍历扫描协议,如tcp、udp
        print('----------')
        #输入协议名
        print('Protocol : %s' % proto)
        #获取协议的所有扫描端口
        lport = nm[host][proto].keys()
#端口列表排序
       list(lport).sort()
#遍历端口及输出端口与状态
        for port in lport:
            print('port : %s\tstate : %s' % (port, nm[host][proto][port]['state']))

7.python实现高效端口扫描器之nmap模块的更多相关文章

  1. 端口扫描器之java实现

    端口扫描器之java实现   import java.net.*;import java.io.*;import java.awt.*;import java.awt.event.*;import j ...

  2. 端口扫描工具 nmap 使用手册

    0x00 主机发现 -sL 仅仅是显示,扫描的IP数目,不会进行任何扫描 -sn ping扫描,即主机发现 -Pn 不检测主机存活 -PS/PA/PU/PY[portlist] TCP SYN Pin ...

  3. 端口扫描之王——nmap入门精讲(一)

    端口扫描在百度百科上的定义是: 端口扫描是指某些别有用心的人发送一组端口扫描消息,试图以此侵入某台计算机,并了解其提供的计算机网络服务类型(这些网络服务均与端口号相关),但是端口扫描不但可以为黑客所利 ...

  4. 端口扫描之王——nmap入门精讲(转)

    端口扫描在百度百科上的定义是: 端口扫描是指某些别有用心的人发送一组端口扫描消息,试图以此侵入某台计算机,并了解其提供的计算机网络服务类型(这些网络服务均与端口号相关),但是端口扫描不但可以为黑客所利 ...

  5. 端口扫描工具nmap

    nmap 使用介绍 nmap是目前为止最广为使用的国外端口扫描工具之一.我们可以从[url]http://www.insecure.org/[/url]进行下载,可以很容易的安装到Windows和un ...

  6. 用Python实现一个端口扫描,只需简单几步就好

    一.常见端口扫描的原理 0.秘密扫描 秘密扫描是一种不被审计工具所检测的扫描技术. 它通常用于在通过普通的防火墙或路由器的筛选(filtering)时隐藏自己. 秘密扫描能躲避IDS.防火墙.包过滤器 ...

  7. 端口扫描程序nmap使用手册

        其实还是建议看英文的man,对以后学习其他东西很有帮助的:) 摘要 nmap是一个网络探测和安全扫描程序,系统管理者和个人可以使用这个软件扫描大型的网络,获取那台主机正在运行以及提供什么服务等 ...

  8. 端口扫描工具nmap的常用参数讲解

    转载请注明出处:https://www.cnblogs.com/wangyanzhong123/p/12576406.html nmap下载与安装 这个没什么好说的.很简单官网上下载就ok了,需要注意 ...

  9. 端口扫描命令nmap

    转:http://www.osyunwei.com/archives/2004.html 下面教大家在CentOS中用nmap查看主机端口: 一.安装nmap yum install nmap -y ...

随机推荐

  1. Python 函数 -slice()

    功能: slice() 函数实现切片对象,主要用在切片操作函数里的参数传递.返回一个切片对象. 语法: class slice(stop) class slice(start, stop[, step ...

  2. spring mvc集成velocity使用

    目前流行的三大页面视图神器是:老牌大哥jsp.后起之秀freemarker和velocity.这里不详细比较这三者的优劣,总体来说,jsp是标配,但后面两个更严格的执行了视图与业务的分离,页面里是不允 ...

  3. 【openCV学习笔记】【3】高斯模糊一张图片(_cvSmooth相关编译错误)

    代码如下: #include <iostream> #include <opencv/highgui.h> #include <opencv/cv.h> void ...

  4. Linux yum操作时出现Error: xz compression not available

    yum升级PHP版本的时候出现这个问题 由于CentOS6的系统安装了epel-release-latest-7.noarch.rpm 导致在使用yum命令时出现Error: xz compressi ...

  5. OPCDAAuto.dll的C#使用方法浅析(转载)

    上次研究了.Net版本的OPC API dll,这次我采用OPCDAAuto.dll来介绍使用方法.以下为我的源代码,有详细的注释无需我多言.编译平台:VS2008SP1.WINXP.KEPServe ...

  6. 【转】 Pro Android学习笔记(九七):BroadcastReceiver(1):基础小例子

    目录(?)[-] 基础小例子 发送Broadcast intent 运行情况 应用间的广播 文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog ...

  7. java多线程练习实例

    总结: 循环的使用率蛮高,Thraed.sleep(),try-catch语句 package com.aa; public class West { public static void main( ...

  8. Spring Batch介绍

    简介 SpringBatch 是一个大数据量的并行处理框架.通常用于数据的离线迁移,和数据处理,⽀持事务.并发.流程.监控.纵向和横向扩展,提供统⼀的接⼝管理和任务管理;SpringBatch是Spr ...

  9. NOIP2008普及组第3题 传球游戏

    NOIP2008普及组第3题 传球游戏 时间限制: 1 Sec  内存限制: 128 MB提交: 29  解决: 16[提交][状态][讨论版][命题人:外部导入] 题目描述 上体育课的时候,小蛮的老 ...

  10. mysql设计与开发

    架构设计表结构设计索引sql语句1.表结构设计的核心思想是什么?容量评估,性能优化,硬件升级,垂直拆分,水平拆分 2.有个大表为了一个查询(一天就查2次),领导要你建索引(索引空间大小有500G),你 ...