nsfocus远程安全评估系统报告提取信息脚本

2024-01-12 13:30

本文主要是介绍nsfocus远程安全评估系统报告提取信息脚本,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

# coding=utf-8
from bs4 import BeautifulSoup
import xlwt


"""
采集移动漏扫报中主机端口,banner信息和漏洞信息
python2.7
"""
ip_port = []
ip_alarm = []

#获取主机
def get_host_list(filename):
    ips = []
    with open(filename + "\\index.html", 'rb') as data:
        soup = BeautifulSoup(data, 'html.parser')
        div = soup.find_all("div", {"name": "ipList"})[0]
        trs = div.find_all("a")
        # print trs
        for tr in trs:
            ip = tr.string
            # print ip
            ips.append(ip)
        return ips


#读取并保存到excel
def read_info(filename, ips):
    global ip_port,ip_alarm
    result = filename + "\\result.xls"
    work = xlwt.Workbook()
    #表一
    sheet = work.add_sheet("ports", cell_overwrite_ok=True)
    row = ['IP', u'端口',u'协议',u'服务',u'状态','Banner']
    #表二
    sheet1 = work.add_sheet("alarm", cell_overwrite_ok=True)
    row1 = ['IP', u'端口',u'漏洞名称',u'级别']

    for i in range(0, len(row)):
        sheet.write(0, i, row[i])
    for ip in ips:
        (ip_port_temp , ip_alarm_temp) =  write_port_banner_result(filename, ip)
        ip_port =  ip_port +  ip_port_temp
        ip_alarm = ip_alarm + ip_alarm_temp


    print "------------------start print ip >>port and banner ---------------------------"


    i = 1
    k = len(ip_port)
    print k
    for key in range(0, k):
        sheet.write(i, 0, ip_port[key][0])
        sheet.write(i, 1, ip_port[key][1])
        sheet.write(i, 2, ip_port[key][2])
        sheet.write(i, 3, ip_port[key][3])
        sheet.write(i, 4, ip_port[key][4])
        sheet.write(i, 5, ip_port[key][5])
        i += 1


    for i in range(0, len(row1)):
        sheet1.write(0, i, row1[i])

    j = 1
    k1 = len(ip_alarm)
    print k1
    for key in range(0, k1):
        sheet1.write(j, 0, ip_alarm[key][0])
        sheet1.write(j, 1, ip_alarm[key][1])
        sheet1.write(j, 2, ip_alarm[key][2])
        sheet1.write(j, 3, ip_alarm[key][3])
        j += 1

    work.save(result)


def write_port_banner_result(filename, ip):
    global ip_port
    # print(ip)
    i = 0
    banner_name = ""
    temp = []
    port_s = []
    banner_s = []
    alarm_s = []
    ips = []

    with open(filename + "\\hosts\\4816-" + ip + ".html", 'rb') as data:
        soup = BeautifulSoup(data, "html.parser")
        ths1 = soup.find(text="状态")
        # print  ths

        if ths1 == u"状态":
            # print ip + ": start get net"
            ths1 = soup.find(text="状态").parent.parent.parent.find_all("td")

            for k in range(len(ths1)/4):
                temp = [ip,ths1[0+k*4].string,ths1[1+k*4].string,ths1[2+k*4].string,ths1[3+k*4].string,'']
                port_s.append(temp)
            # print port_s
        else:
            temp = [ip,"no find service","","","",""]
            port_s.append(temp)
        # print ip + ": stop get net"

        temp = []
        ths2 = soup.find(text="Banner")
        if ths2 == u"Banner":
            # print ip + ": start get Banner"
            ths2 = soup.find(text = "Banner").parent.parent.parent.find_all("td")

            for k in range(len(ths2)/2):
                temp = [ip,ths2[0+k*2].string,ths2[1+k*2].string]
                banner_s.append(temp)
            # print banner_s


            for k in range(len(banner_s)):
                for j in range(len(port_s)):
                    if banner_s[k][1] == port_s[j][1]:
                        port_s[j][5] = banner_s[k][2]
        # print ip + ": stop get Banner"
        print "-------------print : "+ ip + "----port and banner ---------------------"
        print port_s

        print "-------------print : "+ ip + "----alarm ---------------------"
        ths3 = soup.find("th",text="漏洞").parent.parent.find_all("tr")
        if len(ths3)>3 :
            for i in range(3,len(ths3)):
                tr1 = ths3[i].find_all("td")
                port_num = tr1[0].string
                li1 = tr1[3].find_all("li")
                for j in range(len(li1)):
                    # print  li1[j].find("a").string
                    print  li1[j].find("a").get("class")[0]
                    temp = [ip,port_num,li1[j].find("a").string,li1[j].find("a").get("class")[0]]
                    alarm_s.append(temp)
                    # print temp

        print alarm_s

        return port_s,alarm_s

