学习python自动化运维的第十天
今天做的是用python和nmap对服务器做端口扫描,用于及时检测非正常开启的高危端口。保障系统的安全。
先安装python的第三方库nmap
pip install nmap
之后对nmap进行测试,测试代码如下:
import nmap
nm = nmap.PortScanner()
result = nm.scan("192.168.186.152","80,22")
print(result)
之后出现报错,报错内容如下:
报错内容:nmap.nmap.PortScannerError: 'nmap program was not found in path.
之后在网上查找相关的错误代码得知,需要安装nmap扫描工具并在nmap的py文件中的PortScanner类下添加nmap的安装路径(指向nmap.exe),具体操作如下:
下载安装nmap,nmap的下载地址为:https://nmap.org/dist/nmap-7.92-setup.exe,其他版本去官网自己下载吧,下载安装nmap(安装过程中记住nmap的安装路径,我的路径为:D:/AppData/nmap)
安装之后在PortScanner类中添加安装路径,添加如下如下内容:D:/AppData/nmap/nmap
之后再进行测试,结果如下:
之后通过python第三方库nmap对服务器的端口进行扫描,并对返回的结果进行相关的整理。
完整代码如下:
import nmap
import sys
scan_row = []
# input_data = input("请输入IP地址和端口号:")
input_data = "192.168.186.152 22,80,3306,3310"
scan_row = input_data.split(" ")
if len(scan_row) != 2:
print("请输入IP地址和端口号,例如:192.168.186.152 80,3306,22")
sys.exit(0)
hosts = scan_row[0]
port = scan_row[1]
try:
nm = nmap.PortScanner()
except nmap.PortScannerError:
print("nmap 没有找到",sys.exc_info()[0])
sys.exit(0)
except:
print("Unexpected error",sys.exc_info()[0])
sys.exit(0)
try:
nm.scan(hosts=hosts,arguments="-v -sS -p " + port)
except Exception as e:
print("扫描错误:",e)
for host in nm.all_hosts():
print("-----------------------------------")
print("Host: %s(%s)"%(host,nm[host].hostname()))
print("State: %s"%nm[host].state())
for proto in nm[host].all_protocols():
print("----------------")
print("Protocol: %s"%proto)
lport = nm[host][proto].keys()
for port in lport:
print("port: %s\tstate: %s"%(port,nm[host][proto][port]["state"]))
运行结果: