当前位置: 首页 > news >正文

Nmap基础入门及常用命令汇总

Nmap基础入门

免责声明:本文单纯分享技术,请大家使用过程中遵守法律法规~

在这里插入图片描述

介绍及安装

nmap是网络扫描和主机检测的工具。作为一个渗透测试人员,必不可少的就是获取信息。那么nmap就是我们从互联网上获取信息的途径,我们可以扫描互联网上哪个IP暴露了哪些端口。

nmap主要功能:

  1. 主机发现:发现网络上活跃的主机
  2. 端口扫描:发现目标主机开放了哪些端口
  3. 服务识别:识别目标主机具体运行的服务和应用程序的版本号
  4. 操作系统检测:检测目标主机操作系统类型及版本,用于判断漏洞(特定版本的操作系统存在特定漏洞,可以利用)。
  5. 执行脚本扫描:支持执行用户自定义脚本进行扫描
  6. 输出格式:nmap扫描结果支持通过文本、XML、JSON等存储

nmap是一款非常灵活、强大的工具,它在安全团队、渗透测试人员和网络管理员之间广泛使用。我们在使用时,需要遵循相关法律法规和道德准则。

  • 官网:https://nmap.org/
  • 下载:https://nmap.org/download.html。nmap是跨平台的,不论是在mac、linux、windows都可以使用。如果我们有kali,可以直接使用(kali自带nmap工具)。
    在这里插入图片描述

基础知识点

端口状态(6种:open、closed、filtered、unfiltered、open|filtered、closed|filtered)

  1. open 开放的:该端口上的应用程序成功接收TCP、UDP报文并响应
  • TCP:nmap 发起两个 SYN 的请求,服务器上监听在此端口的进程会进行应答,会返回 SYN/ACK, nmap 收到服务端返还回来的应答后会发送两个 RST ,并不会和服务端建立通信连接,完成端口的探测。
  • UDP:nmap 向目标端口发起两个 UDP 报文,服务端对报文进行应答,nmap 收到应答,将该端口标记为 open。
  1. closed 关闭的:
  • TCP:nmap 发起两个 SYN 的请求,服务器上由于没有进程监听该端口,内核会返回 RST, nmap 收到服务端返还回来的 RST 报文,将探测结果定义为 closed 。
  • UDP:nmap 会发送两个一模一样的 UDP 请求,服务端收到请求后会给 nmap 返回一个 type=3 code=3 的 ICMP 报文,意思是访问的端口不可达, nmap 标记此端口是关闭状态。
  1. filtered 被过滤的:
  • TCP:这种情况是服务端将收到的 nmap SYN 报文直接丢弃,不进行应答, 由于 nmap 直接发送了两个 SYN 报文,都没有收到应答,所以认定服务端开启了防火墙,将 SYN 报文丢弃。
  • UDP:这个一般指 TCP 端口扫描,参见上面的描述。
  1. unfiltered 未被过滤的:
  • nmap 默认进行的是 SYN 扫描,当用 -sA 选项( TCP ACK 扫描),连续发送两个同样的 ACK 报文,由于 snmp 确认收到了一个服务端根本没有发送的报文,所以服务端会发送一个 RST 报文, snmp 收到服务端发送来的 RST 报文后,确认服务端没有对报文进行丢弃处理,注意本探测不能发现端口是开放还是关闭状态,只能确认探测的报文服务端已收到,并回复给了 snmp RST报文。
  • UDP:这个一般指 TCP 端口扫描,参见上面的描述。
  1. open|filtered 开放或者被过滤的:
  • TCP:这种状态主要是 nmap 无法区别端口处于 open 状态还是 filtered 状态。这种状态长出现于 UDP 端口,参考后续 UDP 中的解释。
  • UDP:这种状态主要是 nmap 无法区别端口处于 open 状态还是 filtered 状态。这种状态是服务端对 nmap 的请求不做任何回应,导致 nmap 无法确认端口是那种状态。
  1. closed|filtered 关闭或者被过滤的:

TCP连接扫描和端口状态

# 扫描该目标下1000个常用TCP端口
nmap -sT 127.16.176.130

tcp建立连接通常需要三次握手四次挥手,且四次挥手最后需要发送FIN标志,nmap -sT不论目标主机发送什么,最后都会返回RST。没有实现优雅的告别。
缺点:

  1. 耗时长:建立连接需要三次握手四次挥手
  2. 留痕:通信会被目标主机记录,主机通常会对完成握手的会话进行日志的记录,会留下扫描的痕迹

优势:

  • 只要目标主机发送了SYN 、ACK包,nmap就会标记这个端口是开放状态;
  • 如果目标主机返回的是RST包,nmap则会标识该端口为closed状态
  • 如果目标主机没有返回任何包,此时返回的包可能被防火墙阻挡了,nmap会标记端口为filtered(被过滤)状态

