python模块学习----nmap模块

安装nmap模块:

pip install python_nma

nmap模块说明:

python-nmap是一个帮助使用nmap端口扫描器的python库。它允许轻松操纵nmap扫描结果,并且将是一个完美的选择,为需要自动完成扫描任务的系统管理员提供的工具并报告。它也支持nmap脚本输出。

nmap模块类:

ET:Python的轻量级XML支持

PortScanner:端口扫描

PortScannerAsync:异步进行端口扫描

PortScannerError:nmap的异常错误类

PortScannerHostDict:用于存储和访问主机扫描结果的特殊小类

PortScannerYield:通过生成器使用Python中的nmap

Process:表示在单独的过程中运行的活动,应该是控制扫描进程之类的

convert_nmap_output_to_encoding:编码

csv:CSV操作模块

io:

nmap:

os:

re:

shlex:

subprocess:

sys:

看大概意思就知道,我们这里主要是用PortScanner、PortScannerError、PortScannerHostDict这三个类

PortScanner:普通端口扫描类

初始化PortScanner类,首先看看该模块的__init__构造函数说明。

检测系统和nmap版本上的nmap,如果在路径中找不到nmap,可能会引发PortScannerError异常

__init__(self, nmap_search_path=('nmap', '/usr/bin/nmap', '/usr/local/bin/nmap', '/sw/bin/nmap', '/opt/local/bin/nmap'))

如果你调用PortScanner模块异常,可能就是nmap_search_path默认路径里没找到你安装的nmap可执行文件,需要你手动修改此参数默认值即可。

该类里的方法说明:

all_hosts():返回所有主机的排序列表

analyse_nmap_xml_scan(nmap_xml_output=None, nmap_err='', nmap_err_keep_trace='', nmap_warn_keep_trace=''):分析NMAP xml扫描输出
param nmap_xml_output:要分析的xml字符串

command_line():返回用于扫描的命令行

csv():将CSV输出作为文本返回

get_nmap_last_output():以原始文本返回nmap的最后文本输出

has_host(host):如果主机有结果则返回True,否则返回False

listscan(hosts='127.0.0.1'):不要扫描,但解释目标主机并返回一个主机列表

nmap_version():如果检测到返回nmap版本

scan(hosts='127.0.0.1', ports=None, arguments='-sV', sudo=False):扫描指定的主机
如果nmap输出不是xml,可能会引发PortScannerError异常
hosts:需要扫描的IP或IP段
ports:扫描的端口
arguments:nmap的参数字符串'-sU -sX -sC'
sudo:是否使用sudo启动nmap

scaninfo():返回scaninfo结构{'tcp': {'services': '22', 'method': 'connect'}}

scanstats():返回scanstats结构{'uphosts': '3', 'timestr': 'Thu Jun  3 21:45:07 2010', 'downhosts': '253', 'totalhosts': '256', 'elapsed': '5.79'}

实例演示:

>>> nm = nmap.PortScanner() #实例化普通端口扫描对象nm
>>> nm.nmap_version() #看看当前系统nmap版本
(7, 70) #当前版本为nmap7.7