#filename = "C:\Users\LY\Desktop\\2"  #路径
filename="E:\\reports"
ips = get_host_list(filename)
# print ips
ips = ["117.169.64.140","117.169.64.142","211.138.211.66"]

# ips = "59.53.51.178"
#
read_info(filename, ips)#第一步任务
# write_port_banner_result(filename,ips)


 

这篇关于nsfocus远程安全评估系统报告提取信息脚本的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/598017

相关文章

基于Python Playwright进行前端性能测试的脚本实现

《基于PythonPlaywright进行前端性能测试的脚本实现》在当今Web应用开发中,性能优化是提升用户体验的关键因素之一,本文将介绍如何使用Playwright构建一个自动化性能测试工具,希望... 目录引言工具概述整体架构核心实现解析1. 浏览器初始化2. 性能数据收集3. 资源分析4. 关键性能指

在Linux系统上连接GitHub的方法步骤(适用2025年)

《在Linux系统上连接GitHub的方法步骤(适用2025年)》在2025年,使用Linux系统连接GitHub的推荐方式是通过SSH(SecureShell)协议进行身份验证,这种方式不仅安全,还... 目录步骤一:检查并安装 Git步骤二:生成 SSH 密钥步骤三:将 SSH 公钥添加到 github

shell脚本批量导出redis key-value方式

《shell脚本批量导出rediskey-value方式》为避免keys全量扫描导致Redis卡顿,可先通过dump.rdb备份文件在本地恢复,再使用scan命令渐进导出key-value,通过CN... 目录1 背景2 详细步骤2.1 本地docker启动Redis2.2 shell批量导出脚本3 附录总

Oracle数据库定时备份脚本方式(Linux)

《Oracle数据库定时备份脚本方式(Linux)》文章介绍Oracle数据库自动备份方案,包含主机备份传输与备机解压导入流程,强调需提前全量删除原库数据避免报错,并需配置无密传输、定时任务及验证脚本... 目录说明主机脚本备机上自动导库脚本整个自动备份oracle数据库的过程(建议全程用root用户)总结

SQL Server跟踪自动统计信息更新实战指南

《SQLServer跟踪自动统计信息更新实战指南》本文详解SQLServer自动统计信息更新的跟踪方法,推荐使用扩展事件实时捕获更新操作及详细信息,同时结合系统视图快速检查统计信息状态,重点强调修... 目录SQL Server 如何跟踪自动统计信息更新:深入解析与实战指南 核心跟踪方法1️⃣ 利用系统目录

Linux系统中查询JDK安装目录的几种常用方法

《Linux系统中查询JDK安装目录的几种常用方法》:本文主要介绍Linux系统中查询JDK安装目录的几种常用方法,方法分别是通过update-alternatives、Java命令、环境变量及目... 目录方法 1:通过update-alternatives查询(推荐)方法 2:检查所有已安装的 JDK方

Linux系统之lvcreate命令使用解读

《Linux系统之lvcreate命令使用解读》lvcreate是LVM中创建逻辑卷的核心命令,支持线性、条带化、RAID、镜像、快照、瘦池和缓存池等多种类型,实现灵活存储资源管理,需注意空间分配、R... 目录lvcreate命令详解一、命令概述二、语法格式三、核心功能四、选项详解五、使用示例1. 创建逻

Python实现批量提取BLF文件时间戳

《Python实现批量提取BLF文件时间戳》BLF(BinaryLoggingFormat)作为Vector公司推出的CAN总线数据记录格式,被广泛用于存储车辆通信数据,本文将使用Python轻松提取... 目录一、为什么需要批量处理 BLF 文件二、核心代码解析:从文件遍历到数据导出1. 环境准备与依赖库

linux下shell脚本启动jar包实现过程

《linux下shell脚本启动jar包实现过程》确保APP_NAME和LOG_FILE位于目录内,首次启动前需手动创建log文件夹,否则报错,此为个人经验,供参考,欢迎支持脚本之家... 目录linux下shell脚本启动jar包样例1样例2总结linux下shell脚本启动jar包样例1#!/bin

使用Python构建一个高效的日志处理系统

《使用Python构建一个高效的日志处理系统》这篇文章主要为大家详细讲解了如何使用Python开发一个专业的日志分析工具,能够自动化处理、分析和可视化各类日志文件,大幅提升运维效率,需要的可以了解下... 目录环境准备工具功能概述完整代码实现代码深度解析1. 类设计与初始化2. 日志解析核心逻辑3. 文件处