python3 阿里云api进行巡检发送邮件

news2024/11/27 23:54:14

python3 脚本爬取阿里云进行巡检

  • 不确定pip能不能安装上,使用时候可以百度一下,脚本是可以使用的,没有问题的

太长时间了,pip安装依赖忘记那些了,使用科大星火询问了下,给了下面的,看看能不能使用吧
根据您提供的代码,您需要安装以下Python库:

  1. HTMLTable(来自HTMLTable库)
  2. email.mime.multipart(来自email库)
  3. paramiko
  4. clickhouse-driver(来自clickhouse_driver库)
  5. smtplib
  6. string
  7. json
  8. requests
  9. time
  10. datetime
  11. prettytable(来自prettytable库)
  12. ntpath(来自ntpath库)
  13. email.header(来自email库)
  14. aliyunsdkcore(来自aliyunsdkcore库)
  15. email.mime.text(来自email库)
  16. aliyunsdkcore.request(来自aliyunsdkcore库)
  17. aliyunsdkecs.request.v20140526(来自aliyunsdkecs库)
  18. aliyunsdkcore.acs_exception.exceptions(来自aliyunsdkcore库)
  19. aliyunsdkcms.request.v20190101(来自aliyunsdkcms库)
  20. aliyunsdkr_kvstore.request.v20150101(来自aliyunsdkr_kvstore库)
  21. aliyunsdkdts.request.v20200101(来自aliyunsdkdts库)
  22. aliyunsdkr_kvstore.request.v20150101(来自aliyunsdkr_kvstore库)

不确定pip能不能安装上,使用时候可以百度一下,脚本是可以使用的,没有问题的

pip install HTMLTable
pip install email
pip install paramiko
pip install clickhouse-driver
pip install smtplib
pip install string
pip install json
pip install requests
pip install time
pip install datetime
pip install prettytable
pip install ntpath
pip install email.header
pip install aliyunsdkcore
pip install email.mime.text
pip install aliyunsdkcore.request
pip install aliyunsdkecs.request.v20140526
pip install aliyunsdkcore.acs_exception.exceptions
pip install aliyunsdkcms.request.v20190101
pip install aliyunsdkr_kvstore.request.v20150101
pip install aliyunsdkdts.request.v20200101
pip install aliyunsdkr_kvstore.request.v20150101
#!/usr/bin/
env python
# -*- coding: utf-8 -*-
from HTMLTable import (HTMLTable,)
from email.mime.multipart import MIMEMultipart

import paramiko
from clickhouse_driver import Client, connect
import smtplib
import string
import json
import requests
import time
import datetime
import prettytable as pt
from ntpath import join
from email.header import Header
from aliyunsdkcore import client
from email.mime.text import MIMEText
from aliyunsdkcore.request import CommonRequest
from aliyunsdkecs.request.v20140526 import DescribeInstancesRequest
from aliyunsdkcore.acs_exception.exceptions import ClientException
from aliyunsdkcore.acs_exception.exceptions import ServerException
from aliyunsdkcms.request.v20190101.DescribeMetricTopRequest import DescribeMetricTopRequest
from aliyunsdkr_kvstore.request.v20150101.DescribeInstancesRequest import \
    DescribeInstancesRequest as DescribeInstancesRequest2
from aliyunsdkdts.request.v20200101.DescribeDtsJobsRequest import DescribeDtsJobsRequest
from aliyunsdkr_kvstore.request.v20150101.DescribeInstanceAttributeRequest import DescribeInstanceAttributeRequest

# 阿里云认证
clt = client.AcsClient('TT','BB', 'cn-chengdu')


# 脚本所需参数
# 设置页数
page_number = '1'
# 设置每页返回多少,默认为10条
strip_number = '100'
# ECS到期时间范围单位是‘天’
expire_days = '7'
# 云服务的数据命名空间(磁盘使用率那进行调用)
ecs_namespace = 'acs_ecs_dashboard'
# 云服务(ECS)的监控项名称
Disk_metricname = 'vm.DiskUtilization'  # 磁盘
Mem_metricname = 'vm.MemoryUtilization'  # 内存
CPU_metricname = 'cpu_total'  # CPU
# 磁盘使用率阀值(%)
Disk_use_rate = '70'
# 内存使用率阀值(%)
Mem_user_rate = '70'
# CPU使用率阀值(%)
Cpu_user_rate = '70'
str_time = "%s-%s-%s" % (datetime.datetime.now().year,
                         datetime.datetime.now().month, datetime.datetime.now().day)
