扫描工具nmap

news2024/12/23 4:57:53

介绍

说到黑客,知识就是力量。您对目标系统或网络的了解越多,可用的选项就越多。因此,在进行任何利用尝试之前,必须进行适当的枚举。

假设我们获得了一个 IP(或多个 IP 地址)来执行安全审计。在我们做任何其他事情之前,我们需要了解我们正在攻击的“景观”。这意味着我们需要确定哪些服务在目标上运行。例如,其中一个可能正在运行 Web 服务器,而另一个正在充当 Windows Active Directory 域控制器。建立这张景观“地图”的第一阶段是所谓的港口扫描。当计算机运行网络服务时,它会打开一个称为“端口”的网络结构来接收连接。端口对于发出多个网络请求或提供多个服务是必需的。例如,当您在 Web 浏览器中同时加载多个网页时,程序必须有某种方法来确定哪个选项卡正在加载哪个网页。这是通过使用本地计算机上的不同端口与远程 Web 服务器建立连接来完成的。同样,如果您希望服务器能够运行多个服务(例如,您可能希望 Web 服务器同时运行站点的 HTTP 和 HTTPS 版本),那么您需要某种方式将流量定向到适当的服务。再一次,端口是解决这个问题的办法。网络连接在两个端口之间建立 - 一个在服务器上侦听的开放端口,另一个在您自己的计算机上随机选择的端口。例如,当您连接到网页时,您的计算机可能会打开端口 49534 以连接到服务器的端口 443。

与前面的示例一样,该图显示了同时连接到多个网站时发生的情况。您的计算机会打开一个不同的高编号端口(随机),用于与远程服务器的所有通信。

每台计算机共有 65535 个可用端口;但是,其中许多已注册为标准端口。例如,HTTP Web 服务几乎总是可以在服务器的端口 80 上找到。可以在端口 443 上找到 HTTPS Web 服务。可以在端口 139 上找到 Windows NETBIOS,可以在端口 445 上找到 SMB。需要注意的是;但是,尤其是在 CTF 设置中,即使是这些标准端口也被更改也并非闻所未闻,因此我们必须对目标执行适当的枚举。

如果我们不知道服务器打开了哪些端口,那么我们就没有希望成功攻击目标;因此,我们必须从端口扫描开始任何攻击。这可以通过多种方式实现——通常使用一个名为 nmap 的工具,这是这个房间的重点。Nmap 可用于执行许多不同类型的端口扫描——其中最常见的将在即将到来的任务中引入;但是,基本理论是这样的:nmap 将依次连接到目标的每个端口。根据端口的响应方式,可以将其确定为打开、关闭或过滤(通常由防火墙)。一旦我们知道哪些端口是打开的,我们就可以查看枚举每个端口上正在运行的服务 - 手动或更常见的使用 nmap。

那么,为什么是nmap?简短的回答是,它目前是行业标准是有原因的:没有其他端口扫描工具能接近它的功能(尽管一些新来者现在正在与它的速度相匹配)。它是一个非常强大的工具——它的脚本引擎变得更加强大,可用于扫描漏洞,在某些情况下甚至可以直接执行漏洞利用!同样,这将在即将到来的任务中详细介绍。

开关

现在,重要的是要了解:什么是端口扫描;为什么有必要;NMAP 是任何类型的初始枚举的首选工具。

与大多数渗透测试工具一样,nmap 是从终端运行的。有适用于 Windows 和 Linux 的版本。对于此房间,我们将假设您使用的是 Linux;但是,开关应相同。默认情况下,Nmap 安装在 Kali Linux 和 TryHackMe Attack Box 中。

可以通过键入终端命令行来访问 Nmap,然后是我们将在下面介绍的一些“开关”(告诉程序执行不同操作的命令参数)。nmap

为此,您只需要 nmap 的帮助菜单(使用 ) 访问和/或 nmap 手册页(使用 访问)。对于每个答案,除非另有说明,否则请包括开关的所有部分。这包括开头 () 处的连字符。nmap -hman nmap-

描述

使用 Nmap 进行端口扫描时,有三种基本扫描类型。这些是:

  • 技术合作计划(TCP)连接扫描 (-sT)
  • SYN“半开”扫描 (-sS)
  • UDP的扫描 (-sU)