SYN扫描:-sS(半链接、半开扫描)

为了解决留痕的问题,可以使用-sS参数进行扫描

  • 当收到目标主机发送的 SYN ACK时,nmap不会返回FIN,不会走完所有流程,而是直接返回RST。相当于你给别人打电话,问别人是不是叫xxx,别人回复确认,此时你给别人回复我打错了,虽然你后续没有别人继续通信,但此时你已经确认了对方的身份。
  • 有人可能会疑惑,这里能否不返回RST包给目标主机?
  • 答:不行,因为如果不返回RST包,目标主机会认为我们上一轮没有收到SYN ACK包而不断重传

nmap -sS ip:没有完成整个握手过程,因此被称为半连接扫描、半开扫描。

优势:

  1. 效率高:中途就直接返回RST,不会走完握手整个流程
  2. 不易留痕:不走完握手流程,目标服务器保留日志概率低

注意:执行该命令需要添加sudo或拥有root权限。

TCP扫描:nmap 目标主机IP
SYN扫描:sudo nmap 目标主机IP

UDP扫描

udp没有ack这样的确认机制,只能依靠目标主机的回复做出判断
对于大部分端口,nmap发送的数据包都没有负载,对方相当于收到一个空红包🧧,这样的数据包一般不会收到目标主机的回复,并且如果防火墙丢了我们的包,一般也不会做出回复(但如果UDP端口关闭了,一般会返回类型为3的ICMP包,表示目标主机不可达)。因此我们在使用udp扫描时,会经常看到open|filtered一起显示,此时端口可能开放了,也可能被防火墙阻挡了。

  • 如何判断udp端口是开放还是关闭?
    小技巧:nmap -sUV (V参数会进行版本扫描,nmap会在open|filtered端口中做探测,确认运行的软件版本,从而明确端口的开放状态)

缺点:

  1. 慢:大部分场景目标主机都不会回复数据包或因为防火墙等诸多因素,导致同一端口nmap一般会出现多次请求的情况。

建议:

  1. 配合其他参数使用:nmap -sUV --top-ports 100 扫描常用的100个UDP端口

ICMP和Ping扫描

# 扫描范围(ping扫描)
nmap -sn 192.168.0.1-100# 通过CIDR方式指定范围
nmap -sn 192.168.0.0/24

不论是本地还是远程的网络,我们都可以使用-sn来扫描:

  • 本地:扫描本地网络使用了ARP协议进行请求
  • 远程:扫描远程网络使用了ICMP协议,还会利用TCP SYN和TCP ACK进行主机发现

但对于windows server来说(如:2016、2019、2022版本),防火墙默认会关闭所有ICMP包,此时如果继续使用nmap -sn就走不通了,进入了死胡同。

  • nmap -Pn 目标:表明不使用ping进行探测扫描,以此来绕过防火墙的阻挡,但该命令会很消耗时间,因为nmap默认会认为该主机在运行状态,如果目标主机没有运行,会导致nmap进行重复探测。

使用

主机扫描: nmap ip (TCP/UDP端口)

注意:

  1. 这种方式只会扫描1000个常用的tcp端口
    • 扫描目标所有端口:nmap -p- 127.16.176.130
  2. 这种方式只会扫描tcp端口
    • nmap -sT 127.16.176.130:扫描TCP端口
    • nmap -sU 127.16.176.130:扫描UDP端口
# 扫描特定主机(默认只会扫描1k个常用的端口)
nmap 127.16.176.130# 扫描特定主机所有端口(仅扫描TCP端口)
nmap -p- 127.16.176.130# 扫描UDP端口,需使用-s参数
nmap -sU 127.16.176.130# 扫描ip范围内主机
nmap 127.16.176-180# 组合扫描,组合项之后用空格分隔
nmap 127.16.176.130 127.16.176-180# 扫描网段
nmap 127.16.176.1/24# 过滤IP扫描
nmap 127.16.176.1/24 -exclude 127.16.176.130# SYN扫描(半连接扫描),避免留痕,执行命令需要sudo(root权限)
sudo nmap -sS ip# TCP扫描:nmap 目标主机IP:走完全过程,但耗时长,且会留下痕迹
# SYN扫描:sudo nmap 目标主机IP:不走完全过程,效率高,不易在目标机器上留痕

在这里插入图片描述

端口扫描:nmap ip -p 端口号

# 扫描特定主机的特定端口
nmap 127.16.176.130 -p 3389# 扫描范围端口
nmap 127.16.176.130 -p 1-100

在这里插入图片描述

识别服务版本:nmap ip -p 端口号 -sV

# 想要识别服务版本,我们可以使用-sV参数(serviceVersion)
nmap 39.156.66.x -p 443 -sV 

在这里插入图片描述

识别操作系统版本:nmap ip -O

-O (OS operating system 操作系统)

# 识别操作系统可以通过-O参数(os),需要root权限
nmap 39.156.66.x -O

在这里插入图片描述

常用命令汇总

获取远程主机系统类型及开放端口:nmap -sS -P0 -A -v < target >

nmap -sS -Pn -sV -O 192.168.1.1
nmap -sS -Pn -A -v 192.168.1.1-sS:执行TCP SYN扫描(半连接扫描),它不会建立完整的TCP连接,更隐蔽,效率高
-Pn:表示跳过主机发现阶段,即假设所有主机都是开启的。
-sV:尝试检测服务版本。
-O:启用操作系统检测。
-A:启用操作系统检测、版本检测、脚本扫描和 traceroute。
-v:增加详细程度,提供更详细的输出。

列出开放了指定端口的主机列表:nmap -sT -p 80 -oG - 10.0.1.0/24 | grep open

nmap -sT -p 80 -oG - 10.0.1.0/24 | grep open-sT:进行TCP connect()扫描,这会完成整个TCP三次握手过程。
-p 80:指定要扫描的端口号。
-oG -:以grepable格式输出结果到标准输出。
| grep open:通过管道符过滤出包含“open”的行。
注意:CIDR表示法,10.0.1.0/24来表示子网。

在网络寻找所有在线主机:nmap -sn 10.0.1.0/24

nmap -sn 10.0.1.0/24-sn:(旧版为-sP)只进行ping扫描,不进行端口扫描。

在局域网上扫找 Conficker 蠕虫病毒:nmap -PN -T4 -p139,445 -n -v --script=smb-check-vulns --script-args safe=1 10.0.1.1-254

nmap -PN -T4 -p139,445 -n -v --script=smb-check-vulns --script-args safe=1 10.0.1.1-254-PN:等同于-Pn,忽略ping的结果。
-T4:设置速度模板为激进模式(级别有:0-5,越高扫描速度越快,但准确度)。
-p139,445:指定扫描的端口。
-n:禁用DNS解析。
--script=smb-check-vulns:使用Nmap脚本引擎(NSE)中的脚本来检查SMB漏洞。
--script-args safe=1:传递给脚本的参数,这里是指安全模式

使用诱饵扫描方法来扫描主机端口:sudo nmap -sS 10.0.1.10 -D 10.0.1.11

sudo nmap -sS 10.0.1.10 -D 10.0.1.11,10.0.1.12-D:定义诱饵IP地址,可以用来混淆目标机器的日志记录,可以添加多个诱饵IP,用逗号分隔

常用参数

# -iL 从文件中读取目标主机或网络列表
nmap -iL targets.txt# -sS SYN扫描,又称半开放扫描(TCP SYN 扫描,又称半开放,或隐身扫描。不容易被注意,不留日志。建立一个不完全的TCP,发送一个SYN报文。)
nmap -sS 192.168.1.1# 允许你关闭 ICMP pings
nmap -Pn 192.168.1.1# -sV 打开服务版本检测
nmap -sV 192.168.1.1# -O 尝试识别远程操作系统
nmap -O 192.168.1.1# -A 全⾯系统检测、启⽤脚本检测、扫描、traceroute等
nmap -A 192.168.1.1# -v 增加详细程度,提供更详细的输出。可以多次使用以增加详细程度(如-vv)  
nmap -v 192.168.1.1# -p  指定端口。可以是一个端口号、范围或多个端口(用逗号分隔)
nmap -p 80,443 192.168.1.1
nmap -p 1-1024 192.168.1.1# -sn 只进行ping扫描,不进行端口扫描。用于查找在线主机
nmap -sn 192.168.1.0/24  # -sT TCP扫描,当SYN扫描不能用时,默认是TCP扫描。(会留下错误信息和记录,而-sS是最好选择。)
nmap -sT 192.168.1.1# -sU UDP扫描,UDP扫描是不可靠的,速度也慢,但有时是必要的
nmap -sU 192.168.1.1# -sA 用于发现防火墙,不能确定端口是否开放,只能确定是否有状态,是否被过滤。
nmap -sA 192.168.1.1# -Pn 扫描之前不使用ping命令,跳过主机发现阶段,即假设所有主机都是开启的。在有防火墙时比较有用
nmap -Pn 192.168.1.1# --script 使用Nmap脚本引擎(NSE)中的脚本进行扩展扫描,下面是用于检查目标主机是否有常见漏洞
nmap --script=vuln 192.168.1.1
## auth: 负责处理鉴权证书(绕开鉴权)的脚本  
## broadcast: 在局域网内探查更多服务开启状况,如dhcp/dns/sqlserver等服务  
## brute: 提供暴力破解方式,针对常见的应用如http/snmp等  
## default: 使用-sC或-A选项扫描时候默认的脚本,提供基本脚本扫描能力  
## discovery: 对网络进行更多的信息,如SMB枚举、SNMP查询等  
## dos: 用于进行拒绝服务攻击  
## exploit: 利用已知的漏洞入侵系统  
## external: 利用第三方的数据库或资源,例如进行whois解析  
## fuzzer: 模糊测试的脚本,发送异常的包到目标机,探测出潜在漏洞 intrusive: 入侵性## 的脚本,此类脚本可能引发对方的IDS/IPS的记录或屏蔽  
## malware: 探测目标机是否感染了病毒、开启了后门等信息  
## safe: 此类与intrusive相反,属于安全性脚本  
## version: 负责增强服务与版本扫描(Version Detection)功能的脚本  
## vuln: 负责检查目标机是否有常见的漏洞(Vulnerability),如是否有MS08_067# -T 设置扫描速度模板,范围从0(最慢)到5(最快),数字越大越快,也越容易被发现
## T0(paranoid)极其缓慢,每次探测之间的延迟为5分钟。适用于需要最小化网络流量或避免检测的情况
## T1(sneaky) 非常缓慢,每次探测之间的延迟为15秒。适用于低带宽或隐蔽扫描
## T2(polite)较慢,每次探测之间的延迟为400毫秒。默认情况下使用此模板,以减少对目标网络的影响。
## T3(normal)默认模板,无额外延迟。适合大多数常规扫描。
## T4(aggressive)快速,减少超时时间并增加并发度。适用于快速完成扫描,但可能会更引人注意。
## T5(insane)极快,将最大并发任务数提高到1024,并将超时时间缩短到100毫秒。仅适用于高带宽、低延迟网络。
nmap -T4 192.168.1.1# -D 定义诱饵IP地址,可以用来混淆目标机器的日志记录
nmap -D 192.168.1.10,192.168.1.11 192.168.1.1# --min-rtt-timeout, --max-rtt-timeout, --initial-rtt-timeout:设置RTT(往返时间)超时值  
nmap --min-rtt-timeout 100ms --max-rtt-timeout 2000ms --initial-rtt-timeout 300ms 192.168.1.0/24# --host-timeout 设置单个主机的超时时间
nmap --host-timeout 20m 192.168.1.0/24# -max-retries  设置重试次数
nmap --max-retries 3 192.168.1.0/24# --max-scan-delay 设置最大扫描延迟
nmap --max-scan-delay 1000ms 192.168.1.0/24

参考文章:
https://blog.csdn.net/zyqash/article/details/122986256
https://nmap.org/book/performance-timing-templates.html

相关文章:

Nmap基础入门及常用命令汇总

Nmap基础入门 免责声明&#xff1a;本文单纯分享技术&#xff0c;请大家使用过程中遵守法律法规~ 介绍及安装 nmap是网络扫描和主机检测的工具。作为一个渗透测试人员&#xff0c;必不可少的就是获取信息。那么nmap就是我们从互联网上获取信息的途径&#xff0c;我们可以扫描互…...

【gopher的java学习笔记】spring web接口404了怎么办

今天新搭了一个spring boot带spring web的工程&#xff0c;不得不说&#xff0c;这java的生态是比golang要齐全一点&#xff0c;各种脚手架工程应有尽有。 因为我们的目标是有个web service&#xff0c;所以spring boot的工程搭好之后&#xff0c;就寻思着给这个spring应用添加…...

constexpr 的概念及用途

constexpr 的概念及用途 constexpr 是 C11 引入的关键字&#xff0c;用于定义常量表达式。常量表达式是指在编译时能够求值的表达式&#xff0c;也就是说&#xff0c;constexpr 用来标识那些编译器在编译时就可以计算结果的变量、函数或对象。 constexpr 在 C 中非常重要&…...

开放世界目标检测 Grounding DINO

开放世界目标检测 Grounding DINO flyfish Grounding DINO 是一种开创性的开放集对象检测器&#xff0c;它通过结合基于Transformer的检测器DINO与基于文本描述的预训练技术&#xff0c;实现了可以根据人类输入&#xff08;如类别名称或指代表达&#xff09;检测任意对象的功…...

【Spring】基于XML的Spring容器配置—— <import>标签的使用

Spring容器是Spring框架的核心部分&#xff0c;负责管理应用程序中的对象及其生命周期。Spring容器的配置方式有多种&#xff0c;其中基于XML的配置方式仍然被广泛使用&#xff0c;尤其是在一些老旧项目中。本文将详细介绍Spring容器配置中的<import>标签的使用&#xff…...