time_mail = time.strftime('%Y%m%d%H%M%S ', time.localtime(time.time()))
# 发送邮件相关信息
sender = 'aaaaaaa@163.com'

# 收件人邮箱
receiver = 'bbbbb@163.com','ccccc@163.com'
# receiver = 'wangzq@icbf.com.cn','yangyang@icbf.com.cn'

subject = '%s运维巡检表' % (str_time)
# 邮箱账户命密码
username = 'aaaaaaa@163.com'
password = 'aaaaaaaa'

'''
阿里云采样范围太大就会提示(是因为每个月阿里云api是有固定免费额度的)
{"status":"error","errorType":"execution",
"error":"query processing would load too many samples into memory in query execution"}
'''

# 生成表格
def form(column_name, field_information, title):
    table = HTMLTable(caption='')
    table.append_header_rows(((column_name),))
    for field in field_information:
        table.append_data_rows(((field),))
    # 表格样式,即<table>标签样式
    table.set_style({
        'border-collapse': 'collapse',
        'word-break': 'keep-all',
        'white-space': 'nowrap',
        'font-size': '14px',
        'margin-left': '30px',
        'text-align': 'center',
    })
    # 统一设置所有单元格样式,<td>或<th>
    table.set_cell_style({
        'border-color': '#000',
        'border-width': '1px',
        'border-style': 'solid',
        'padding': '5px',
    })
    # 表头样式
    table.set_header_row_style({
        'color': '#fff',
        'background-color': '#48a6fb',
        'font-size': '18px',
    })

    # 覆盖表头单元格字体样式
    table.set_header_cell_style({
        'padding': '15px',
    })
    html = table.to_html()
    html = '<h3 style="color:red;margin-left: 30px" > %s </h3>' % (
        title) + html
    return html

# 把巡检信息进行html格式化
def html_formatting( Aliyun_html):
    html_text = """
<!DOCTYPE html>
<html lang="en">
<head>
    <title></title>
    <meta charset="utf-8">
</head>
<body>
    <div class="page" style="margin-left: 20px">
        <h1> {time_mail} 巡检结果如下 </h1>
        <h2 style="color:blue;margin-left: 15px"> 阿里云 </h2>
        {Aliyun_html}
        </div>
    </div>
</body>
</html>
""".format(
        time_mail=str_time,
        Aliyun_html=Aliyun_html,
    )
    msge = html_text
    return msge



# 列表---ECS列表
def get_sys_info():
    request = DescribeInstancesRequest.DescribeInstancesRequest()
    # request.set_PageNumber('page_number')   #设置页数
    request.set_PageSize(strip_number)  # 设置每页返回多少,默认为10条
    request.set_accept_format('json')
    response = json.loads(clt.do_action(request)).get(
        'Instances').get('Instance')
    return response

# ECS 5天内到期时间
def ecs_five_endtime():
    field_information = []
    count = 0
    for i in get_sys_info():
        # 阿里云UTC时间转换成北京时间
        ecs_endtime_0 = i['ExpiredTime']
        ecs_endtime_1 = "%Y-%m-%dT%H:%MZ"
        ecs_endtime_2 = datetime.datetime.strptime(
            ecs_endtime_0, ecs_endtime_1)
        ecs_endtime_3 = ecs_endtime_2 + \
            datetime.timedelta(hours=8) - datetime.timedelta(seconds=1)
        ecs_endtime_4 = ecs_endtime_3.strftime('%Y-%m-%d')
        # 计算到期时间与现在时间之差
        current_time = time.strftime("%Y-%m-%d", time.localtime())
        current = time.mktime(time.strptime(current_time, '%Y-%m-%d'))
        ecs_endtime_5 = time.mktime(time.strptime(ecs_endtime_4, '%Y-%m-%d'))
        count_days = int((ecs_endtime_5 - current) / (24 * 60 * 60))

        # 距离到期时间小于天数
        if count_days <= int(expire_days):
            count = count + 1
            ecs_remarks = i['InstanceId'], i['InstanceName']
            ecs_IP_0 = i['VpcAttributes']
            ecs_IP_1 = ecs_IP_0["PrivateIpAddress"]["IpAddress"][0]
            field = count, list(ecs_remarks)[0], ecs_IP_1, ecs_endtime_3.strftime(
                '%Y年%m月%d日 %H:%M'), list(ecs_remarks)[1]
        #    print(field)
            field_information.append(field)

    title = 'ECS到期时间(%s天内)' % (expire_days)
    column_name = ["序号", "实例ID", "IP地址", "到期时间", "备注"]
    html_table = form(column_name=column_name, title=title,
                      field_information=field_information)
    return html_table

