文章目录

  • 模块功能
  • 安装Nmap及其模块
  • 基本用法
  • 编写一个端口扫描器
  • 编写一个主机存活扫描器

模块功能

目前Nmap模块已具备如下各种功能。

  • 主机发现功能。向目标计算机发送信息,然后根据目标的反应来确定它是否处于开机并联网的状态。
  • 端口扫描 。向目标计算机的指定端口发送信息,然后根据目标端口的反应来判断它是否开放。
  • 服务及版本检测。向目标计算机的指定端口发送特制的信息,然后根据目标的反应来检测它运行服务的服务类型和版本。
  • 操作系统检测。
    除了这些基本功能之外,Nmap还实现一些高级的审计技术,例如,伪造发起扫描端的身份,进行隐蔽的扫描,规避目标的防御设备(例如防火墙),对系统进行安全漏洞检测,并提供完善的报告选项。再后来的不断发展中,随着Nmap强大的脚本引擎NSE的推出,任何人都可以自己向Nmap中添加新的功能模块。

安装Nmap及其模块

Nmap的安装Windows下去官网下载就可以了,作者遇到的问题也已经专门做了笔记,这是笔记链接
在这里需要强调一下,我们要安装的模块是python-nmap 而不是 nmap ,切记切记!如果装错了模块,后面是无法完成实例化的!

pip install python-nmap #安装模块命令

基本用法

  1. python-nmap模块实例化

最常用的是PortScanner类,这个类实现Nmap工具功能的封装。对这个类进行实例化很简单,只需要如下语句便可实现。

import nmap
nm=nmap.PortScanner()

PortScannerAsync类和PortScanner类的功能相似,但是这个类可以实现异步扫描,对这个类的实例化语句如下。

import nmap
nm=nmap.PortScannerAsync()
  1. python-nmap中的函数

首先看一下PortScanner类,这个类中包含了如下几个函数。
scan()函数:这个函数的完整形式为scan(self,hosts=‘127.0.0.1’,ports=None,arguments=’-sV’,sudo=False),用来对指定目标进行扫描。

这里面的参数hosts的值为字符串类型,表示要扫描的主机,形式可以是IP地址,例如"192.168.1.1",也可以是一个域名,例如"www.nmap.org"

参数ports的值也是字符串类型,表示要扫描的端口。如果要扫描的是单一端口,形式可以为"80"。如果为多个端口,可以用逗号分开,例如"80,443,3389"。如果要扫描的是连续的端口范围,可以用横线,例如“1-5000” 。

参数arguments的值也是字符串类型,这个参数实际上就是Nmap扫描所用的参数。

参数 作用
-O 系统扫描
-V,-v,-D,-d,-p debug信息
–fuzzy 推测操作系统检测结果
-sT TCP端口扫描(完整三次握手)
-sU UDP端口扫描(不回应可能打开,回应则关闭)
-sL DNS反向解析
-sS 隐藏扫描(半开SYN)
-sP 发现存活主机(直连arp,非直连TCP80,ICMP)
-sO 确定主机协议扫描
-sW 对滑动窗口的扫描
-sA TCP ACK扫描
-sN 关闭主机扫描(不管是否存活直接扫描)
-sF fin扫描
-sX Xmas扫描(fin psh urg为置位)
-sI 完全隐藏(以一个跳板为主机(无流量)扫描另一台主机)
-sV 服务器版本
-sC 跟安全有关的脚本
-PN 扫描自己

以上就是我常用的指令==参数,还有很多很多,就不一一列举了。

如果要对192.168.1.101的1~500端口进行一次TCP扫描,可以使用以下命令。

import nmap
nm = nmap.PortScanner()
nm.scan('192.168.1.101','1-500','-sS')

all_hosts()函数:返回一个被扫描的所有主机列表。

command_line()函数:返回在当前扫描中使用的命令行。

csv()函数:返回值是一个CSV(逗号分隔文件格式)的输出。
如果想看的更清楚一点,可以使用print输出csv()的内容。
has_host(self,host)函数:检查是否有host的扫描结果,如果有则返回True,否则返回False。

scaninfo()函数:列出一个扫描信息的结构。

还有一些不常用的操作大家可以自己去实践一下,这里不做过多介绍。

而PortScannerAsync类中最为重要的函数也是scan(),用法与PortScanner类中的scan()基本一样,只不过多了一个回调函数。完整的scan()函数格式为scan(self,hosts=‘127.0.0.1’,ports=None,arguments=’-sV’,callback=None,sudo=False)这里面的callback是以(host,scan_data)为参数的函数,也就是整个网段的扫描。

import nmap
nm = nmap.PortScannerAsync()
nm.scan(hosts = '192.168.1.0/24',arguments = '-sP')

这个类提供了以下三个用来实现异步的函数。
still_scanning():如果扫描正在进行则返回Ture,否则返回False。

wait(self,timeout=None):函数表示等待时间。

stop():停止扫描。

编写一个端口扫描器

好了,现在已经了解python-nmap的用法,接下来就可以使用这个模块来编写一个简单的端口扫描器了。

import nmap                       #导入模块
nm = nmap.PortScanner()           #导入函数
nm.scan('192.168.1.104','1-1000') #输入你要扫描的ip与道口
for host in nm.all_hosts():       #返回被扫描的主机列表给hostprint('---------------------------------------------------------')print('Host : %s (%s)' % (host,nm[host].hostname()))    #nm[host].hostname()获取目标主机的主机名print('State : %s' % nm[host].state())                  #nm[host].state()获取主机的状态  |up|down|unknow|skipped|for proto in nm[host].all_protocols():                  #nm[host].all_protocols获取执行的协议['tcp','udp']print('-----------------------------------------------------')print('protocol : %s' % proto )                     #输出执行的协议lport = nm[host][proto].keys()                      #获取目标主机所开放的端口赋值给lport# lport.sort()for port in lport:                                                                  #将lport赋值给port并遍历print('port : %s\tstate : %s' % (port,nm[host][proto][port]['state']))          #输出扫描结果
  • 运行结果:

编写一个主机存活扫描器

这里其实换汤不换药,好好体会一下两段代码就会发现他们其实是大同小异的。

import nmap                 #导入模块
nm = nmap.PortScanner()     #导入函数nm.scan('192.168.1.0/24',arguments='-sP')                               #绑定网段与扫描模式
hosts_list = [(x, nm[x]['status']['state']) for x in nm.all_hosts()]    #定义字典for host, status in hosts_list:                                         #将字典里的状态赋值给host,statusprint(host+" is "+status)                                           #输出扫描结果
  • 运行结果

python中的nmap模块(编写扫描器)相关推荐

  1. python中tkinter模块_使用Python中的tkinter模块作图的方法

    python简述: Python是一种解释型.面向对象.动态数据类型的高级程序设计语言.自从20世纪90年代初Python语言诞生至今,它逐渐被广泛应用于处理系统管理任务和Web编程.Python[1 ...

  2. Python中的自定义模块

    Python中的模块 一.前言 二.模块的概述 三.自定义模块 1.创建模块 2.使用import语句导入模块 3.使用from...import语句导入模块 一.前言   在Python提供了强大的 ...

  3. python中的自定义模块及其使用

    python中的自定义模块及其使用 python中的自定义模块,就不是python自带的模块,而是通过自己来创建出来的. 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长, ...

  4. python cx oracle 11g,怎么在python中使用cx_Oracle模块连接Oracle数据库

    怎么在python中使用cx_Oracle模块连接Oracle数据库 发布时间:2021-03-29 18:08:05 来源:亿速云 阅读:65 作者:Leah 怎么在python中使用cx_Orac ...

  5. 介绍Python中的__future__模块

    这篇文章主要介绍了介绍Python中的__future__模块,__future__模块使得在Python2.x的版本下能够兼容更多的Python3.x的特性,需要的朋友可以参考下 Python的每个 ...

  6. python中的logging记录日志_[ Python入门教程 ] Python中日志记录模块logging使用实例...

    python中的logging模块用于记录日志.用户可以根据程序实现需要自定义日志输出位置.日志级别以及日志格式. 将日志内容输出到屏幕 一个最简单的logging模块使用样例,直接打印显示日志内容到 ...

  7. python使用教程cmd啥意思-Python 中的cmd模块学习

    Python中的cmd模块类型提供了一个创建命令行解析器的框架.简单的来说,可以继承Cmd来创建命令行界面,然后对所有想处理的命令command执行do_command方法.默认情况下,它使用read ...

  8. python中的绘图模块turtle的使用

    python中的绘图模块turtle的使用(7-20190125) 文章目录: 还是从一个有趣的小应用开始,turtle的骚操作吧 最近小猪配齐比较流行,下面用turtle绘制一个粉红色的小猪猪吧-- ...

  9. linux系统python截图不显示中文_Linux运维知识之解决linux系统下python中的matplotlib模块内的pyplot输出图片不能显示中文的问题...

    本文主要向大家介绍了Linux运维知识之解决linux系统下python中的matplotlib模块内的pyplot输出图片不能显示中文的问题,通过具体的内容向大家展现,希望对大家学习Linux运维知 ...

  10. Python中的random模块

    Python中的random模块用于随机数生成,对几个random模块中的函数进行简单介绍.如下: random.random() 用于生成一个0到1的随机浮点数.如: import random r ...

最新文章

  1. 重磅 ! Redis+Nginx+JVM+设计模式+Spring全家桶+Dubbo
  2. 去除RNA-seq数据批次效应
  3. 图形驱动程序和显卡驱动什么区别_什么是核心显卡,核心显卡和集成显卡的区别...
  4. Windows Live Writer 配置报407 Proxy Authentication Required错误
  5. java语句类型_01-java数据类型与语句
  6. 多线程设计模式(二):Future模式
  7. Sublime text3 更改侧边栏颜色
  8. Resumable.js - 基于HTML5 File API的可断点续传的文件上传插件
  9. 20050909:女乘客钓男司机?
  10. Jquery关闭离开页面时提醒
  11. dota2服务器何时修复,《DOTA2》10月10日更新:服务器改善bug饰品修复
  12. 从阿里云故障说 Io hang 是什么?
  13. 使用淘宝api直接上传图片的方法
  14. 时事点评-红芯浏览器事件
  15. Android 学习笔记(6)之Lambda和注解
  16. 百度搜索结果页面的参数 键盘重复速度(rsv_sug3)
  17. 算术表达式求值演示(C/C++实现)
  18. 为美女纹身--壁纸+视频生成器
  19. 完爆90%的性能毛病,收好数据库优化八大通用绝招
  20. [数值计算-16]:最小二乘法的求解1 - 一元二次方程解析法求解

热门文章

  1. Ubuntu 16.04 安装SecureCRT破解版
  2. 失意的互联网人拼命叩开Web3大门
  3. Burp Suite暴力破解网站密码
  4. dns 监控系统 设计 dns安全威胁的可视化。
  5. SQL12 获取每个部门中当前员工薪水最高的相关信息
  6. CCF-CSP计算机职业资格认证备考
  7. 超级无敌屌炸天位运算快读
  8. 挪威访学1:My first flight
  9. 华为交换机导入配置_华为交换机配置文件备份与还原
  10. iOS系统开发入门至精通学习指南