启明星辰规则库下载
一、脚本介绍
1、背景介绍
因为项目上有启明星辰的安全设备、并且在内网无法直接连接互联网进行在线升级,必须使用离线升级模式,下载规则库升级,每月一更有点繁琐,所以写了这个b脚本,偷懒一下,不喜勿喷
2、下载列表
- 天清汉马USG防火墙(T系列):APP特征库、入侵防御特征库、URL分类库升级包、防病毒特征库、Web应用防护特征库
- 超融合检测探针(CS PLUS)CS7070 SP5及以上版本:事件库
- 天清Web应用安全网关 WAF:事件库
- 天清入侵防御系统:入侵防御特征库、安天病毒特征库
二、脚本代码
1、代码展示
# -*- coding: UTF-8 -*-
"""
# @当前项目: python
# @当前脚本: 启明星辰规则库下载
# @创建者: Sword
# @时间: 2025/02/19 13:21
# @脚本说明:
"""
import requests
import os
from datetime import datetime
import warnings
from urllib3.exceptions import InsecureRequestWarning
# 禁用 InsecureRequestWarning 警告
warnings.simplefilter('ignore', InsecureRequestWarning)
# 定义代理(如果需要的话)
proxies = {"https": "http://127.0.0.1:8080", "http": "http://127.0.0.1:8080"}
def get_version(url):
"""获取最新版本的下载链接"""
try:
response = requests.get(url, verify=False)
response.raise_for_status() # 如果响应状态码是 4xx 或 5xx 会抛出异常
version_json = response.json()
version_url = version_json['data'][0]['downloadLink']
return version_url
except requests.RequestException as e:
print(f"请求失败: {e}")
return None
def get_document(url, file_path):
"""下载文件并保存到指定路径"""
if url is None:
print(f"无法下载,URL 为空: {file_path}")
return
try:
response = requests.get(url, verify=False)
response.raise_for_status() # 同样进行状态码检查
# 保存文件
with open(file_path, "wb") as file:
for chunk in response.iter_content(chunk_size=8192):
file.write(chunk)
print(f"文件已成功下载并保存为 '{file_path}'.")
except requests.RequestException as e:
print(f"下载失败: {e}")
def get_time():
"""获取当前系统时间"""
return datetime.now().strftime('%Y%m%d')
def create_folder(folder_path):
"""创建文件夹(如果不存在的话)"""
if not os.path.exists(folder_path):
os.makedirs(folder_path)
def download_product_data(company_name, product_name, sub_product_name, url, base_folder):
"""下载产品数据并保存为指定格式"""
time = get_time()
# 创建文件夹
folder_path = os.path.join(base_folder, time, company_name, product_name)
create_folder(folder_path)
# 构建文件路径
file_name = f"{sub_product_name}.zip"
file_path = os.path.join(folder_path, file_name)
# 获取下载链接并保存文件
document_url = get_version(url)
get_document(document_url, file_path)
if __name__ == '__main__':
# 要下载到的目录
dz = r"D:\desktop\特征库升级\\"
# 产品及其对应的 URL 和公司名称
products = [
("启明星辰", "天清汉马USG防火墙(T系列)", "APP特征库",
r"https://venustech.download.venuscloud.cn:443/upgradecenter/main/getPackages?fourthProductId=18&page=1&pageSize=10"),
("启明星辰", "天清汉马USG防火墙(T系列)", "入侵防御特征库",
r"https://venustech.download.venuscloud.cn:443/upgradecenter/main/getPackages?fourthProductId=17&page=1&pageSize=10"),
("启明星辰", "天清汉马USG防火墙(T系列)", "URL分类库升级包",
r"https://venustech.download.venuscloud.cn:443/upgradecenter/main/getPackages?fourthProductId=19&page=1&pageSize=10"),
("启明星辰", "天清汉马USG防火墙(T系列)", "防病毒特征库",
r"https://venustech.download.venuscloud.cn:443/upgradecenter/main/getPackages?fourthProductId=20&page=1&pageSize=10"),
("启明星辰", "天清汉马USG防火墙(T系列)", "Web应用防护特征库",
r"https://venustech.download.venuscloud.cn:443/upgradecenter/main/getPackages?fourthProductId=79&page=1&pageSize=10"),
("启明星辰", "超融合检测探针(CS PLUS)CS7070 SP5及以上版本", "事件库",
r"https://venustech.download.venuscloud.cn:443/upgradecenter/main/getPackages?fourthProductId=138&page=1&pageSize=10"),
("启明星辰", "天清Web应用安全网关 WAF", "事件库",
r"https://venustech.download.venuscloud.cn:443/upgradecenter/main/getPackages?fourthProductId=29&page=1&pageSize=10"),
("启明星辰", "天清入侵防御系统", "入侵防御特征库",
r"https://venustech.download.venuscloud.cn:443/upgradecenter/main/getPackages?fourthProductId=169&page=1&pageSize=10"),
("启明星辰", "天清入侵防御系统", "安天病毒特征库",
r"https://venustech.download.venuscloud.cn:443/upgradecenter/main/getPackages?fourthProductId=170&page=1&pageSize=10")
# 添加其他产品
]
# 遍历进行下载
for company_name, product_name, sub_product_name, url in products:
download_product_data(company_name, product_name, sub_product_name, url, dz)
2、脚本说明
如果需要其他的规则库升级的话可以按照代码中的products list进行添加也是可以的