# ECS磁盘使用率
def disk_info():
    request = DescribeMetricTopRequest()
    request.set_accept_format('json')
    request.set_Namespace(ecs_namespace)
    request.set_MetricName(Disk_metricname)
    request.set_Orderby("Average")
    request.set_Length(strip_number)
    response_0 = clt.do_action_with_exception(request)
    response_1 = str(response_0, encoding='utf-8')
    return response_1

# 列出超出磁盘阈值的ECS信息
def get_disk_Value():
    field_information = []
    count = 0
    Slicing_0 = eval(str(disk_info()))
    Slicing_1 = Slicing_0["Datapoints"]
    Slicing_2 = eval(Slicing_1)
    for Slicing_3 in Slicing_2:
        if Slicing_3.get("Average") >= float(Disk_use_rate):
            for ecs_id_0 in get_sys_info():
                if Slicing_3.get("instanceId") == ecs_id_0['InstanceId']:
                    count += 1
                    ecs_remarks = ecs_id_0['InstanceId'], ecs_id_0['InstanceName']
                    ecs_IP_0 = ecs_id_0['VpcAttributes']
                    ecs_IP_1 = ecs_IP_0["PrivateIpAddress"]["IpAddress"][0]
                    field = count, Slicing_3.get("instanceId"), ecs_IP_1, Slicing_3.get(
                        "mountpoint"), Slicing_3.get("Maximum"), list(ecs_remarks)[1]
                    field_information.append(field)

    title = 'ECS磁盘使用率大于%s' % (Disk_use_rate)
    column_name = ["序号", "实例ID", "IP地址", "目录", "使用率(%)", "备注"]
    html_table = form(column_name=column_name, title=title,
                      field_information=field_information)
    return html_table

# ECS-CPU使用率
def CPU_info():
    request = DescribeMetricTopRequest()
    request.set_accept_format('json')
    request.set_Namespace(ecs_namespace)
    request.set_MetricName(CPU_metricname)
    request.set_Orderby("Average")
    request.set_Length(strip_number)
    response_0 = clt.do_action_with_exception(request)
    response_1 = str(response_0, encoding='utf-8')
    return response_1

# 列出超出CPU阈值的ECS信息
def get_CPU_Value():
    count = 0
    field_information = []
    Slicing_0 = eval(str(CPU_info()))
    Slicing_1 = Slicing_0["Datapoints"]
    Slicing_2 = eval(Slicing_1)
    for Slicing_3 in Slicing_2:
        if Slicing_3.get("Average") >= float(Cpu_user_rate):
            for ecs_id_0 in get_sys_info():
                if Slicing_3.get("instanceId") == ecs_id_0['InstanceId']:
                    ecs_remarks = ecs_id_0['InstanceId'], ecs_id_0['InstanceName']
                    ecs_IP_0 = ecs_id_0['VpcAttributes']
                    ecs_IP_1 = ecs_IP_0["PrivateIpAddress"]["IpAddress"][0]
                    count += 1
            field = count, Slicing_3.get("instanceId"), ecs_IP_1, Slicing_3.get(
                "Maximum"), list(ecs_remarks)[1]
            field_information.append(field)

    title = 'ECS-CPU使用率大于%s' % (Cpu_user_rate)
    column_name = ["序号", "实例ID", "IP地址", "使用率(%)", "备注"]
    html_table = form(column_name=column_name, title=title,
                      field_information=field_information)
    return html_table