此外,还有几种不太常见的端口扫描类型,我们还将介绍其中的一些类型(尽管不太详细)。这些是:

  • 技术合作计划(TCP)空扫描 (-sN)
  • 技术合作计划(TCP)FIN 扫描 (-sF)
  • 技术合作计划(TCP)圣诞扫描 (-sX)

其中大多数(UDP 扫描除外)用于非常相似的目的,但是,它们的工作方式在每次扫描之间有所不同。这意味着,虽然在大多数情况下,前三种扫描之一可能是您的首选,但值得记住的是,存在其他扫描类型。

在网络扫描方面,我们还将简要介绍ICMP(或“ping”)扫描。

TCP Connect 扫描

若要了解 TCP Connect 扫描 (),请务必熟悉 TCP 三向握手。如果这个术语对你来说是新的,那么在继续之前完成介绍性网络是可取的。-sT

简要回顾一下,三方握手由三个阶段组成。首先,连接终端(在本例中为我们的攻击机)向目标服务器发送 TCP 请求,并设置了 SYN 标志。然后,服务器使用包含 SYN 标志和 ACK 标志的 TCP 响应来确认此数据包。最后,我们的终端通过发送设置了 ACK 标志的 TCP 请求来完成握手。
 

这是TCP/IP网络的基本原则之一,但它与Nmap有什么关系呢?

好吧,顾名思义,TCP Connect 扫描的工作原理是依次与每个目标端口执行三次握手。换言之,Nmap 尝试连接到每个指定的 TCP 端口,并通过接收到的响应来确定服务是否打开。


例如,如果端口关闭,RFC 9293 会声明:

"...如果连接不存在 (CLOSED),则发送重置以响应除另一个重置之外的任何传入段。通过此方法拒绝与现有连接不匹配的 SYN 段。

换言之,如果 Nmap 发送的 TCP 请求将 SYN 标志设置为关闭端口,则目标服务器将使用设置了 RST (Reset) 标志的 TCP 数据包进行响应。通过此响应,Nmap 可以确定端口已关闭。

但是,如果将请求发送到开放端口,则目标将使用设置了 SYN/ACK 标志的 TCP 数据包进行响应。然后,Nmap 将此端口标记为已打开(并通过发回设置了 ACK 的 TCP 数据包来完成握手)。


这一切都很好,但是,还有第三种可能性。

如果端口是打开的,但隐藏在防火墙后面怎么办?

许多防火墙配置为仅丢弃传入的数据包。Nmap 发送 TCP SYN 请求,但未收到任何回复。这表示端口受到防火墙的保护,因此该端口被视为已过滤

也就是说,配置防火墙以使用 RST TCP 数据包进行响应非常容易。例如,在 Linux 的 IPtables 中,命令的简单版本如下所示:

iptables -I INPUT -p tcp --dport <port> -j REJECT --reject-with tcp-reset

这可能使获得目标的准确读数变得极其困难(如果不是不可能的话)。

SYN 扫描

与 TCP 扫描一样,SYN 扫描 () 用于扫描一个或多个目标的 TCP 端口范围;但是,这两种扫描类型的工作方式略有不同。SYN 扫描有时称为“半开”扫描或“隐身”扫描。-sS

TCP 扫描与目标执行完整的三次握手,而 SYN 扫描在从服务器接收 SYN/ACK 后发回 RST TCP 数据包(这可防止服务器重复尝试发出请求)。换句话说,扫描开放端口的顺序如下所示:

这对我们黑客来说有很多好处:

  • 它可用于绕过较旧的入侵检测系统,因为它们正在寻找完整的三次握手。对于现代IDS解决方案,情况通常不再如此;正是由于这个原因,SYN扫描仍然经常被称为“隐形”扫描。
  • 侦听开放端口的应用程序通常不会记录 SYN 扫描,因为标准做法是在完全建立连接后记录连接。同样,这与SYN扫描隐身的想法有关。
  • SYN 扫描无需费心完成(和断开)每个端口的三次握手,就比标准 TCP Connect 扫描快得多。

但是,SYN 扫描有几个缺点,即:

  • 它们需要 sudo 权限[1] 才能在 Linux 中正常工作。这是因为 SYN 扫描需要能够创建原始数据包(而不是完整的 TCP 握手),这是默认情况下只有 root 用户才拥有的权限。
  • 不稳定的服务有时会因 SYN 扫描而关闭,如果客户端为测试提供了生产环境,则可能会出现问题。

总而言之,利大于弊。

