CVESearch部署、使用与原理分析

news2024/12/29 8:57:55

文章目录

  • 前言
  • 1、概述
  • 2、安装与使用
    • 2.1、源码安装
      • 2.1.1、部署系统依赖组件
        • 2.1.1.1、下载安装基础组件
        • 2.1.1.2、下载安装MongoDB Community Edition 7.0
      • 2.1.2、使用源码安装系统
        • 2.1.2.1、安装CVESearch
        • 2.1.2.2、填充MongoDB数据库
        • 2.1.2.3、填充Redis数据库
    • 2.2、使用方法
  • 3、测试用例
    • 3.1、搜索指定产品的漏洞
    • 3.2、搜索指定漏洞
    • 3.3、使用排名数据库
    • 3.4、比较CVSS值
    • 3.5、全文检索
    • 3.6、配合工具使用
    • 3.7、使用Web界面
  • 4、总结
    • 4.1、CVESearch检测的漏洞对象
    • 4.2、CVESearch的漏洞信息来源
  • 5、参考文献
  • 总结


前言

  本博客的主要内容为CVESearch的部署、使用与原理分析。本博文内容较长,因为涵盖了CVESearch的几乎全部内容,从CVESearch的部署到如何使用CVESearch,以及对CVESearch的原理分析,相信认真读完本博文,各位读者一定会对CVESearch有更深的了解。以下就是本篇博客的全部内容了。


1、概述

  CVESearch是一个用于查找和浏览已知计算机安全漏洞的在线工具。它提供了一个数据库,其中包含了已公开披露的漏洞信息,这些漏洞通常由CVE(通用漏洞披露)编号标识。用户可以通过CVESearch搜索特定的漏洞,查看其详细信息,包括漏洞的描述、影响范围、解决方案等。这个工具对于安全专业人员、系统管理员和普通用户都非常有用,可以帮助他们了解当前的安全威胁并采取必要的防范措施。以下是一些关于CVESearch的详细介绍:

  • 漏洞数据库:CVESearch维护了一个包含已公开披露的计算机安全漏洞信息的数据库。这些漏洞通常由CVE(通用漏洞披露)编号标识,每个漏洞都有一个唯一的标识符。
  • 搜索功能:用户可以通过CVESearch进行漏洞搜索。他们可以输入关键词、CVE编号、漏洞类型或者其他相关信息来查找特定的漏洞。
  • 漏洞详情:CVESearch提供了详细的漏洞信息。这些信息通常包括漏洞的描述、影响范围、危害程度评级、受影响的软件或系统、漏洞披露时间以及可能的解决方案等。
  • 易于使用:CVESearch的用户界面简单直观,使得用户可以轻松地进行漏洞搜索和浏览相关信息。
  • 及时更新:CVESearch定期更新漏洞数据库,以确保用户能够获取到最新的安全漏洞信息。
  • 社区支持:CVESearch是一个开放的项目,得到了全球安全社区的支持和贡献。用户也可以参与到该项目中,提交漏洞信息或提供改进建议。

  总的来说,CVESearch是一个强大的工具,可以帮助用户了解和应对计算机安全漏洞,从而提高系统和网络的安全性。此外,CVESearch工具基于Python语言、HTML语言、JavaScript语言和CSS语言开发。

2、安装与使用

软件环境硬件环境约束条件
Ubuntu 22.04.1 LTS(内核版本5.15.0-43-generic)内存16GBCVESearch v5.0.1
具体的软件环境可见“2.1、源码安装”章节所示的软件环境共分配4个处理器,每个处理器4个内核,共16个处理器内核具体的约束条件可见“2.1、源码安装”章节所示的软件版本约束
暂无硬盘200GB暂无
暂无CVESearch部署在VMware Pro 17上的Ubuntu22.04.1系统上(主机系统为Windows11),硬件环境和软件环境也是对应的VMware Pro 17的硬件环境和软件环境暂无

2.1、源码安装

2.1.1、部署系统依赖组件

2.1.1.1、下载安装基础组件
  1. 执行如下命令来下载安装基础组件:
$ sudo apt-get update
$ sudo apt-get install git -y
2.1.1.2、下载安装MongoDB Community Edition 7.0
  1. 首先安装所需依赖:
$ sudo apt-get update
$ sudo apt-get install gnupg curl -y
  1. 然后导入MongoDB公有GPG密钥:
$ cd ~
$ curl -fsSL https://www.mongodb.org/static/pgp/server-7.0.asc | sudo gpg -o /usr/share/keyrings/mongodb-server-7.0.gpg --dearmor
  1. 然后为MongoDB创建列表文件:
$ sudo touch /etc/apt/sources.list.d/mongodb-org-7.0.list
  1. 然后导入MongoDB的源:
$ echo "deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-7.0.gpg ] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/7.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-7.0.list
  1. 然后重新加载本地包数据库:
$ sudo apt-get update
  1. 然后执行如下命令来安装7.0版本的MongoDB:
$ sudo apt-get install -y mongodb-org
  1. 然后执行如下命令锁定版本,防止意外升级:
$ echo "mongodb-org hold" | sudo dpkg --set-selections
$ echo "mongodb-org-database hold" | sudo dpkg --set-selections
$ echo "mongodb-org-server hold" | sudo dpkg --set-selections
$ echo "mongodb-mongosh hold" | sudo dpkg --set-selections
$ echo "mongodb-org-mongos hold" | sudo dpkg --set-selections
$ echo "mongodb-org-tools hold" | sudo dpkg --set-selections
  1. 然后执行如下命令启动MongoDB,并设置开机自启,最后重启系统:
$ sudo systemctl start mongod
$ sudo systemctl enable mongod.service
$ reboot
  1. 系统重启后执行如下命令来连接MongoDB:
$ mongosh
  1. 打印如下图所示的信息即代表MongoDB安装并启动成功:
    在这里插入图片描述

  2. 若想退出MongoDB,执行如下命令即可:

test> quit

2.1.2、使用源码安装系统

2.1.2.1、安装CVESearch
  1. 首先来到当前用户的根目录中,下载CVESearch源码,并进入其目录中:
$ cd ~
$ git clone https://github.com/cve-search/cve-search.git
$ cd cve-search/
  1. 然后执行如下命令来安装系统级依赖组件:
$ xargs sudo apt-get install -y < requirements.system
  1. 然后执行如下命令来安装CVESearch及其Python依赖:
$ pip3 install -r requirements.txt
2.1.2.2、填充MongoDB数据库

  在CVESearch中,MongoDB数据库默认称为cvedb,共有11个集合:

  • cves(常见漏洞和曝光项)- 来源NVD NIST(API)
  • cpe(常见平台枚举项)- 来源NVD NIST
  • cwe(常见弱点枚举项)- 来源NVD NIST
  • capec(常见攻击模式枚举和分类)- 来源NVD NIST
  • ranking(每个组的排名规则)- 本地cve-search
  • MITRE参考键/映射 - 来源MITRE参考键/映射
  • info(每个集合的元数据,例如最后修改日期)- 本地cve-search
  • via4 VIA4CVE交叉引用,并有3个额外的来源:
    • MITRE参考键/映射。
    • Red Hat RPM的CVE数据库。
    • Red Hat RHSA的Oval数据库。

  CVESearch关于MongoDB的初始设置只发生一次,就是在安装时。我们可以按照如下步骤为MongoDB填充关于CVESearch的数据库。

  1. 首先来到CVESearch源代码目录中:
$ cd ~/cve-search/
  1. 然后执行如下命令来为MongoDB数据库填充数据:
$ ./sbin/db_mgmt_cpe_dictionary.py -p
$ ./sbin/db_mgmt_json.py -p
$ ./sbin/db_updater.py -c
  1. 如果想更新数据库,可以执行如下命令:
$ ./sbin/db_updater.py -v
2.1.2.3、填充Redis数据库

  CVESearch还使用了Redis,Redis共存储关于CVESearch的三个数据库,这3个Redis数据库的用途如下:

  • 数据库编号10:CPE(通用平台枚举)缓存 - 来源于MongoDB的cvedb集合cpe数据
  • 数据库编号11:通知数据库 - 来源于cve-search
  • 数据库编号12:CVE参考数据库 - 是一个针对CVE ID与各种供应商ID进行交叉引用的数据库,来源于NVD NIST/MITRE
  1. 首先来到CVESearch源代码目录中:
$ cd ~/cve-search/
  1. 然后执行如下命令来为Redis数据库填充数据:
$ ./sbin/db_updater.py -c

2.2、使用方法

  我们可以使用如下命令来使用CVESearch。注意:该命令执行的是“/cve-search/bin/search.py”文件。

search.py [-h] [-q Q] [-p P [P ...]] [--only-if-vulnerable] [--strict_vendor_product] [--lax] [-f F] [-c C] [-o O] [-l] [-n] [-r] [-a] [-v V] [-s S] [-t T] [-i I]

  可以发现该命令包含很多的参数,为了方便后续使用,将对于这些参数的具体使用方法以及含义总结为下表。

选项含义
-h, --help显示帮助消息并退出。
-q Q在pip需求文件中搜索CVE,例如“dep/myreq.txt”。
-p P [P …]搜索一个或多个产品,例如o:microsoft:windows_7o:cisco:ios:12.1o:microsoft:windows_7 o:cisco:ios:12.1。如果只希望获取直接影响该产品的漏洞,请添加--only-if-vulnerable选项。
--only-if-vulnerable使用此选项,-p仅返回直接分配给该产品的漏洞。也就是说,如果windows_7仅作为Adobe Reader漏洞中受影响的操作系统而提及,它将不予考虑。
--strict_vendor_product使用此选项将执行严格的供应商产品搜索。-p中的值应格式化为供应商:产品,例如microsoft:windows_7
--lax严格搜索软件版本已禁用。请注意,此选项仅支持仅包含数字值的产品描述(格式为cisco:ios:1.2.3)。
-f F表示在漏洞摘要中进行自由文本搜索。
-c C搜索一个或多个CVE-ID。
-o O表示输出格式,包括[csv
-l按降序排序
-n查找受影响配置的完整CPE(通用平台枚举)名称
-r查找受影响配置的排名
-a查找与CWE弱点相关的CAPEC
-v V在参考网址中查找的供应商名称
-s S在摘要文本中搜索
-t T在过去的n天内搜索
-i I将输出限制为n个元素(默认:不限)

3、测试用例

3.1、搜索指定产品的漏洞

  我们可以使用下面的命令搜索cisco:ios:12.4产品相关的漏洞信息。若想搜索其它产品的相关漏洞信息,替换目标产品即可。

$ cd ~/cve-search
$ ./bin/search.py -p cisco:ios:12.4

  执行完上面的命令后就会打印关于cisco:ios:12.4产品的漏洞信息。
在这里插入图片描述

  我们还可以使用下面的命令将搜索到的结果以JSON格式打印,这方便后续的存储以及其它操作。

$ ./bin/search.py -p cisco:ios:12.4 -o json

  执行上面的命令后,会在命令行终端打印如下信息。
在这里插入图片描述

3.2、搜索指定漏洞

  我们可以使用如下命令来搜索指定漏洞(比如CVE-2010-3333)。若想搜索其它漏洞,替换目标漏洞即可。

$ ./bin/search.py -c CVE-2010-3333

  执行上面的命令后,将会打印关于CVE-2010-3333漏洞的信息。
在这里插入图片描述

3.3、使用排名数据库

  排名数据库允许根据软件漏洞的通用平台枚举名称对其进行排名。排名可以按组织内的每个组织或部门进行,也可以按任何有意义的名称进行。例如,可以查找特定CVE-ID的排名。

$ cd ~/cve-search/
$ ./bin/search.py -c CVE-2012-4341  -r  -n

  执行上面的命令将会打印如下内容。
在这里插入图片描述

3.4、比较CVSS值

  可以根据CPE名称比较某些产品的CVSS(通用漏洞评分系统)值。比如比较oracle:java和sun:jre,并对它们的CVSS值进行一些统计:

$ sudo apt install r-base-core -y
$ cd ~/cve-search/
$ python3 bin/search.py -p oracle:java -o json  | jq -r '.cvss' | Rscript -e 'summary(as.numeric(read.table(file("stdin"))[,1]))'

  首先统计oracle:java的CVSS值(即执行上面的命令),这将会在命令行终端中打印如下图所示的内容。
在这里插入图片描述

  然后统计sun:jre的CVSS值。

$ python3 bin/search.py -p sun:jre -o json  | jq -r '.cvss' | Rscript -e 'summary(as.numeric(read.table(file("stdin"))[,1]))'

  执行上面的命令后将会在命令行终端中打印如下图所示的内容。
在这里插入图片描述

3.5、全文检索

  我们可以使用如下命令对当前MongoDB集合中的所有CVE进行索引。注意,进行全文索引的时间会比较长。

$ cd ~/cve-search/
$ ./sbin/db_fulltext.py -l 0

  完成全文检索后,就可以通过执行下面的命令来查询全文索引以获得匹配CVE-ID的列表。

$ ./bin/search_fulltext.py -q NFS -q Linux

  执行完上面的命令后,会打印如下图所示的信息。
在这里插入图片描述

  然后我们还可以通过执行下面的命令来查询全文索引,并为每个CVE-ID输出JSON对象。

$ ./bin/search_fulltext.py -q NFS -q Linux -f

  执行完上面的命令后,会打印如下图所示的内容。
在这里插入图片描述

3.6、配合工具使用

  由于CVESearch是基于一组工具的,因此它可以与标准Unix工具一起使用和组合。如果我们想知道哪些顶级供应商使用“unknown”一词来表示其漏洞,可以执行下面的命令。注:需完成“3.5、全文检索”章节的内容。

$ python3 bin/search_fulltext.py -q unknown -f | jq -c '. | .vulnerable_configuration[0]' | cut -f5 -d: | sort  | uniq -c  | sort -nr | head -10

  执行完上面的命令后,将会打印如下图所示的信息。
在这里插入图片描述

3.7、使用Web界面

  Web界面是查看CVE条目和查询特定CVE的最小界面。我们可以使用以下命令启动Web界面:

$ cd ~/cve-search/web/
$ python3 index.py

  执行完上面的命令后,使用浏览器访问下面的链接。

http://127.0.0.1:5000

  访问该链接后,将会在浏览器中得到如下图所示的内容,这就可以通过Web界面来查看漏洞信息了。
在这里插入图片描述

4、总结

4.1、CVESearch检测的漏洞对象

  CVESearch只是漏洞信息的存储库,并不会对漏洞进行扫描,故CVESearch没有漏洞检测对象。

4.2、CVESearch的漏洞信息来源

  通过“2.1.2、使用源码安装系统”可知,CVESearch的数据都被保存到MongoDB数据库中(Redis数据库中存储的只是MongoDB数据库的缓存,故MongoDB数据库中存储的数据才是主体)。

  所以,我们通过将MongoDB数据库中的有效数据导出来检索CVESearch的具体数据来源。由“2.1.2、使用源码安装系统”章节可知,CVESearch在MongoDB中的对应数据库名称为cvedb。所以我们使用如下命令来将该数据库导出到“~/data/”目录中。

$ mongodump --db cvedb --out ~/data/

  然后来到数据导出目录,再将有效数据转换为JSON格式。为了实现该目的,我们可以顺序执行如下命令。

$ cd ~/data/cvedb/
$ mkdir ~/data/final_data/
$ bsondump ./capec.bson > ~/data/final_data/capec.json
$ bsondump ./cpe.bson > ~/data/final_data/cpe.json
$ bsondump ./cves.bson > ~/data/final_data/cves.json
$ bsondump ./cwe.bson > ~/data/final_data/cwe.json
$ bsondump ./via4.bson > ~/data/final_data/via4.json

  最后将在“~/data/final_data/”目录中得到的JSON格式的数据进行分析即可得到下表。该表记录了CVESearch的漏洞信息来源。

序号漏洞信息来源备注
1.RHSARHSA(Red Hat Security Advisory)是红帽公司发布的安全公告,用于通报和解决发现的安全漏洞,为用户提供更新和修补程序的建议。
2.DSADSA(Debian Security Advisory)是Debian发布的安全公告,用于通报和解决发现的安全漏洞,为用户提供更新和修补程序的建议。
3.CVECVE(Common Vulnerabilities and Exposures,通用漏洞和暴露)是一个用于标识和跟踪计算机系统中公共漏洞的字典,为安全研究人员和厂商提供了一个统一的标准和标识体系。
4.SA-CORESA-CORE(Security Advisory CORE)是Drupal发布的安全公告,用于通报和解决发现的安全漏洞,为用户提供更新和修补程序的建议。
5.cisco-sacisco-sa是思科(Cisco)发布的安全公告,用于通报和解决发现的安全漏洞,为用户提供更新和修补程序的建议。
6.VMSAVMSA(VMware Security Advisory)是VMware发布的安全公告,用于通报和解决发现的安全漏洞,为用户提供更新和修补程序的建议。
7.BIDBID(Bugtraq ID)是一个用于标识计算机安全漏洞的唯一标识符,通常在安全公告和漏洞数据库中使用。
8.OSVDBOSVDB(Open Sourced Vulnerability Database)是一个旨在收集和提供计算机安全漏洞信息的开源数据库,帮助用户了解和管理潜在的安全风险。
9.OVEOVE(OpenVAS Vulnerability Description Language)是一种用于描述漏洞信息和扫描结果的开放式标准,通常与 OpenVAS(开放式漏洞评估系统)一起使用。
10.VTSVTS(Vulnerability Testing Service)是一种用于对计算机系统进行安全漏洞测试和评估的服务。
11.ZDIZDI(Zero Day Initiative)是一家安全研究公司,专注于收集和发布零日漏洞信息,并与软件供应商合作解决这些漏洞。
12.DLADLA(Debian LTS Advisory)是Debian长期支持(LTS)团队发布的安全公告,用于通报和解决Debian稳定版本中发现的安全漏洞,为用户提供更新和修补程序的建议。
13.FEDORAFEDORA是Fedora发布的安全公告,用于通报和解决发现的安全漏洞,为用户提供更新和修补程序的建议。
14.GLSAGLSA(Gentoo Linux Security Advisories)是Gentoo Linux发布的安全公告,用于通报和解决发现的安全漏洞,为用户提供更新和修补程序的建议。
15.CESACESA(CentOS Errata and Security Advisory)是CentOS发布的错误和安全公告,用于通知用户有关系统错误和安全漏洞的信息,并提供更新和修补程序。
16.openSUSE-SUopenSUSE-SU是openSUSE发布的安全更新通告,用于通知用户有关系统中发现的安全漏洞,并提供更新和修补程序的信息。
17.USNUSN(Ubuntu Security Notice)是Ubuntu发布的安全通告,用于通报和解决发现的安全漏洞,为用户提供更新和修补程序的建议。
18.USE-SUSUSE-SU是SUSE Linux Enterprise Server(SLES)和SUSE Linux EnterpriseDesktop(SLED)发布的安全更新通告,用于通知用户有关系统中发现的安全漏洞,并提供更新和修补程序的信息。
19.ALASALAS(Arch Linux Security Advisories)是Arch Linux发布的安全公告,用于通报和解决发现的安全漏洞,为用户提供更新和修补程序的建议。
20.ELSAELSA(Enterprise Linux Security Advisories)是Oracle Linux和CentOS发布的安全公告,用于通报和解决发现的安全漏洞,为用户提供更新和修补程序的建议。
21.stable-channel-update-for-desktopstable-channel-update-for-desktop是Ubuntu桌面版中稳定渠道的更新通告,用于通报和解决发现的安全漏洞和其他问题,为用户提供更新和修补程序的建议。
22.MFSAMFSA(Mozilla Foundation Security Advisory)是Mozilla基金会发布的安全公告,用于通报和解决发现的安全漏洞,为用户提供更新和修补程序的建议。
23.WPVDBWPVDB(WordPress Vulnerability Database)是一个专注于收集和发布WordPress平台相关漏洞信息的公开数据库。

5、参考文献

  1. cve-search/cve-search: cve-search - a tool to perform local searches for known vulnerabilities
  2. CVE-Search安装环境配置及使用
  3. 开源软件CVE_Search的配置与使用(详细)
  4. CVE-Search — CVE-Search documentation
  5. How to install mongodb 7.0 to Ubuntu 22.04
  6. Install MongoDB Community Edition on Ubuntu — MongoDB Manual

总结

  以上就是本篇博文的全部内容,可以发现,CVESearch的部署与使用过程并不复杂,我们本篇博客对其进行了详细的分析。相信读完本篇博客,各位读者一定对CVESearch有了更深的了解。

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

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

相关文章

LeetCode | 704.二分查找

标准的二分查找&#xff0c;直接上模板&#xff01; class Solution(object):def search(self, nums, target):""":type nums: List[int]:type target: int:rtype: int"""l 0r len(nums) - 1while l < r:mid (l r 1) / 2if nums[mid] …

Telnet命令详解:安装、用法及应用场景解析

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐&#xff1a;「storm…

笔试算法总结

文章目录 题目1题目2题目3题目4 题目1 使用 StringBuilder 模拟栈的行为&#xff0c;通过判断相邻2个字符是否相同&#xff0c;如果相同就进行删除 public class Main {public static String fun(String s) {if (s null || s.length() < 1) return s;StringBuilder builde…

EventLoop模块 --- 事件循环模块

目录 1 设计思想 eventfd 创建eventfd 2 实现 3 联合调试 4 整合定时器模块 5 联合超时模块调试 1 设计思想 EventLoop 模块是和线程一一绑定的&#xff0c;每一个EventLoop模块内部都管理了一个Poller对象进行事件监控&#xff0c;同时管理着多个Connection对象&…

python 使用faker库 生成数据

Welcome to Faker’s documentation! — Faker 30.3.0 documentationVersion1: Example from docs:from faker import Faker from faker.providers import internet for i in range(2): #批量生成数据fake Faker()name fake.name()address fake.address()text f…

el-动态表单的校验不触发/只触发了部分项

参考&#xff1a; 深入了解Element Form表单动态验证问题 转载vue elementUI组件表单动态验证失效的问题与解决办法 在别人的代码上开发新功能时&#xff0c;发现动态表单的校验功能突然出现问题&#xff1a; 重构前,只有两步&#xff0c;通过type来判断当前显示内容 <el-f…

Cesium.js(SuperMap iClient3D for Cesium)进行三维场景展示和图层动画

1&#xff09;&#xff1a;参考API文档&#xff1a;SuperMap iClient3D for Cesium 开发指南 2&#xff09;&#xff1a;官网示例&#xff1a;support.supermap.com.cn:8090/webgl/Cesium/examples/webgl/examples.html#layer 3&#xff09;&#xff1a;SuperMap iServer&…

自定义类型 - 结构体

2024 - 10 - 13 - 笔记 - 26 作者(Author): 郑龙浩 / 仟濹(CSDN账号名) 自定义类型 - 结构体 平时用的数组是一组相同类型的数据&#xff0c;如果想表示一组不同类型的数据&#xff0c;那么就可以结构体了。 ① 结构体的声明&#xff08;重要&#xff09; 自己起的名字&…

[论文阅读]: Detecting Copyrighted Content in Language Models Training Data

发布链接&#xff1a;http://arxiv.org/abs/2402.09910 核心目标&#xff1a;检测语言模型的训练过程中是否使用了受版权保护的内容 基于假设&#xff1a;语言模型有可能识别训练文本中的逐字节选 工作&#xff1a;提出了 DE-COP&#xff0c;一种确定训练中是否包含受版权保…

如何在Android平板上使用谷歌浏览器进行网页缩放

在使用Android平板时&#xff0c;我们经常会浏览各种网页&#xff0c;但有时网页内容可能无法适应屏幕大小&#xff0c;这时就需要用到网页缩放功能。本文将为您详细介绍如何在Android平 板上的谷歌浏览器中进行网页缩放&#xff0c;帮助您更好地浏览网页。&#xff08;本文由h…

Cursor 平替项目 bolt.new

Cursor 是一个全新的编程工具&#xff0c;旨在帮助开发者更高效地写代码。它不仅能提升编程速度&#xff0c;还能让代码更干净、更智能。无论你是编程新手还是经验丰富的开发者&#xff0c;Cursor AI都能为你提供智能辅助&#xff0c;显著提高编程效率。 但是目前 Cursor 免费…

QT开发--文件的读写操作

第十三章 文件的读写操作 Qt提供两种读写纯文本文件的方法&#xff1a; 1、直接使用 QFile 类的IO功能&#xff1b; 2、结合 QFile 和 QTextStream&#xff0c;利用流(Stream)进行操作。 13.1 文件读操作 13.1.1 使用QFile类 Qt封装了QFile类&#xff0c;方便我们对文件进行操…

物联网直播技术揭秘:如何保证超高可用性?

我是小米,一个喜欢分享技术的29岁程序员。如果你喜欢我的文章,欢迎关注我的微信公众号“软件求生”,获取更多技术干货! Hello,大家好!我是小米,一个29岁超爱分享技术的码农。今天跟大家聊一聊物联网时代下直播高可用方案的那些事儿。 随着物联网的快速发展,直播技术已…

针对考研的C语言学习(循环队列-链表版本以及2019循环队列大题)

题目 【注】此版本严格按照数字版循环队列的写法&#xff0c;rear所代表的永远是空数据 图解 1.初始化部分和插入部分 2出队 3.分部代码解析 初始化 void init_cir_link_que(CirLinkQue& q) {q.rear q.front (LinkList)malloc(sizeof(LNode));q.front->next NULL…

【宝可梦】游戏

pokemmo https://pokemmo.com/zh/ 写在最后&#xff1a;若本文章对您有帮助&#xff0c;请点个赞啦 ٩(๑•̀ω•́๑)۶

LeetCode讲解篇之1749. 任意子数组和的绝对值的最大值

文章目录 题目描述题解思路题解代码题解链接 题目描述 题解思路 这个我只需要求子数组和的最小值相反数和子数组和的最大值&#xff0c;本题答案为二者的最大值 设数组maxDp中第i号元素表示以nums[i]为结尾的子数组和的最大值 设数组minDp中第i号元素表示以nums[i]为结尾的子…

机器学习课程学习周报十六

机器学习课程学习周报十六 文章目录 机器学习课程学习周报十六摘要Abstract一、机器学习部分1. 再探马尔可夫链1.1 离散状态马尔可夫链1.1.1 转移概率矩阵和状态分布1.1.2 平稳分布 1.2 连续状态马尔可夫链1.3 马尔可夫链的性质 2. 马尔可夫蒙特卡罗法2.1 基本想法2.2 基本步骤…

77.【C语言】文件操作(3)

目录 6.文件的顺序读写 1.几个顺序读写函数 1.fgetc函数 代码示例 代码改进 2.fputc函数 3.fputs函数 如果需要换行,应该写入换行符(\n) 4.fgets函数 1.读取单行字符串 2.读取多行字符串 6.文件的顺序读写 1.几个顺序读写函数 分组:(fgetc,fputc),(fgets,fputs),(f…

服务器数据恢复—Raid5阵列硬盘磁头损坏导致掉线的数据恢复案例

服务器数据恢复环境&#xff1a; 一台某品牌存储设备上有一组由10块硬盘&#xff08;9块数据盘1块热备盘&#xff09;组建的raid5阵列&#xff0c;上层部署vmware exsi虚拟化平台。 服务器故障&#xff1a; raid5阵列中两块硬盘对应的指示灯亮黄灯掉线。硬盘序列号无法读取&am…

【动手学深度学习】6.3 填充与步幅(个人向笔记)

卷积的输出形状取决于输入形状和卷积核的形状在应用连续的卷积后&#xff0c;我们最终得到的输出大小远小于输入大小&#xff0c;这是由于卷积核的宽度和高度通常大于1导致的比如&#xff0c;一个 240 240 240240 240240像素的图像&#xff0c;经过10层 5 5 55 55的卷积后&am…