GemPy 3 地质建模快速入门指南

GemPy 3简介 GemPy 3是一款基于Python的开源三维结构地质建模软件。 GemPy 3由德国的Terranigma Solutions公司维护&#xff0c;并在GitHub上进行开源开发。它允许用户从界面和方向数据中自动创建复杂的地质模型&#xff0c;并支持随机建模以解决参数和模型不确定性问题。新版…...

智慧农业物联网传感器:开启农业新时代

在当今科技飞速发展的时代&#xff0c;农业领域正经历着一场前所未有的变革&#xff0c;而智慧农业物联网传感器无疑是这场变革中的关键利器。它宛如农业的 “智慧大脑”&#xff0c;悄然渗透到农业生产的各个环节&#xff0c;为传统农业注入了全新的活力&#xff0c;让农业生产…...

Spring Boot应用开发实战:从入门到精通

一、Spring Boot 简介 1.1 什么是 Spring Boot&#xff1f; Spring Boot 是一个开源框架&#xff0c;旨在简化新 Spring 应用的初始搭建以及开发过程。它构建在 Spring 框架之上&#xff0c;利用了 Spring 的核心特性&#xff0c;如依赖注入&#xff08;Dependency Injection&…...

salesforce Controlled by Parent 的对象如何实现部分情况 Parent可见,但是 该对象不可见

在 Salesforce 中&#xff0c;设置对象的访问控制为“Controlled by Parent”时&#xff0c;该对象的可见性通常由其主对象&#xff08;Parent&#xff09;的共享规则或权限决定。如果主对象可见&#xff0c;子对象也会自动继承可见性。然而&#xff0c;有时候我们希望实现一些…...

React 第二十节 useRef 用途使用技巧注意事项详解

简述 useRef 用于操作不需要在视图上渲染的属性数据&#xff0c;用于访问真实的DOM节点&#xff0c;或者React组件的实例对象&#xff0c;允许直接操作DOM元素或者是组件&#xff1b; 写法 const inpRef useRef(params)参数&#xff1a; useRef(params)&#xff0c;接收的 …...

TCP/IP 邮件

TCP/IP邮件是互联网通信中非常重要的应用之一。当我们发送电子邮件时&#xff0c;我们实际上并没有直接使用TCP/IP协议&#xff0c;而是通过电子邮件程序&#xff0c;例如微软的Outlook、莲花软件的Notes或Netscape Communicator等来实现。这些电子邮件程序背后使用了不同的TCP…...

前缀和与差分

目录 前缀和 一维前缀和 二维前缀和 差分 一维差分 二维差分 进阶练习NOIP普及组与提高组 前缀和 前缀和是一种思想&#xff0c;代码短小精悍是它的特点。相比于数据较大时的从头至尾遍历和优化过的双指针方法来求区间和&#xff0c;前缀和在对于数据进行处理的速度上有…...

2024国赛A问题5

问题五 龙头最大速度优化模型的建立 问题五在问题四的曲线的基础上对速度进行了约束&#xff0c;即在逐步改变龙头速度的情况下&#xff0c;各个龙身的速度也会依次改变&#xff0c;给出龙头的最大行进速度,使得舞龙队各把手的速度均不超过 2 m/s。即可依此构建一个龙头速度的…...

香橙派5Plus启动报错bug: spinlock bad magic on cpu#6, systemd-udevd/443

一、问题 如图&#xff1a; 接上调试串口&#xff0c;每次启动都会报错。不过使用过程中没有发现有什么影响。 百度查阅&#xff0c;有一位博主提到&#xff0c;但是没有细说解决方案&#xff1a; spinlock变量没有初始化_spinlock bad magic on-CSDN博客https://blog.csdn.n…...

MySQL 常用程序介绍

以下是一些常用的MySQL程序&#xff1a; 程序名作⽤mysqldMySQL的守护进程即 MySQL 服务器&#xff0c;要使⽤MySQL 服务器 mysqld必须正在运⾏状态mysql MySQL客⼾端程序&#xff0c;⽤于交互式输⼊ SQL 语句或以批处理模式从⽂件执⾏SQL的命令⾏⼯具 mysqlcheck⽤于检查、修…...

DevOps实战:用Kubernetes和Argo打造自动化CI/CD流程(1)

DevOps实战&#xff1a;用Kubernetes和Argo打造自动化CI/CD流程&#xff08;1&#xff09; 架构 架构图 本设计方案的目标是在一台阿里云ECS服务器上搭建一个轻量级的Kubernetes服务k3s节点&#xff0c;并基于Argo搭建一套完整的DevOps CI/CD服务平台&#xff0c;包括Argo CD…...

RBAC模型