因此,如果使用 sudo 权限运行,则 SYN 扫描是 Nmap 使用的默认扫描。如果在没有 sudo 权限的情况下运行,则 Nmap 默认为我们在上一个任务中看到的 TCP Connect 扫描。


使用 SYN 扫描识别关闭和过滤的端口时,应用与 TCP Connect 扫描完全相同的规则。

如果端口关闭,则服务器会使用 RST TCP 数据包进行响应。如果端口被防火墙过滤,则 TCP SYN 数据包将被丢弃,或者通过 TCP 重置进行欺骗。

在这方面,两次扫描是相同的:最大的区别在于它们如何处理开放端口。


[1] 也可以通过赋予 Nmap CAP_NET_RAW、CAP_NET_ADMIN 和 CAP_NET_BIND_SERVICE 功能来使 SYN 扫描发挥作用;但是,这可能不允许许多 NSE 脚本正常运行。

UDP 扫描

与 TCP 不同,UDP 连接是无状态的。这意味着,UDP 连接不是通过来回“握手”来启动连接,而是依赖于将数据包发送到目标端口,并且基本上希望它们能够成功。这使得 UDP 非常适合依赖于速度而不是质量的连接(例如视频共享),但缺乏确认使 UDP 的扫描难度大大增加(并且速度要慢得多)。Nmap UDP 扫描的开关为 (-sU)

当数据包发送到打开的 UDP 端口时,应该没有响应。发生这种情况时,Nmap 将端口称为 。换句话说,它怀疑端口是打开的,但它可能是防火墙。如果它得到 UDP 响应(这是非常不寻常的),则该端口将被标记为打开。更常见的是,没有响应,在这种情况下,请求将作为双重检查第二次发送。如果仍然没有响应,则端口被标记为打开|过滤,Nmap 继续前进。open|filtered

当数据包发送到关闭的 UDP 端口时,目标应使用 ICMP (ping) 数据包进行响应,其中包含端口无法访问的消息。这清楚地标识了关闭的端口,Nmap 将其标记为关闭端口并继续前进。


由于难以识别 UDP 端口是否实际打开,因此与各种 TCP 扫描相比,UDP 扫描往往非常慢(在 20 分钟内扫描前 1000 个端口,连接良好)。因此,通常最好在启用的情况下运行 Nmap 扫描。例如,使用 .将扫描前 20 个最常用的 UDP 端口,从而获得更可接受的扫描时间。--top-ports <number>nmap -sU --top-ports 20 <target>


在扫描 UDP 端口时,Nmap 通常会发送完全空的请求——只发送原始的 UDP 数据包。也就是说,对于通常由知名服务占用的端口,它将发送特定于协议的有效载荷,该有效载荷更有可能引发响应,从中可以得出更准确的结果。

NULL、FIN 和 Xmas

NULL、FIN 和 Xmas TCP 端口扫描的使用不如我们已经介绍过的任何其他端口,因此我们不会在这里深入探讨。这三者都是相互关联的,主要使用它们,因为相对而言,它们往往比 SYN“隐身”扫描更隐蔽。从 NULL 扫描开始:

  • 顾名思义,NULL 扫描 () 是指在发送 TCP 请求时根本没有设置任何标志。根据 RFC,如果端口关闭,目标主机应使用 RST 进行响应。-sN





     
  • FIN 扫描 () 以几乎相同的方式工作;但是,不是发送完全空的数据包,而是使用 FIN 标志发送请求(通常用于正常关闭活动连接)。同样,如果端口关闭,Nmap 需要 RST。-sF





     
  • 与此类中的其他两个扫描一样,Xmas 扫描 () 发送格式错误的 TCP 数据包,并期望关闭端口的 RST 响应。它被称为圣诞扫描,因为它设置的标志(PSH、URG 和 FIN)在 Wireshark 中被视为数据包捕获时,它看起来像一棵闪烁的圣诞树。-sX

使用这些扫描的开放端口的预期响应也是相同的,并且与 UDP 扫描的响应非常相似。如果端口处于打开状态,则对格式错误的数据包没有响应。不幸的是(与打开的 UDP 端口一样),如果端口受防火墙保护,这也是一种预期行为,因此 NULL、FIN 和 Xmas 扫描只会将端口识别为打开|过滤关闭过滤。如果端口被识别为通过这些扫描之一进行过滤,则通常是因为目标已响应 ICMP 无法访问的数据包。