# ECS内存使用率
def Member_info():
    request = DescribeMetricTopRequest()
    request.set_accept_format('json')
    request.set_Namespace(ecs_namespace)
    request.set_MetricName(Mem_metricname)
    request.set_Orderby("Average")
    request.set_Length(strip_number)
    response_0 = clt.do_action_with_exception(request)
    response_1 = str(response_0, encoding='utf-8')
    return response_1

# 列出超出内存阈值的ECS信息
def get_Member_Value():
    count = 0
    field_information = []
    Slicing_0 = eval(str(Member_info()))
    Slicing_1 = Slicing_0["Datapoints"]
    Slicing_2 = eval(Slicing_1)
    for Slicing_3 in Slicing_2:
        if Slicing_3.get("Average") >= float(Mem_user_rate):
            for ecs_id_0 in get_sys_info():
                if Slicing_3.get("instanceId") == ecs_id_0['InstanceId']:
                    ecs_remarks = ecs_id_0['InstanceId'], ecs_id_0['InstanceName']
                    ecs_IP_0 = ecs_id_0['VpcAttributes']
                    ecs_IP_1 = ecs_IP_0["PrivateIpAddress"]["IpAddress"][0]
                    count += 1
            field = count, Slicing_3.get("instanceId"), ecs_IP_1, Slicing_3.get(
                "Maximum"), list(ecs_remarks)[1]
            field_information.append(field)

    title = 'ECS内存使用率大于%s' % (Mem_user_rate)
    column_name = ["序号", "实例ID", "IP地址", "使用率(%)", "备注"]
    html_table = form(column_name=column_name, title=title,
                      field_information=field_information)
    return html_table

# 列表---RDS实例列表
def get_rds_info():
    request = CommonRequest()
    request.set_accept_format('json')
    request.set_domain('rds.aliyuncs.com')
    request.set_method('POST')
    request.set_protocol_type('https')  # https | http
    request.set_version('2014-08-15')
    request.set_action_name('DescribeDBInstances')
    request.add_query_param('RegionId', "cn-beijing")
    request.add_query_param('PageSize', strip_number)  # 条数
    # request.add_query_param('PageNumber', page_number) ###页码
    response = clt.do_action(request)
    false = 0
    rds_list_0 = eval(str(response, encoding='utf-8'))
    rds_list_1 = rds_list_0["Items"]["DBInstance"]
    return rds_list_1

# 列出RDS到期时间
def rds_endtime():
    field_information = []
    count = 0
    for i in get_rds_info():
        # 阿里云UTC时间转换成北京时间
        rds_endtime_0 = i['ExpireTime']
        rds_endtime_1 = "%Y-%m-%dT%H:%M:%SZ"
        rds_endtime_2 = datetime.datetime.strptime(
            rds_endtime_0, rds_endtime_1)
        rds_endtime_3 = rds_endtime_2 + \
            datetime.timedelta(hours=8) - datetime.timedelta(seconds=1)
        rds_endtime_4 = rds_endtime_3.strftime('%Y-%m-%d')
        # 计算到期时间与现在时间之差
        current_time = time.strftime("%Y-%m-%d", time.localtime())
        current = time.mktime(time.strptime(current_time, '%Y-%m-%d'))
        rds_endtime_5 = time.mktime(time.strptime(rds_endtime_4, '%Y-%m-%d'))
        count_days = int((rds_endtime_5 - current) / (24 * 60 * 60))

        # 距离到期时间小于天数
        if count_days <= int(expire_days):
            count = count + 1
            field = count, i["DBInstanceId"], rds_endtime_3.strftime(
                '%Y年%m月%d日 %H:%M'), i["DBInstanceDescription"]
            field_information.append(field)

    title = 'RDS到期时间(%s天内)' % (expire_days)
    column_name = ["序号", "实例ID", "到期时间", "备注"]
    html_table = form(column_name=column_name, title=title,
                      field_information=field_information)
    return html_table

