Nmap模块
安装准备:
- cmd模式下:
pip install python-nmap
到官网下载nmap( http://www.nmap.com.cn/ )。
安装在python的安装目录下。(C:\Users\username\AppData\Local\Programs\Python\Python36-32\Nmap )
在
Porject interpreter
中添加python-nmap
模块报错解决:
>>> import nmap >>> s = nmap.PortScanner() Traceback (most recent call last): File "", line 1, in AttributeError: module 'nmap' has no attribute 'PortScanner'
解决方法:
Make sure you get rid of the old nmap.pyc or cache file if that's there. If that doesn't do it break out a debugger. I have a good one called trepan2. You should be able to step into the import statement. – rocky 删除编译器模块路径 PyCharm Community Edition \porject\venv\Lib\site-packages\nmap\__pycache__ 文件夹下的两个.pyc文件 然后重新启动PyCharm即可 然后把 PyCharm Community Edition \porject\venv\Lib\site-packages\nmap 文件夹内容覆盖到 C:\Users\user\AppData\Local\Programs\Python\Python36-32\Lib\site-packages\nmap 重新运行cmd即可
模块使用:
函数解析:
import nmap #注意安装的是python-nmap模块,引用时是nmap
nm = nmap.PortScanner() #实例化nmap.PortScanner()对象
nm.scan(hosts ='127.0.0.1',arguments ='-PS', ports='1-25') #扫描
'''
参数解析:
1. hosts:扫描目标域名/IP地址。
2. argument: 扫描相关设置参数,详情可参考nmap中文手册(http://www.nmap.com.cn/doc/manual.shtm#2)。
3. ports: 扫描端口范围。
4. sudo: (暂时不明确)
'''
nm.command_line() # 获取扫描所用的命令,例如: nmap -oX - -p 1-25 -PS 127.0.0.1
nm.scaninfo() # 获取扫描的基本信息,例如: {'tcp': {'method': 'syn', 'services': '1-25'}}
nm.all_hosts() # 获取所扫描的所有主机
nm['127.0.0.1'].hostname() # 为主机127.0.0.1获取一个主机名,或者获取主机127.0.0.1的主机名
nm['127.0.0.1'].hostnames() # 获取主机127.0.0.1的主机名列表作为字典列表
nm['127.0.0.1'].state() # 获取主机状态(up|down|unknown|skipped)
nm['127.0.0.1'].all_protocols() # 获取所有在扫描中用到的协议
nm['127.0.0.1']['tcp'].keys() # 获取所有tcp协议的端口,例如: dict_keys([1, 2, 3,......,25])
nm['127.0.0.1'].all_tcp() # 获取所有tcp协议排序后的端口,例如:[1, 2, 3,......,25]
nm['127.0.0.1'].all_udp()
nm['127.0.0.1'].all_ip()
nm['127.0.0.1'].all_sctp()
###使用下列带端口号参数的函数时,请注意取值范围在扫描后所得的端口列表中,否则报错###
nm['127.0.0.1'].has_tcp(22) # 127.0.0.1主机上是否有22/tcp端口的任何信息,例如:True
nm ['127.0.0.1'] ['tcp'] [22] # 获取主机127.0.0.1上22/tcp端口的信息,
nm['127.0.0.1'].tcp(22) # 例如: {'state': 'filtered', 'reason': 'no-response', 'name': 'ssh', 'product': '', 'version': '', 'extrainfo': '', 'conf': '3', 'cpe': ''}
nm['127.0.0.1']['tcp'][22]['state'] # 获取127.0.0.1主机上22/tcp端口的状态,例如:filtered
后记
python-nma
模块是一个集成度很高的模块,各个功能只要调用一个函数就能实现,所以实例部分就此省略,留给读者自己探索。
如果觉得nmap
模块使用起来太过“傻瓜”,想尝试一下自己动手的话,可以尝试使用socket
模块自行编写。