还值得注意的是,虽然 RFC 793 要求网络主机使用 RST TCP 数据包响应关闭端口的格式错误数据包,但根本不响应开放端口;在实践中,情况并非总是如此。特别是,众所周知,Microsoft Windows(以及许多思科网络设备)会使用RST响应任何格式错误的TCP数据包 - 无论端口是否实际打开。这会导致所有端口都显示为已关闭。

也就是说,这里的目标当然是防火墙规避。许多防火墙配置为将传入的 TCP 数据包丢弃到设置了 SYN 标志的阻止端口(从而阻止新的连接初始请求)。通过发送不包含 SYN 标志的请求,我们有效地绕过了这种防火墙。虽然这在理论上是好的,但大多数现代IDS解决方案都精通这些扫描类型,因此在处理现代系统时,不要依赖它们100%有效。

ICMP网络扫描

在黑匣子分配中首次连接到目标网络时,我们的第一个目标是获得网络结构的“映射”——或者换句话说,我们想要查看哪些 IP 地址包含活动主机,哪些不包含。

一种方法是使用 Nmap 执行所谓的“ping 扫描”。顾名思义,这完全是:Nmap 将 ICMP 数据包发送到指定网络的每个可能的 IP 地址。当它收到响应时,它会将响应的 IP 地址标记为活动。由于我们将在后面的任务中看到的原因,这并不总是准确的;但是,它可以提供一些基线,因此值得介绍。

为了执行 ping 扫描,我们将开关与 IP 范围结合使用,IP 范围可以通过 hypen () 或 CIDR 表示法指定。即,我们可以使用以下方法扫描网络:-sn-192.168.0.x

  • nmap -sn 192.168.0.1-254

  • nmap -sn 192.168.0.0/24

交换机告诉 Nmap 不要扫描任何端口,迫使它主要依靠 ICMP 回显数据包(或本地网络上的 ARP 请求,如果使用 sudo 或直接以 root 用户身份运行)来识别目标。除了 ICMP 回显请求之外,交换机还会导致 nmap 向目标的端口 443 发送 TCP SYN 数据包,以及向目标的端口 80 发送 TCP ACK(或 TCP SYN,如果不以 root 身份运行)数据包。-sn-sn

NSE 脚本概述

Nmap Scripting Engine (NSE) 是 Nmap 的一个非常强大的补充,大大扩展了它的功能。NSE 脚本是用 Lua 编程语言编写的,可用于执行各种操作:从扫描漏洞到自动利用漏洞。NSE 对于侦察特别有用,但是,值得牢记脚本库的广泛性。

有许多类别可用。一些有用的类别包括:

  • safe:- 不会影响目标
  • intrusive:- 不安全:可能影响目标
  • vuln:- 扫描漏洞
  • exploit:- 尝试利用漏洞
  • auth:- 尝试绕过正在运行的服务的身份验证(例如匿名登录 FTP 服务器)
  • brute:- 尝试暴力破解正在运行服务的凭据
  • discovery:- 尝试查询正在运行的服务以获取有关网络的更多信息(例如,查询SNMP服务器)。

可以在此处找到更详尽的列表。

在下一个任务中,我们将了解如何与 NSE 交互并利用这些类别中的脚本。

与 NSE 合作

在任务 3 中,我们非常简要地查看了用于激活类别中的 NSE 脚本的开关。其他类别以完全相同的方式工作也就不足为奇了。如果运行该命令,则将针对目标运行任何适用的安全脚本(注意:仅激活以活动服务为目标的脚本)。--scriptvuln--script=vuln--script=safe


要运行特定的脚本,我们将使用 ,例如 .--script=<script-name> --script=http-fileupload-exploiter

通过用逗号分隔多个脚本,可以以这种方式同时运行多个脚本。例如:。--script=smb-enum-users,smb-enum-shares

某些脚本需要参数(例如,如果它们利用了经过身份验证的漏洞,则需要凭据)。这些可以通过 Nmap 开关给出。这方面的一个例子是脚本(用于使用 PUT 方法上传文件)。这需要两个参数:要将文件上传到的 URL 以及文件在磁盘上的位置。例如:--script-argshttp-put

nmap -p 80 --script http-put --script-args http-put.url='/dav/shell.php',http-put.file='./shell.php'

请注意,参数用逗号分隔,并连接到带有句点(即 )的相应脚本。<script-name>.<argument>

