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

相关文章

微信公众号脚本-获取热搜自动新建草稿并发布文章

《微信公众号脚本-获取热搜自动新建草稿并发布文章》本来想写一个自动化发布微信公众号的小绿书的脚本,但是微信公众号官网没有小绿书的接口,那就写一个获取热搜微信普通文章的脚本吧,:本文主要介绍微信公众... 目录介绍思路前期准备环境要求获取接口token获取热搜获取热搜数据下载热搜图片给图片加上标题文字上传图片

Python FastAPI+Celery+RabbitMQ实现分布式图片水印处理系统

《PythonFastAPI+Celery+RabbitMQ实现分布式图片水印处理系统》这篇文章主要为大家详细介绍了PythonFastAPI如何结合Celery以及RabbitMQ实现简单的分布式... 实现思路FastAPI 服务器Celery 任务队列RabbitMQ 作为消息代理定时任务处理完整

详解C#如何提取PDF文档中的图片

《详解C#如何提取PDF文档中的图片》提取图片可以将这些图像资源进行单独保存,方便后续在不同的项目中使用,下面我们就来看看如何使用C#通过代码从PDF文档中提取图片吧... 当 PDF 文件中包含有价值的图片,如艺术画作、设计素材、报告图表等,提取图片可以将这些图像资源进行单独保存,方便后续在不同的项目中使

Linux系统中卸载与安装JDK的详细教程

《Linux系统中卸载与安装JDK的详细教程》本文详细介绍了如何在Linux系统中通过Xshell和Xftp工具连接与传输文件,然后进行JDK的安装与卸载,安装步骤包括连接Linux、传输JDK安装包... 目录1、卸载1.1 linux删除自带的JDK1.2 Linux上卸载自己安装的JDK2、安装2.1

Linux系统之主机网络配置方式

《Linux系统之主机网络配置方式》:本文主要介绍Linux系统之主机网络配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、查看主机的网络参数1、查看主机名2、查看IP地址3、查看网关4、查看DNS二、配置网卡1、修改网卡配置文件2、nmcli工具【通用

Linux系统之dns域名解析全过程

《Linux系统之dns域名解析全过程》:本文主要介绍Linux系统之dns域名解析全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、dns域名解析介绍1、DNS核心概念1.1 区域 zone1.2 记录 record二、DNS服务的配置1、正向解析的配置

Python实现常用文本内容提取

《Python实现常用文本内容提取》在日常工作和学习中,我们经常需要从PDF、Word文档中提取文本,本文将介绍如何使用Python编写一个文本内容提取工具,有需要的小伙伴可以参考下... 目录一、引言二、文本内容提取的原理三、文本内容提取的设计四、文本内容提取的实现五、完整代码示例一、引言在日常工作和学

C++字符串提取和分割的多种方法

《C++字符串提取和分割的多种方法》在C++编程中,字符串处理是一个常见的任务,尤其是在需要从字符串中提取特定数据时,本文将详细探讨如何使用C++标准库中的工具来提取和分割字符串,并分析不同方法的适用... 目录1. 字符串提取的基本方法1.1 使用 std::istringstream 和 >> 操作符示

一文详解SQL Server如何跟踪自动统计信息更新

《一文详解SQLServer如何跟踪自动统计信息更新》SQLServer数据库中,我们都清楚统计信息对于优化器来说非常重要,所以本文就来和大家简单聊一聊SQLServer如何跟踪自动统计信息更新吧... SQL Server数据库中,我们都清楚统计信息对于优化器来说非常重要。一般情况下,我们会开启"自动更新

Linux系统中配置静态IP地址的详细步骤

《Linux系统中配置静态IP地址的详细步骤》本文详细介绍了在Linux系统中配置静态IP地址的五个步骤,包括打开终端、编辑网络配置文件、配置IP地址、保存并重启网络服务,这对于系统管理员和新手都极具... 目录步骤一:打开终端步骤二:编辑网络配置文件步骤三:配置静态IP地址步骤四:保存并关闭文件步骤五:重