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

相关文章

Java轻松实现在Excel中插入、提取或删除文本框

《Java轻松实现在Excel中插入、提取或删除文本框》在日常的Java开发中,我们经常需要与Excel文件打交道,当涉及到Excel中的文本框时,许多开发者可能会感到棘手,下面我们就来看看如何使用J... 目录Java操作Excel文本框的实战指南1. 插入Excel文本框2. 提取Excel文本框内容3

C++简单日志系统实现代码示例

《C++简单日志系统实现代码示例》日志系统是成熟软件中的一个重要组成部分,其记录软件的使用和运行行为,方便事后进行故障分析、数据统计等,:本文主要介绍C++简单日志系统实现的相关资料,文中通过代码... 目录前言Util.hppLevel.hppLogMsg.hppFormat.hppSink.hppBuf

Redis的安全机制详细介绍及配置方法

《Redis的安全机制详细介绍及配置方法》本文介绍Redis安全机制的配置方法,包括绑定IP地址、设置密码、保护模式、禁用危险命令、防火墙限制、TLS加密、客户端连接限制、最大内存使用和日志审计等,通... 目录1. 绑定 IP 地址2. 设置密码3. 保护模式4. 禁用危险命令5. 通过防火墙限制访问6.

linux系统中java的cacerts的优先级详解

《linux系统中java的cacerts的优先级详解》文章讲解了Java信任库(cacerts)的优先级与管理方式,指出JDK自带的cacerts默认优先级更高,系统级cacerts需手动同步或显式... 目录Java 默认使用哪个?如何检查当前使用的信任库?简要了解Java的信任库总结了解 Java 信

java程序远程debug原理与配置全过程

《java程序远程debug原理与配置全过程》文章介绍了Java远程调试的JPDA体系,包含JVMTI监控JVM、JDWP传输调试命令、JDI提供调试接口,通过-Xdebug、-Xrunjdwp参数配... 目录背景组成模块间联系IBM对三个模块的详细介绍编程使用总结背景日常工作中,每个程序员都会遇到bu

Java服务实现开启Debug远程调试

《Java服务实现开启Debug远程调试》文章介绍如何通过JVM参数开启Java服务远程调试,便于在线上排查问题,在IDEA中配置客户端连接,实现无需频繁部署的调试,提升效率... 目录一、背景二、相关图示说明三、具体操作步骤1、服务端配置2、客户端配置总结一、背景日常项目中,通常我们的代码都是部署到远程

Java JUC并发集合详解之线程安全容器完全攻略

《JavaJUC并发集合详解之线程安全容器完全攻略》Java通过java.util.concurrent(JUC)包提供了一整套线程安全的并发容器,它们不仅是简单的同步包装,更是基于精妙并发算法构建... 目录一、为什么需要JUC并发集合?二、核心并发集合分类与详解三、选型指南:如何选择合适的并发容器?在多

Oracle数据库在windows系统上重启步骤

《Oracle数据库在windows系统上重启步骤》有时候在服务中重启了oracle之后,数据库并不能正常访问,下面:本文主要介绍Oracle数据库在windows系统上重启的相关资料,文中通过代... oracle数据库在Windows上重启的方法我这里是使用oracle自带的sqlplus工具实现的方

linux查找java项目日志查找报错信息方式

《linux查找java项目日志查找报错信息方式》日志查找定位步骤:进入项目,用tail-f实时跟踪日志,tail-n1000查看末尾1000行,grep搜索关键词或时间,vim内精准查找并高亮定位,... 目录日志查找定位在当前文件里找到报错消息总结日志查找定位1.cd 进入项目2.正常日志 和错误日

Linux下MySQL数据库定时备份脚本与Crontab配置教学

《Linux下MySQL数据库定时备份脚本与Crontab配置教学》在生产环境中,数据库是核心资产之一,定期备份数据库可以有效防止意外数据丢失,本文将分享一份MySQL定时备份脚本,并讲解如何通过cr... 目录备份脚本详解脚本功能说明授权与可执行权限使用 Crontab 定时执行编辑 Crontab添加定