可以在此处找到脚本及其相应参数的完整列表(以及示例用例)。


Nmap 脚本带有内置的帮助菜单,可以使用 访问。这往往不像上面给出的链接那样广泛,但是,在本地工作时它仍然很有用。nmap --script-help <script-name>

NSE 脚本搜索脚本

好的,我们知道如何在 Nmap 中使用脚本,但我们还不知道如何找到这些脚本。

为此,我们有两个选项,理想情况下应该相互结合使用。第一个是 Nmap 网站上的页面(在上一个任务中提到),其中包含所有官方脚本的列表。第二个是攻击机器上的本地存储。Nmap 将其脚本存储在 Linux 上。默认情况下,所有 NSE 脚本都存储在此目录中 -- 这是 Nmap 在指定脚本时查找脚本的位置。/usr/share/nmap/scripts

有两种方法可以搜索已安装的脚本。一种是使用文件。尽管有扩展名,但这实际上并不是一个数据库,而是一个包含每个可用脚本的文件名和类别的格式化文本文件。/usr/share/nmap/scripts/script.db

Nmap 使用此文件来跟踪(和利用)脚本引擎的脚本;但是,我们也可以通过它来查找脚本。例如:。grep "ftp" /usr/share/nmap/scripts/script.db

搜索脚本的第二种方法是使用命令非常简单。例如,我们可以使用以下方法获得与上一个屏幕截图相同的结果:lsls -l /usr/share/nmap/scripts/*ftp*

请注意在搜索词的两侧使用星号()*

同样的技术也可用于搜索脚本类别。例如:
grep "safe" /usr/share/nmap/scripts/script.db


安装新脚本

我们之前提到过,Nmap 网站包含一个脚本列表,那么,如果本地目录中缺少其中一个脚本会怎样?一个标准应该解决这个问题;但是,也可以通过从 Nmap () 下载脚本来手动安装脚本。然后必须跟进 ,这会更新文件以包含新下载的脚本。scriptssudo apt update && sudo apt install nmapsudo wget -O /usr/share/nmap/scripts/<script-name>.nse https://svn.nmap.org/nmap/scripts/<script-name>.nsenmap --script-updatedbscript.db

值得注意的是,如果你要制作自己的 NSE 脚本并将其添加到 Nmap 中,您将需要相同的 “updatedb” 命令 - 这是一项非常易于管理的任务,只需了解一些 Lua 的基本知识!

防火墙规避

我们已经看到了一些绕过防火墙的技术(想想隐身扫描,以及 NULL、FIN 和 Xmas 扫描);但是,还有另一种非常常见的防火墙配置,我们必须知道如何绕过。

典型的 Windows 主机将使用其默认防火墙阻止所有 ICMP 数据包。这就带来了一个问题:我们不仅经常使用 ping 来手动建立目标的活动,Nmap 默认情况下也会做同样的事情。这意味着 Nmap 会将具有此防火墙配置的主机注册为死主机,并且根本不会对其进行扫描。

因此,我们需要一种方法来绕过这种配置。幸运的是,Nmap 为此提供了一个选项:,它告诉 Nmap 在扫描主机之前不要打扰它。这意味着 Nmap 将始终将目标主机视为活动主机,从而有效地绕过 ICMP 块;但是,这样做的代价是可能需要很长时间才能完成扫描(如果主机确实死了,那么 Nmap 仍将检查并仔细检查每个指定的端口)。-Pn

值得注意的是,如果您已经直接在本地网络上,Nmap 还可以使用 ARP 请求来确定主机活动。


Nmap 认为还有许多其他开关可用于防火墙规避。我们不会详细介绍这些内容,但是,可以在此处找到它们。

特别需要注意以下开关:

  • -f:- 用于对数据包进行分段(即将它们拆分为更小的片段),从而降低防火墙或 IDS 检测到数据包的可能性。
  • 的替代方法,但提供了对数据包大小的更多控制:,接受用于发送数据包的最大传输单元大小。这必须是 8 的倍数。-f--mtu <number>
  • --scan-delay <time>ms:- 用于在发送的数据包之间添加延迟。如果网络不稳定,这非常有用,但对于规避任何可能存在的基于时间的防火墙/IDS 触发器也非常有用。
  • --badsum:- 这用于为数据包生成无效的校验和。任何真正的 TCP/IP 堆栈都会丢弃此数据包,但是,防火墙可能会自动响应,而无需检查数据包的校验和。因此,此开关可用于确定是否存在防火墙/IDS。
  • 总结

  • 目标 IP 是否响应 ICMP 回显 (ping) 请求 (Y/N)?

    正确答案

    对目标的前 999 个端口执行 Xmas 扫描 -- 有多少个端口显示为打开或过滤?

    正确答案

    这是有原因的——它是什么?

    注意:答案将在您的扫描结果中。仔细考虑使用哪些开关 - 并在寻求帮助之前阅读提示!

    正确答案提示

    对目标的前 5000 个端口执行 TCP SYN 扫描 -- 有多少个端口显示为打开?

    正确答案

    打开 Wireshark(有关说明,请参阅 Cryillic 的 Wireshark Room)并对目标上的端口 80 执行 TCP Connect 扫描,监视结果。确保您了解正在发生的事情。针对该框部署 脚本。Nmap能否在21端口成功登录FTP服务器?(是/否)ftp-anon

    正确答案

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

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

相关文章

Linux使用Docker部署DashDot访问本地服务器面板

文章目录 1. 本地环境检查1.1 安装docker1.2 下载Dashdot镜像 2. 部署DashDot应用 本篇文章我们将使用Docker在本地部署DashDot服务器仪表盘&#xff0c;并且结合cpolar内网穿透工具可以实现公网实时监测服务器系统、处理器、内存、存储、网络、显卡等&#xff0c;并且拥有API接…

牛客NC233 加起来和为目标值的组合(四)【中等 DFS C++、Java、Go、PHP】

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/7a64b6a6cf2e4e88a0a73af0a967a82b 解法 dfs参考答案C class Solution {public:/*** 代码中的类名、方法名、参数名已经指定&#xff0c;请勿修改&#xff0c;直接返回方法规定的值即可*** param nums int整型…

【从浅学到熟知Linux】进程间通信之匿名管道方式(进程间通信方式汇总、匿名管道的创建、匿名管道实现进程池详解)

&#x1f3e0;关于专栏&#xff1a;Linux的浅学到熟知专栏用于记录Linux系统编程、网络编程等内容。 &#x1f3af;每天努力一点点&#xff0c;技术变化看得见 文章目录 进程间通信介绍如何实现进程间通信进程间通信分类 管道通信方式什么是管道匿名管道pipe匿名管道读写规则管…

TQZC706开发板教程:编译zynq linux内核2019_R1

您需要下载对应版本的Linux系统文件以及IMG1.3.1镜像文件。为了方便您的操作&#xff0c;本文所使用的所有文件以及最终生成的文件&#xff0c;我都已经整理并放置在本文末尾提供的网盘链接中。您可以直接通过该链接进行下载&#xff0c;无需在其他地方单独搜索和获取。希望这能…

spring aop介绍

Spring AOP&#xff08;面向切面编程&#xff09;是一种编程范式&#xff0c;它允许开发者将横切关注点&#xff08;cross-cutting concerns&#xff09;从业务逻辑中分离出来&#xff0c;从而提高代码的模块化。在传统的对象导向编程中&#xff0c;这些横切关注点&#xff0c;…

Vue2进阶之Vue2高级用法

Vue2高级用法 mixin示例一示例二 plugin插件自定义指令vue-element-admin slot插槽filter过滤器 mixin 示例一 App.vue <template><div id"app"></div> </template><script> const mixin2{created(){console.log("mixin creat…

MySql 安装教程+简单的建表

目录 1.安装准备 1.MySQL官方网站下载 2.安装步骤 3.测试安装 4.简单的建表 1.安装准备 1.MySQL官方网站下载 下载安装包或者压缩包都可以 选择相应版本&#xff0c;点击Download开始通过网页下载到本地&#xff08;压缩包下载快一些&#xff09; 2.安装步骤 双击此.exe…

c++ - 类与对象 - explicit关键字 | static成员 | 友元 | 内部类 | 匿名对象

文章目录 一、 explicit关键字二、static成员三、友元四、内部类五、匿名对象 一、 explicit关键字 1、隐式类型转换 再进行隐式类型转换是会产生一个临时变量tmp,再用临时变量进行赋值。 如&#xff1a; double d 1.2; //再用 d 给 i 进行赋值时&#xff0c;会进行隐式类型…

面向对象设计与分析40讲(25)中介模式、代理模式、门面模式、桥接模式、适配器模式

文章目录 门面模式代理模式中介模式 之所以把这几个模式放到一起写&#xff0c;是因为它们的界限比较模糊&#xff0c;结构上没有明显的差别&#xff0c;差别只是语义上。 这几种模式在结构上都类似&#xff1a; 代理将原本A–>C的直接调用变成&#xff1a; A–>B–>…

探索RadSystems:低代码开发的新选择(二)

系列文章目录 探索RadSystems&#xff1a;低代码开发的新选择&#xff08;一&#xff09;&#x1f6aa; 文章目录 系列文章目录前言一、RadSystems Studio是什么&#xff1f;二、用户认证三、系统角色许可四、用户记录管理五、时间戳记录总结 前言 在数字化时代&#xff0c;低…

HoloLens2的Unity应用在电脑上发布成安装包,然后通过wifi安装到设备

一、VS工程中的鼠标右键 二、发布——>创建应用程序包 三、选择【旁加载】 四、选择签名方法&#xff1a; 五、选择和配置包 六、创建完毕 七、网络连接设备 八、登录设备 九、安装app

基于springboot实现的摄影跟拍预定管理系统

开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven…

OpenHarmony实战开发-合理选择条件渲染和显隐控制。

开发者可以通过条件渲染或显隐控制两种方式来实现组件在显示和隐藏间的切换。本文从两者原理机制的区别出发&#xff0c;对二者适用场景分别进行说明&#xff0c;实现相应适用场景的示例并给出性能对比数据。 原理机制 条件渲染 if/else条件渲染是ArkUI应用开发框架提供的渲…

实现Spring底层机制(阶段1—编写自己的Spring容器,扫描包,得到bean的Class对象)

环境搭建抛出问题 1.环境搭建 1.创建maven项目 2.导入依赖 <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 http://maven.ap…

RK3568 学习笔记 : u-boot 通过 tftp 网络更新 u-boot自身

前言 开发板型号&#xff1a; 【正点原子】 的 RK3568 开发板 AtomPi-CA1 使用 虚拟机 ubuntu 20.04 收到单独 编译 RK3568 u-boot 使用 rockchip Linux 内核的设备树 【替换】 u-boot 下的 rk3568 开发板设备树文件&#xff0c;解决 u-boot 下千兆网卡设备能识别但是无法 Pi…

MQTT服务器EMQX的安装和使用(Windows)

一、下载地址&#xff1a; 下载 EMQX 二、安装环境&#xff1a; Windows Server2016 16G 500G 三、启动服务&#xff1a; 下载文件解压后放入以下目录&#xff08;注意&#xff0c;目录名一定是英文&#xff0c;否则会造成启动不成功&#xff01;&#xff09;&#xff1a…

Linux部署Coturn以及关于打洞的思考

目录 Coturn介绍部署架构图 2.1 局域网——无NAT映射 2.2 NAT网Corturn安装步骤验证 4.1 局域网——无NAT映射 4.2 NAT网 4.2.1 Cywin安装步骤 4.2.2 Coturn安装步骤 4.2.3 验证引言 下文部署架构图为Corturn为解决互联网NAT环境下“找朋友”的部署架构,也是Coturn发挥其价值…

C# 给图片添加文字水印

目录 应用场景 开发运行环境 方法说明 方法代码 调用示例 小结 应用场景 在某些应用项目&#xff08;如电子档案信息管理&#xff09;中&#xff0c;查看电子图片信息是经常使用到的功能&#xff0c;此时我们就需要给显示在浏览器中的图片添加文字水印版权或提示信息。…

Oracle EBS Interface/API(54)- GL日记账审批

背景: 客户化创建薪酬凭证或者银企付款入账日记账以后,用户希望自动提交审批流程,无需到系统标准功能点击审批,减少用户操作。 快速参考 参考点内容功能导航N: GL->日记账->输入并发请求None基表GL.GL_JE_BATCHESAPI参考下面介绍错误信息表None接口FormNone接口Reque…

PLSQL数据库

目录 什么是PLSQL数据库 PL数据库的实现方法 PL数据库的基本语法 1.作用 2.语法 3.赋值输出 4.引用 5.异常处理 6.if 判断 7.loop循环 8.while循环 9.for循环 10.游标 11.参数游标 12.索引 13.分区表 什么是PLSQL数据库 PL/SQL&#xff08;Procedure Language/…