# 列出RDS磁盘使用率
def rds_disk_info():
    request = DescribeMetricTopRequest()
    request.set_accept_format('json')
    request.set_MetricName("DiskUsage")
    request.set_Namespace("acs_rds_dashboard")
    request.set_Orderby("Average")
    request.set_Length(strip_number)
    response_0 = clt.do_action_with_exception(request)
    response_1 = str(response_0, encoding='utf-8')
    return response_1

# 列出RDS超出阀值的资源
def rds_disk_threshold():
    count = 0
    field_information = []

    rds_threshold_0 = eval(rds_disk_info())
    rds_threshold_1 = eval(rds_threshold_0["Datapoints"])
    for rds_threshold_3 in rds_threshold_1:
        if rds_threshold_3["Average"] >= float(Disk_use_rate):
            for rds_id_0 in get_rds_info():
                if rds_id_0["DBInstanceId"] == 'rm-2ze3bzdt0ej4za0t6':
                    break
                if rds_threshold_3["instanceId"] == rds_id_0["DBInstanceId"]:
                    count += 1
                    field = count, rds_threshold_3["instanceId"], rds_id_0[
                        "DBInstanceDescription"], rds_threshold_3["Average"]
                    field_information.append(field)

    title = 'RDS-磁盘使用率大于70%'
    column_name = ["序号", "实例ID", "备注", "使用率(%)"]
    html_table = form(column_name=column_name, title=title,
                      field_information=field_information)
    return html_table

# 列出redis实例列表
def get_redis_info():
    request = DescribeInstancesRequest2()
    request.set_accept_format('json')
    request.set_PageNumber(page_number)  # 页码
    request.set_PageSize(strip_number)  # 条数
    response_0 = clt.do_action_with_exception(request)
    false = true = 0
    response_1 = eval(str(response_0, encoding='utf-8'))
    response_2 = response_1["Instances"]["KVStoreInstance"]
    return response_2

# Redis到期时间
def redis_endtime():
    field_information = []
    count = 0
  
    for i in get_redis_info():
        # 阿里云UTC时间转换成北京时间
        # if i.get('UserName') == 'r-2vcik2bo8gzn07yri9':
        redis_endtime_0 = i['EndTime']
        redis_endtime_1 = "%Y-%m-%dT%H:%M:%SZ"
        redis_endtime_2 = datetime.datetime.strptime(
            redis_endtime_0, redis_endtime_1)
        redis_endtime_3 = redis_endtime_2 + datetime.timedelta(hours=8)
        redis_endtime_4 = redis_endtime_3.strftime('%Y-%m-%d')
        # 计算到期时间与现在时间之差
        current_time = time.strftime("%Y-%m-%d", time.localtime())
        current = time.mktime(time.strptime(current_time, '%Y-%m-%d'))
        redis_endtime_5 = time.mktime(
            time.strptime(redis_endtime_4, '%Y-%m-%d'))
        count_days = int((redis_endtime_5 - current) / (24 * 60 * 60))

        # 距离到期时间小于天数
        if count_days <= int(expire_days):
            count = count + 1
            field = [count, i["InstanceId"], redis_endtime_3.strftime(
                '%Y年%m月%d日 %H:%M'), i["InstanceName"]]
            field_information.append(field)

    title = 'Redis到期时间(%s天内)' %(expire_days)
    column_name = ["序号", "实例ID", "到期时间", "备注"]
    html_table = form(column_name=column_name, title=title,
                      field_information=field_information)
    return html_table

# 邮件
def send_mail(email_html):
    msg = MIMEMultipart()
    msg['Subject'] = Header(subject, 'utf-8')
    msg['From'] = Header('patrol-alarm@icbf.com.cn', 'utf-8')  # 发送者
    msg['To'] = Header('运维组', 'utf-8')
    msg.attach(MIMEText(email_html, 'html', 'utf-8'))
    smtp = smtplib.SMTP()
    smtp.connect('smtp.qiye.aliyun.com')
    smtp.login(username, password)
    for mailuser in receiver:
        smtp.sendmail(sender, mailuser, msg.as_string())
    print("邮件发送成功")
    smtp.quit()

