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

相关文章

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

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

Java实现远程执行Shell指令

《Java实现远程执行Shell指令》文章介绍使用JSch在SpringBoot项目中实现远程Shell操作,涵盖环境配置、依赖引入及工具类编写,详解分号和双与号执行多指令的区别... 目录软硬件环境说明编写执行Shell指令的工具类总结jsch(Java Secure Channel)是SSH2的一个纯J

MySQL8 密码强度评估与配置详解

《MySQL8密码强度评估与配置详解》MySQL8默认启用密码强度插件,实施MEDIUM策略(长度8、含数字/字母/特殊字符),支持动态调整与配置文件设置,推荐使用STRONG策略并定期更新密码以提... 目录一、mysql 8 密码强度评估机制1.核心插件:validate_password2.密码策略级

JWT + 拦截器实现无状态登录系统

《JWT+拦截器实现无状态登录系统》JWT(JSONWebToken)提供了一种无状态的解决方案:用户登录后,服务器返回一个Token,后续请求携带该Token即可完成身份验证,无需服务器存储会话... 目录✅ 引言 一、JWT 是什么? 二、技术选型 三、项目结构 四、核心代码实现4.1 添加依赖(pom

Python从Word文档中提取图片并生成PPT的操作代码

《Python从Word文档中提取图片并生成PPT的操作代码》在日常办公场景中,我们经常需要从Word文档中提取图片,并将这些图片整理到PowerPoint幻灯片中,手动完成这一任务既耗时又容易出错,... 目录引言背景与需求解决方案概述代码解析代码核心逻辑说明总结引言在日常办公场景中,我们经常需要从 W

基于Python实现自动化邮件发送系统的完整指南

《基于Python实现自动化邮件发送系统的完整指南》在现代软件开发和自动化流程中,邮件通知是一个常见且实用的功能,无论是用于发送报告、告警信息还是用户提醒,通过Python实现自动化的邮件发送功能都能... 目录一、前言:二、项目概述三、配置文件 `.env` 解析四、代码结构解析1. 导入模块2. 加载环

linux系统上安装JDK8全过程

《linux系统上安装JDK8全过程》文章介绍安装JDK的必要性及Linux下JDK8的安装步骤,包括卸载旧版本、下载解压、配置环境变量等,强调开发需JDK,运行可选JRE,现JDK已集成JRE... 目录为什么要安装jdk?1.查看linux系统是否有自带的jdk:2.下载jdk压缩包2.解压3.配置环境

Java+AI驱动实现PDF文件数据提取与解析

《Java+AI驱动实现PDF文件数据提取与解析》本文将和大家分享一套基于AI的体检报告智能评估方案,详细介绍从PDF上传、内容提取到AI分析、数据存储的全流程自动化实现方法,感兴趣的可以了解下... 目录一、核心流程:从上传到评估的完整链路二、第一步:解析 PDF,提取体检报告内容1. 引入依赖2. 封装

Mac电脑如何通过 IntelliJ IDEA 远程连接 MySQL

《Mac电脑如何通过IntelliJIDEA远程连接MySQL》本文详解Mac通过IntelliJIDEA远程连接MySQL的步骤,本文通过图文并茂的形式给大家介绍的非常详细,感兴趣的朋友跟... 目录MAC电脑通过 IntelliJ IDEA 远程连接 mysql 的详细教程一、前缀条件确认二、打开 ID

Java使用正则提取字符串中的内容的详细步骤

《Java使用正则提取字符串中的内容的详细步骤》:本文主要介绍Java中使用正则表达式提取字符串内容的方法,通过Pattern和Matcher类实现,涵盖编译正则、查找匹配、分组捕获、数字与邮箱提... 目录1. 基础流程2. 关键方法说明3. 常见场景示例场景1:提取所有数字场景2:提取邮箱地址4. 高级