RBAC模型 1.概念 RBAC&#xff1a;role based access control&#xff0c;基于角色的权限控制 三个主体 - 用户 - 角色 - 权限 授权的本质是对用户授权角色&#xff0c;假设系统的用户数量特别多的话可以对用户设置用户组。 2.RBAC表基本设计 用户表 角色表 权限表 …...

CultureLLM 与 CulturePark:增强大语言模型对多元文化的理解

本文介绍团队刚刚在加拿大温哥华召开的顶会NeurIPS 2024上发表的两篇系列工作&#xff1a;CultureLLM 和CulturePark。此项研究以生成文化数据并训练文化专有模型为主要手段&#xff0c;旨在提升已有基础模型的多文化理解能力&#xff0c;使得其在认知、偏见、价值观、在线教育…...

sentinel学习笔记6-限流降级(上)

本文属于sentinel学习笔记系列。网上看到吴就业老师的专栏&#xff0c;写的好值得推荐&#xff0c;我整理的有所删减&#xff0c;推荐看原文。 https://blog.csdn.net/baidu_28523317/category_10400605.html sentinel 实现限流降级、熔断降级、黑白名单限流降级、系统自适应…...

redis cluster集群

华子目录 什么是redis集群redis cluster的体系架构什么是数据sharding&#xff1f;什么是hash tag集群中删除或新增节点&#xff0c;数据如何迁移&#xff1f;redis集群如何使用gossip通信?定义meet信息ping消息pong消息fail消息&#xff08;不是用gossip协议实现的&#xff0…...

设计模式从入门到精通之(二)抽象工厂模式

抽象工厂模式&#xff1a;不同工厂背后的协作秘密 在上一期中&#xff0c;我们聊到了工厂模式&#xff0c;讲述了如何用一家咖啡店来帮我们制作不同类型的咖啡。那么&#xff0c;如果你不仅需要咖啡&#xff0c;还需要配套的甜品&#xff0c;比如蛋糕或饼干&#xff0c;这时应该…...

LeetCode:404.左叶子之和

跟着carl学算法&#xff0c;本系列博客仅做个人记录&#xff0c;建议大家都去看carl本人的博客&#xff0c;写的真的很好的&#xff01; 代码随想录 LeetCode&#xff1a;404.左叶子之和 给定二叉树的根节点 root &#xff0c;返回所有左叶子之和。 示例 1&#xff1a; 输入: …...

Java包装类型的缓存