# 执行
if __name__ == '__main__':
    # 到期时间 ETC_endtime() + redis_endtime() + rds_endtime() + ecs_five_endtime()
    # 磁盘阀值类: rds_disk_threshold() + get_disk_Value()
    # CPU&内存类:get_CPU_Value() + get_Member_Value()
    # print(redis_endtime())
    html = html_formatting(
        Aliyun_html=get_disk_Value() +
        rds_disk_threshold() +
        rds_endtime() +
        ecs_five_endtime() +
        get_CPU_Value() +
        get_Member_Value() +
        redis_endtime()
    )
    send_mail(email_html=html)

效果展示
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1160396.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

成集云 | 钉钉集成用友T费用报销付款接口 |解决方案

源系统成集云目标系统 方案介绍 钉钉是一款免费沟通和协同的多端平台&#xff0c;提供PC版、Web版和手机版&#xff0c;支持手机和电脑间文件互传。钉钉帮助中国企业通过系统化的解决方案&#xff08;微应用&#xff09;&#xff0c;提升中国企业的沟通和协同效率。应用场景包…

VMware Workstation 17安装教程之设置系统模式

接上文&#xff0c;设置系统模式 返回到安装概要界面后&#xff0c;右侧第一个Installation Destination指的是想把系统安装到哪个硬盘。此时仅仅是让我们进行确认&#xff0c;不需要进行任何修改。 设置系统安装设备 关闭kdump服务 配置网络信息 当在虚拟机中做实验的时候&…

报文的路由过程

路由转发过程 记住路由转发过程结论&#xff1a;报文ip是不变&#xff0c;mac改变。 mac地址在同一个广播域传输过程中是不变的&#xff1b;在跨越广播域的时候会发生改变的&#xff1b;而IP地址在传输过程中是不会改变的&#xff08;除NAT的时候&#xff09;。 ip地址本质上是…

解析mfc100u.dll文件丢失的修复方法,快速解决mfc100u.dll问题

在计算机使用过程中&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中最常见的就是“缺少某个文件”的错误。最近&#xff0c;我也遇到了一个这样的问题&#xff0c;那就是“mfc100u.dll丢失”。这个问题可能会导致某些应用程序无法正常运行&#xff0c;给我们带来困扰。…

怎样解决“缺失msvcp110.dll”错误,msvcp110.dll的修复教程

在计算机使用过程中&#xff0c;我们可能会遇到一些系统错误提示&#xff0c;比如“msvcp110.dll文件丢失”。这是因为msvcp110.dll是Microsoft Visual C 2012的一个动态链接库文件&#xff0c;如果这个文件丢失或者损坏&#xff0c;就可能导致某些程序无法正常运行。那么&…

一种FSK信号符号同步的思想

FSK原理 FSK利用频率传输信息,即将信息流调制到频率上。以最简单的2FSK通俗来讲,用2个不同的频率 f 1 f_1 f1

淘宝协议最新版

我可以为您提供一些示例代码&#xff0c;以演示一些与电商平台相关的功能。请注意&#xff0c;以下代码仅为示例&#xff0c;具体实现还需要根据您的应用程序的架构、技术栈和需求进行调整和扩展。 1. 用户注册功能&#xff1a; - 后端实现&#xff1a;在后端&#xff0c;您可…

浅谈OSG的默认视点方向

目录 1. 前言 2. OPenGL坐标系和OSG坐标系 3. 默认视点有关的几个案例 4. 视点操作 4.1. 视点调整 4.2. 左右转动 4.3. 向前走 5. 总结 6. 参考资料 1. 前言 在OSG开发中&#xff0c;对视点的理解透彻是必须可少的&#xff0c;特别是在进行自定义操控器类的开发中&…

【组件】身份证卡片

效果展示 组件代码 <div class"cardOneRoot"><img :src"itemInfo.psnPicUrl ? itemInfo.psnPicUrl : " alt""/><div class"infoDiv" v-if"itemInfo.noInfo 1"><div v-for"(item2, index2) in …

“第五十七天”

不出意外的话&#xff0c;机组这周也就过完了&#xff0c;不过就真的是简单过一遍&#xff0c;先简单有个印象吧&#xff0c;这样看的话还是放假之前还是有机会把四大件都过一遍的。 这个思路&#xff0c;真的太神了&#xff0c;当然也是自己太弱了&#xff0c;就这我还为自己想…

