渗透利器-kali工具 (第四章7) 第三方库python-nmap学习
本文内容:
- Python-nmap简介
- Python-nmap安装
- Python-nmap使用
- Python下使用nmap模块进行扫描
1,Python-nmap:
Python-nmap是Python的一个模块库,使用这个模块可以让Python很方面的操作nmap来工作。
可以帮助管理员完成自动化扫描任务和生成报告的工具,支持nmap脚本输出。
Python-nmap模块有两个常用类:
1.PortScanner()类,实现一个nmap工具的端口扫描功能封装。
2.PortScannerHostDict()类,实现存储于访问主机的扫描结果。
2.Python-nmap的安装:
1.Windows安装Python-nmap模块:
1.pip install python-nmap //-i https://pypi.tuna.tsinghua.edu.cn/simple
2.官网下载:https://pypi.org/project/python-nmap/
2.Linux安装Python-nmap模块:
1.wget http://xael.org/pages/python-nmap-0.6.1.tar.gz
2.tar -zxvf ptyhon-nmap-0.6.1
3.cd python-nmap-0.6.1
4.python setup.py install
或者同样使用pip安装。
3.Python-nmap的使用:
1.PortScanner()类:可用于实现对指定主机进行端口扫描。
1.scan(host、post、args)方法:以指定方式扫描指定主机或网段的指定端口。
参数:
host:要扫描的主机或网段,可以是一个单独。
ip:127.0.0.1-10:可以小范围网段,也可以是大范围网段。
port:可选参数,要扫描的端口,多个端口用逗号隔开,如20,21
args:可选参数,要扫描的方式。
scan[ip地址、端口、指令]
使用实例:
import nmap nm = nmap.PortScanner() nm.scan('192.168.10.10-100', '22,21','-sV')
2.command_line()方法:返回扫描方法映射到具体的nmap命令行。
使用实例:
import nmap nm = nmap.PortScanner() nm.scan('192.168.10.10-100', '22,21','-sV’) a=nm.command_line() print(a) 运行结果: nmap -oX - -p 20,21 -sV 192.168.125.134
3.scaninfo()方法:返回nmap扫描信息,格式为字典类型:
使用实例:
import nmap nm = nmap.PortScanner() nm.scan('192.168.10.10-100', '22,21','-sV’) a=nm.scaninfo() print(a) 运行结果: {'tcp': {'services': '20-21', 'method': 'syn'}}
4.all_host()方法:返回nmap扫描的主机清单,格式为列表类型:
使用实例:
import nmap nm = nmap.PortScanner() nm.scan('192.168.10.10-12', '22,21','-sV’) a = nm.all_hosts() print(a) 运行结果: ['192.168.10.10','192.168.10.11','192.168.10.12']
5.查看扫描主机详细信息:nm['127.0.0.1']
使用实例:
import nmap nm=nmap.PortScanner() nm.scan('192.168.125.134','445') a=nm['192.168.125.134'] #返回主机的详细信息 print(a) 运行结果: {'status': {'state': 'up', 'reason': 'arp-response'}, 'hostnames': [{'type': 'PTR', 'name': 'bogon'}], 'vendor': {'00:0C:29:F6:2B:F0': 'VMware'}, 'addresses': {'mac': '00:0C:29:F6:2B:F0', 'ipv4': '192.168.125.134'}, 'tcp': {445: {'product': 'Microsoft Windows 7 - 10 microsoft-ds', 'state': 'open', 'version': '', 'name': 'microsoft-ds', 'conf': '10', 'extrainfo': 'workgroup: WORKGROUP', 'reason': 'syn-ack', 'cpe': 'cpe:/o:microsoft:windows'}}}
6.查看主机扫描的端口包含的协议[Tcp/Udp]:namp['127.0.0.1'].all_protocols() 返回列表型数据
使用实例:
import nmap nm=nmap.PortScanner() nm.scan('192.168.125.134','445') a=nm['192.168.125.134'].all_protocols() #返回主机扫描的端口包含的协议 print(a) 运行结果: ['tcp']
7.查看改端口是否提供了TCP协议:nmap['127.0.0.1'].has_tcp[445],返回布尔类型的数据。
使用实例:
import nmap nm=nmap.PortScanner() nm.scan('192.168.125.134','445') a=nm['192.168.125.134'].has_tcp(445) #判断该端口是否提供TCP协议 print(a) 运行结果: True
8.查看该协议下端口的状态:nmap['127.0.0.1'].['tcp'][445][state]
使用实例:
import nmap nm=nmap.PortScanner() nm.scan('192.168.125.134','445') a=nm['192.168.125.134']['tcp'][445]['state'] print(a) 运行结果: open
3,Python下使用nmap模块进行扫描:
代码实现:
import nmap tghost = '192.168.1.7' tgports = (445,3389,443) nmscan = nmap.PortScanner() for tgport in tgports: nmscan.scan(tghost,str(tgport)) state = nmscan[tghost]['tcp'][int(tgport)]['state'] print('[%s]state:%s'%(tgport,state))