Java 基本数据类型的包装类型的大部分都用到了缓存机制来提升性能。 Byte,Short,Integer,Long 这 4 种包装类默认创建了数值 [-128&#xff0c;127] 的相应类型的缓存数据&#xff0c;Character 创建了数值在 [0,127] 范围的缓存数据&#xff0c;Boolean 直接返回 True or Fal…...

2024网络安全学习路线 非常详细 推荐学习

关键词&#xff1a;网络安全入门、渗透测试学习、零基础学安全、网络安全学习路线 首先咱们聊聊&#xff0c;学习网络安全方向通常会有哪些问题 1、打基础时间太长 学基础花费很长时间&#xff0c;光语言都有几门&#xff0c;有些人会倒在学习 linux 系统及命令的路上&#xff…...

【ES6复习笔记】数值扩展(16)

介绍 在 JavaScript 中&#xff0c;数值扩展提供了一些额外的功能&#xff0c;使得处理数值变得更加方便。本教程将介绍一些常用的数值扩展方法和属性。 1. Number.EPSILON Number.EPSILON 是 JavaScript 表示的最小精度。它的值接近于 2.2204460492503130808472633361816E-…...

【mybatis】详解 # 和 $ 的区别,两者分别适用于哪种场景,使用 $ 不当会造成什么影响

# 和 $ 的区别 在MyBatis中&#xff0c;# 和 $ 是用来处理参数的两种不同方式&#xff0c;它们之间有一些重要的区别&#xff1a; # 符号&#xff1a; # 是用来进行参数占位符的&#xff0c;它会进行 SQL 注入防护。使用 # 时&#xff0c;MyBatis 会将参数值进行预处理&…...

【MySQL】索引 面试题

文章目录 适合创建索引的情况创建索引的注意事项MySQL中不适合创建索引的情况索引失效的常见情况 索引定义与作用 索引是帮助MySQL高效获取数据的有序数据结构&#xff0c;通过维护特定查找算法的数据结构&#xff08;如B树&#xff09;&#xff0c;以某种方式引用数据&#xf…...

QT调用Sqlite数据库

QT设计UI界面&#xff0c;后台访问数据库&#xff0c;实现数据库数据的增删改查。 零售商店系统 数据库表&#xff1a; 分别是顾客表&#xff0c;订单详情表&#xff0c;订单表&#xff0c;商品表 表内字段详情如下&#xff1a; 在QT的Pro文件中添加sql&#xff0c;然后添加头…...

Flutter富文本实现学习

Flutter 代码如何实现一个带有富文本显示和交互的页面。 前置知识点学习 RealRichText RealRichText 和 ImageSpan 不是 Flutter 框架中内置的组件&#xff0c;而是自定义的组件或来自第三方库。这些组件的实现可以提供比标准 RichText 更丰富的功能&#xff0c;比如在富文本…...

实现某海外大型车企(T)Cabin Wi-Fi 需求的概述 - 4

大家好&#xff0c;我是Q&#xff0c;邮箱&#xff1a;1042484520qq.com。 今天我们在上几讲的基础上再扩展下 Cabin Wi-Fi 的功能需求&#xff0c;讲讲如何使能 5G TCU Wi-Fi STA Bridge 模式。 参考&#xff1a; 实现某海外大型车企&#xff08;T&#xff09;Cabin Wi-Fi 需求…...

【GeekBand】C++设计模式笔记15_Proxy_代理模式

1. “接口隔离” 模式 在组件构建过程中&#xff0c;某些接口之间直接的依赖常常会带来很多问题&#xff0c;甚至根本无法实现。采用添加一层间接&#xff08;稳定&#xff09;接口&#xff0c;来隔离本来互相紧密关联的接口是一种常见的解决方案。典型模式 FacadeProxyAdapte…...

项目练习:若依系统的svg-icon功能实现

文章目录 一、svg图片准备二、自定义Svg组件三、svg插件开发四、Svg组件使用 一、svg图片准备 src/assets/icons/svg 其中svg目录里&#xff0c;存放了所需要的图片 index.js import Vue from vue import SvgIcon from /components/SvgIcon// svg component// register glob…...

【踩坑/Linux】Vmware中的Ubuntu虚拟机无法访问互联网

Vmware中的Ubuntu虚拟机无法访问互联网 首先前提是我的系统是Ubuntu 16.04系统&#xff0c;vmware workstation选择的是NAT模式&#xff0c;虚拟机内连不上网络 ping www.baidu.com ping: unknown host www.baidu.com首先检查 DNS 解析服务&#xff1a;在虚拟机中打开命令提示…...

深入了解SpringIoc(续篇)

目录 注入 Bean 的方式有哪些? 构造函数注入还是 Setter 注入? Bean 的作用域有哪些? Bean 是线程安全的吗? Bean 的生命周期了解么? 注入 Bean 的方式有哪些? 依赖注入 (Dependency Injection, DI) 的常见方式&#xff1a; 构造函数注入&#xff1a;通过类的构造函…...

嵌入式硬件面试题

1、请问什么是通孔、盲孔和埋孔&#xff1f;孔径多大可以做机械孔&#xff0c;孔径多小必须做激光孔&#xff1f;请问激光微型孔可以直接打在元件焊盘上吗&#xff0c;为什么&#xff1f; 通孔是贯穿整个PCB的过孔&#xff0c;盲孔是从PCB表层连接到内层的过孔&#xff0c;埋孔…...

散斑/横向剪切/迈克尔逊/干涉条纹仿真技术分析

摘要 本博文提供了多种数据类型的干涉条纹仿真&#xff0c;并展示了它们对应的散斑干涉条纹。还分别给出了横向剪切干涉以及剪切散斑干涉条纹的仿真。 一、迈克尔逊干涉与散斑干涉仿真 下图为干涉条纹与对应的散斑干涉条纹的仿真示意图。其中&#xff0c;干涉条纹可认为是源…...

ViiTor实时翻译 2.2.1 | 完全免费的高识别率同声传译软件

ViiTor实时翻译是一款完全免费的实时语音翻译和同声传译软件&#xff0c;支持即时翻译、对话翻译、语音转文字、文本语音合成和AR翻译等功能。它的语音识别和翻译准确率特别高&#xff0c;速度非常快&#xff0c;音质高&#xff0c;并支持6种音色切换。该软件简单易用&#xff…...

uniapp实现为微信小程序扫一扫的功能

引言 随着微信小程序的快速发展,越来越多的开发者开始关注和学习微信小程序的开发。其中,微信小程序的扫一扫功能是非常常用且实用的功能之一。通过扫描二维码,用户可以获取到相关的信息或者实现特定的功能。 正文 在过去,开发者需要使用微信开发者工具以及相关的开发文档…...

ospf 的 状态机详解

OSPF&#xff08;开放最短路径优先&#xff0c;Open Shortest Path First&#xff09;协议的状态机是其核心部分之一&#xff0c;用于确保路由器之间的邻接关系&#xff08;neighbor relationship&#xff09;建立和路由信息的交换。OSPF的状态机模型由多个状态组成&#xff0c…...

ElementPlus 自定义封装 el-date-picker 的快捷功能

文章目录 需求分析 需求 分析 我们看到官网上给出的案例如下&#xff0c;但是不太满足我们用户想要的快捷功能&#xff0c;因为不太多&#xff0c;因此需要我们自己封装一些&#xff0c;方法如下 外部自定义该组件的快捷内容 export const getPickerOptions () > {cons…...

【面试系列】深入浅出 Spring Boot

熟悉SpringBoot&#xff0c;对常用注解、自动装配原理、Jar启动流程、自定义Starter有一定的理解&#xff1b; 面试题 Spring Boot 的核心注解是哪个&#xff1f;它主要由哪几个注解组成的&#xff1f;Spring Boot的自动配置原理是什么&#xff1f;你如何理解 Spring Boot 配置…...

太阳能LED路灯智能控制系统(论文+源码)

1系统的功能及方案设计 本次课题为太阳能LED路灯智能控制系统&#xff0c;其系统整体架构如图2.1所示&#xff0c;太阳能板通过TP4056充电模块给锂电池进行充电&#xff0c;电池通过HX3001升压模块进行升压到5V给整个控制系统进行供电&#xff0c;控制系统由AT89C52单片机作为…...

使用 PyQt5 构建高效的文件分类与管理工具

当我们处理大量图片或文件时&#xff0c;经常会需要一款方便、高效的工具来快速分类、整理和管理它们。今天&#xff0c;我将分享一个用 PyQt5 构建的实用项目&#xff0c;涵盖图片分类、文件夹管理、撤销功能&#xff0c;以及动态界面操作的实现。从设计到代码细节&#xff0c…...

谷歌浏览器 Chrome 提示:此扩展程序可能很快将不再受支持

问题现象 在Chrome 高版本上的扩展管理页面&#xff08;地址栏输入chrome://extensions/或者从界面进入&#xff09;&#xff1a; &#xff0c; 可以查看到扩展的情况。 问题现象大致如图: 问题原因 出现此问题的根本原因在于&#xff1a;谷歌浏览器本身的扩展机制发生了…...

肿瘤电场仪疗法原理:科技之光,照亮抗癌之路

在医疗科技日新月异的今天&#xff0c;肿瘤电场仪疗法作为一种创新的无创治疗手段&#xff0c;正以其独特的物理机制和生物效应&#xff0c;为患者带来了新的治疗选择和希望。本文将深入探讨肿瘤电场仪疗法的原理&#xff0c;揭示其如何在不伤害正常组织的前提下&#xff0c;精…...

scala基础学习_运算符

文章目录 scala运算符算术运算符关系运算符逻辑运算符位运算符其他运算符赋值运算符 scala运算符 在 Scala 中&#xff0c;运算符通常被定义为方法。这意味着你可以将运算符视为对象上的方法调用。以下是一些常用的运算符及其对应的操作&#xff1a; 算术运算符 &#xff1a…...

人工智能与区块链的碰撞:双剑合璧的创新前景

引言 人工智能&#xff08;AI&#xff09;与区块链技术&#xff0c;这两项曾经各自独立发展的前沿科技&#xff0c;如今正逐步走向融合。人工智能通过强大的数据处理能力和智能决策能力&#xff0c;在各个领域掀起了革命性的变革&#xff1b;而区块链凭借其去中心化、不可篡改的…...

信创数据防泄漏中信创沙箱是什么样的安全方案

在信息化与工业化融合创新&#xff08;信创&#xff09;的快速发展中&#xff0c;企业面临着日益复杂的数据安全挑战。SDC沙盒技术以其独特的安全机制和先进的设计理念&#xff0c;为信创环境提供了强有力的数据保护支持。以下是SDC沙盒在信创领域支持能力的几个关键侧重点&…...

在不同操作系统上安装 PostgreSQL

title: 在不同操作系统上安装 PostgreSQL date: 2024/12/26 updated: 2024/12/26 author: cmdragon excerpt: PostgreSQL 是当今最受欢迎的开源关系数据库管理系统之一,由于其强大的功能和灵活性,广泛应用于不同的行业和应用场景。在开始使用 PostgreSQL 之前,用户需要了…...

Linux下编译 libwebsockets简介和使用示例

目录 1&#xff1a;简单介绍&#xff1a; 2&#xff1a;项目地址 3&#xff1a;编译 3.1&#xff1a;集成介绍 3.2&#xff1a;编译 4&#xff1a;客户端服务端示例&#xff1a; 4.1 客户端示例 4.2 服务端示例&#xff1a; 1&#xff1a;简单介绍&#xff1a; Linux下…...