>>> date = nm.scan('127.0.0.1','22','-sV') #进行扫描,会弹出nmap cmd窗口,会一直等待扫描结束,然后返回json格式的扫描结果date
{'nmap': {'command_line': 'nmap -oX - -p 22 -sV 127.0.0.1', 'scaninfo': {'tcp': {'method': 'syn', 'services': '22'}}, 'scanstats': {'timestr': 'Fri Apr 13 10:43:29 2018', 'elapsed': '8.71', 'uphosts': '1', 'downhosts': '0', 'totalhosts': '1'}}, 'scan': {'127.0.0.1': {'hostnames': [{'name': '', 'type': ''}], 'addresses': {'ipv4': '127.0.0.1'}, 'vendor': {}, 'status': {'state': 'up', 'reason': 'localhost-response'}, 'tcp': {22: {'state': 'open', 'reason': 'syn-ack', 'name': 'ssh', 'product': 'Microsoft Windows IoT sshd', 'version': '1.100', 'extrainfo': 'protocol 2.0', 'conf': '10', 'cpe': 'cpe:/o:microsoft:windows_10:::iot_core'}}}}}
>>> nm.all_hosts()
['127.0.0.1']
>>> nm.command_line()
'nmap -oX - -p 22 -sV 127.0.0.1'
>>> nm.csv()
'host;hostname;hostname_type;protocol;port;name;state;product;extrainfo;reason;version;conf;cpe\r\n127.0.0.1;;;tcp;22;ssh;open;Microsoft Windows IoT sshd;protocol 2.0;syn-ack;1.100;10;cpe:/o:microsoft:windows_10:::iot_core\r\n'
>>> nm.get_nmap_last_output()
'<?xml version="1.0" encoding="UTF-8"?>\r\n<!DOCTYPE nmaprun>\r\n<?xml-stylesheet href="file:///d:/Program Files (x86)/Nmap/nmap.xsl" type="text/xsl"?>\r\n<!-- Nmap 7.70 scan initiated Fri Apr 13 10:43:20 2018 as: nmap -oX - -p 22 -sV 127.0.0.1 -->\r\n<nmaprun scanner="nmap" args="nmap -oX - -p 22 -sV 127.0.0.1" start="1523587400" startstr="Fri Apr 13 10:43:20 2018" version="7.70" xmloutputversion="1.04">\r\n<scaninfo type="syn" protocol="tcp" numservices="1" services="22"/>\r\n<verbose level="0"/>\r\n<debugging level="0"/>\r\n<host starttime="1523587408" endtime="1523587409"><status state="up" reason="localhost-response" reason_ttl="0"/>\r\n<address addr="127.0.0.1" addrtype="ipv4"/>\r\n<hostnames>\r\n</hostnames>\r\n<ports><port protocol="tcp" portid="22"><state state="open" reason="syn-ack" reason_ttl="64"/><service name="ssh" product="Microsoft Windows IoT sshd" version="1.100" extrainfo="protocol 2.0" ostype="Windows 10 IoT Core" method="probed" conf="10"><cpe>cpe:/o:microsoft:windows_10:::iot_core</cpe></service></port>\r\n</ports>\r\n<times srtt="0" rttvar="5000" to="100000"/>\r\n</host>\r\n<runstats><finished time="1523587409" timestr="Fri Apr 13 10:43:29 2018" elapsed="8.71" summary="Nmap done at Fri Apr 13 10:43:29 2018; 1 IP address (1 host up) scanned in 8.71 seconds" exit="success"/><hosts up="1" down="0" total="1"/>\r\n</runstats>\r\n</nmaprun>\r\n'
>>> nm.scaninfo()
{'tcp': {'method': 'syn', 'services': '22'}}
>>> nm.scanstats()
{'timestr': 'Fri Apr 13 10:43:29 2018', 'elapsed': '8.71', 'uphosts': '1', 'downhosts': '0', 'totalhosts': '1'}
>>>

PortScannerHostDict类说明:

该类里的方法说明:

all_ip():返回ip端口列表

all_protocols():返回所有扫描协议的列表
>>> nm['127.0.0.1'].all_protocols()
['tcp']

all_sctp():返回sctp端口列表

all_tcp():返回tcp端口列表
>>> nm['127.0.0.1'].all_tcp()
[22]

all_udp():返回udp端口列表

has_ip(port):如果ip端口具有info,则返回true,否则返回False

has_sctp(port):如果sctp端口有info,则为真,否则为False

has_tcp(port):如果tcp端口有info,则返回true,否则返回False

has_udp(port):如果udp端口有info,则返回true,否则返回False

hostname():返回用户记录或列表主机名的第一个主机名

hostnames():返回主机名列表

ip(port):返回信息的IP端口

sctp(port):返回信息的sctp端口

state():返回主机状态

tcp(port):返回tcp端口的信息
>>> nm['127.0.0.1'].state()
'up'

udp(port):返回udp端口的信息

uptime():返回主机状态


原文地址:http://blog.51cto.com/10912947/2102867

时间: 2024-07-29 23:52:50

python模块学习----nmap模块的相关文章

python基础学习os模块和sys模块

os模块和sys模块import osos.getcwd() #获取当前工作目录os.chdir() #切换目录os.makedirs() #递归创建一个目录os.removedirs() #递归删除一个目录(若目录为空则删除并递归到上一层目录,如果为空再删除,在递归到上一层目录)os.mkdir() #不递归创建目录os.rmdir() #不递归删除目录os.listdir() #查看指定目录下的所有文件和目录os.remove() #删除一个文件os.rename(oldname,newna

Python语言学习:模块

一.模块 1. 模块(Module):以.py结尾的文件,包含python对象定义和python语句.使代码段更容易理解和使用. 模块分为两种:标准库(直接导入的库)和第三方库(需要下载安装的库). 2. 模块的引入 a. import语句:当解释器遇到import语句,如果模块在当前的搜索路径就会被导入.搜索路径是一个解释器会先进行搜索的所有目录的列表. 如果想要导入模块support.py,需要把命令放在脚本的顶端. import module例如:import sys b.from...i

day5模块学习 -- os模块学习

python基础之模块之os模块 os模块 os模块的作用: os,语义为操作系统,所以肯定就是操作系统相关的功能了,可以处理文件和目录这些我们日常手动需要做的操作,就比如说:显示当前目录下所有文件/删除某个文件/获取文件大小-- 另外,os模块不受平台限制,也就是说:当我们要在linux中显示当前命令时就要用到pwd命令,而Windows中cmd命令行下就要用到这个,额...我擦,我还真不知道,(甭管怎么着,肯定不是pwd),这时候我们使用python中os模块的os.path.abspath

day5模块学习--random模块

Python中的random模块用于生成随机数 下面具体介绍random模块的功能:   1.random.random() #用于生成一个0到1的浮点数   随机浮点数:0<= n < 1.0 >>> import random >>> random.random() 0.10014889182317255 >>> random.random() 0.9318386759483899 >>> random.random(

36、python模块学习-os模块

#!/usr/bin/env python #__author: hlc #date: 2019/6/7 import os # a = os.getcwd() # 获取当前路径,即当前python脚本工作的路径 # print(a) # os.chdir("C:\Python37") # 改变当前脚本工作目录,相当于shell中的cd # print(os.getcwd()) # C:\Python37 # print(os.curdir) # . ;返回当前目录 # print(o

41、python基础学习-re模块

就其本质而言,正则表达式(或 RE)是一种小型的.高度专业化的编程语言,(在Python中)它内嵌在Python中,并通过 re 模块实现.正则表达式模式被编译成一系列的字节码,然后由用 C 编写的匹配引擎执行. 字符匹配(普通字符,元字符): 1 普通字符:大多数字符和字母都会和自身匹配              >>> re.findall('alvin','yuanaleSxalexwupeiqi')                      ['alvin'] 2 元字符:. ^

python系统学习:模块积累(持续更新)

# Author : Sunny# 模块初识'''模块 = 库分为标准库(自带,导入即可)/第三方库(必须安装才可使用)''' # 标准库之sys模块 import sys # sys.pyth 会输出路径(环境变量):包括标准库的路径.第三方库的路径print(sys.path)# sys.argv 会输出当前脚本的路径(相对)print(sys.argv)print(sys.argv[2]) # 会输出参数,用户输入参数,代码依据数组位置找到参数 # 标准库之os模块:多用于和系统交互imp

python模块学习——urllib模块

参考学习:http://www.blogjava.net/ashutc/archive/2011/03/21/346695.html 1.urllib.quote()函数 模拟登录时,对用户名进行处理: 1 def GetUserName(userName): 2 userNameTemp = urllib.quote(userName) 3 userNameEncoded = base64.encodestring(userNameTemp)[:-1] 4 return userNameEnc

34、python模块学习-time模块

#!/usr/bin/env python #__author: hlc #date: 2019/6/7 import time # print(help(time)) # time 帮助信息 # print(time.time()) # 1559884209.677806 # 打印时间戳 从1970年到现在的秒 # time.sleep(3) # print(time.process_time()) # 替代clock # print(time.perf_counter()) # 替代cloc