VulnHub DC-3

一、信息收集 1.nmap扫描 只开放了80端口&#xff0c;所以只能从80入手 访问web页面 提示&#xff1a;只有一个flag&#xff0c;并且只有一个入口 wappalyzer插件 知道站点使用Joomla框架 使用该框架扫描工具 2.Joomla工具 joomscan --help joomscan -u 192.168.103.192 -e…

HNU-计算机网络-实验1-应用协议与数据包分析实验(Wireshark)

计算机网络 课程基础实验一 应用协议与数据包分析实验(Wireshark) 计科210X 甘晴void 202108010XXX 一、实验目的&#xff1a; 通过本实验&#xff0c;熟练掌握Wireshark的操作和使用&#xff0c;学习对HTTP协议进行分析。 二、实验内容 2.1 HTTP 协议简介 HTTP 是超文本…

《算法通关村——缓存机制了解LRU实现》

《算法通关村——缓存机制了解LRU实现》 介绍 LRU是"Least Recently Used"&#xff08;最近最少使用&#xff09;的缓存机制&#xff0c;它是一种常用的缓存算法&#xff0c;用于管理缓存中的数据项。LRU缓存机制的基本思想是&#xff0c;当缓存达到其容量限制时&a…

ChatGPT对未来发展的影响?一般什么时候用到GPT

ChatGPT以其强大的自然语言处理能力对未来的发展具有重要影响。以下是ChatGPT的潜在影响和一般使用情况&#xff1a; 改善自然语言理解和生成&#xff1a;ChatGPT和类似的模型可以改善机器对人类语言的理解和生成。这将有助于改进各种应用领域&#xff0c;包括智能助手、聊天机…

功放电路有这么多种,哪种音质最好呀?

功放电路种类很多&#xff0c;首先得知道各个功放电路的特点。 第一种&#xff0c;A类功放&#xff08;甲类功放&#xff09;&#xff0c;在信号的整个周期内都不会出现电流截止(即停止输出)的一类放大器。 但是A类放大器工作时会产生高热&#xff0c;效率很低&#xff0c;优…

使用postman进行接口自动化测试

&#x1f4e2;专注于分享软件测试干货内容&#xff0c;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;交流讨论&#xff1a;欢迎加入我们一起学习&#xff01;&#x1f4e2;资源分享&#xff1a;耗时200小时精选的「软件测试」资…

数据结构之栈的实现

&#x1d649;&#x1d65e;&#x1d658;&#x1d65a;!!&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦ &#x1f44f;&#x1f3fb;‧✧̣̥̇: Solitary-walk ⸝⋆ ━━━┓ - 个性标签 - &#xff1a;来于“云”的“羽球人”…

干货分享,大厂内部压测方案设计!

01、为什么要做压测 1、什么是压力测试&#xff1f; 不断向被测对象施加压力&#xff0c;测试系统在压力情况下的表现。 2、压力测试的目的是什么&#xff1f; 测试得出系统的极限性能指标&#xff0c;从而给出合理的承诺值或者容量告警&#xff1b; 找出系统的性能瓶颈&a…

5.1 实体完整性

思维导图&#xff1a; 前言 第5章 数据库完整性笔记 定义&#xff1a; 完整性&#xff1a;确保数据的正确性和相容性。 正确性&#xff1a;数据与现实世界语义相符、反映实际状况。相容性&#xff1a;同一对象在数据库的不同关系表中数据逻辑上是一致的。 示例&#xff1a; 学…

【发表案例】2区正刊,网络安全、智能系统领域,2个月3天录用,11天见刊,16天检索!

计算机类SCIE 【期刊简介】IF&#xff1a;4.0-5.0&#xff0c;JCR2区&#xff0c;中科院3区 【检索情况】SCIE 在检&#xff0c;正刊 【征稿领域】提高安全性和隐私性的边缘/云的智能方法的研究&#xff0c;如数字孪生等 【截稿日期】2023.11.30 录用案例&#xff1a;2个月…