python自动化运维4--实现高效的端口扫描器

这里需要用到python的一个第三方模块块python-nmap实现高效的端口扫描,进行端口扫描的目的是在现实生活中由于系统管理员误操作,导致核心业务服务器的22、21、3389、3306等高危端口暴露在互联网上,会大大提高了被入侵的风险。因此,我们可以通过这样的端口扫描来查看哪些端口已经暴露,及时解决。python-nmap模块作为nmap命令的Python封装,可以让Python很方便地操作nmap扫描器,它可以帮助管理员完成自动扫描任务和生成报告。
接下来我们通过python-nmap实现一个高效的端口扫描工具,与定时作业crontab及邮件告警结合,可以很好地帮助我们及时发现异常开放的高危端口。

import sys
import nmap

input_data = input('Please input hosts and port: ')
scan_row=input_data.split(" ")

if len(scan_row)!=2:
    print ("Input errors,example \"192.168.1.0/24 80,443,22\"")
    sys.exit(0)

hosts=scan_row[0] #接收用户输入的主机
port=scan_row[1] #接收用户输入的端口

try:
    nm = nmap.PortScanner() #创建端口扫描对象
except nmap.PortScannerError:
    print('Nmap not found', sys.exc_info()[0])
    sys.exit(0)
except:
    print("Unexpected error:", sys.exc_info()[0])
    sys.exit(0)

try:
    #调用扫描方法,参数指定扫描主机hosts,nmap扫描命令行参数arguments
    nm.scan(hosts=hosts, arguments=' -v -sS -p '+port)
except Exception as e:
    print("Scan erro:"+str(e))

for host in nm.all_hosts(): #遍历扫描主机
    print('----------------------------------------------------')
    print('Host : %s (%s)' % (host, nm[host].hostname())) #输出主机及主机名
    print('State : %s' % nm[host].state()) #输出主机状态,如up、down

    for proto in nm[host].all_protocols(): #遍历扫描协议,如tcp、udp
        print('----------')
        print('Protocol : %s' % proto) #输入协议名
        lport = nm[host][proto].keys() #获取协议的所有扫描端口
        lport.sort() #端口列表排序
        for port in lport: #遍历端口及输出端口与状态
            print('port : %s\tstate : %s' % (port, nm[host][proto][port]['state']))

其中主机输入支持所有表达方式,如www.qq.com、192.168.1.*、192.168.1.1-20、192.168.1.0/24等,端口输入格式也非常灵活,如80,443,22、80,22-443。代码运行结果如图:
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值