kali系统概述、nmap扫描应用、john破解密码、抓包概述、以太网帧结构、抓包应用、wireshark应用、nginx安全加固、Linux系统加固
目录
kali
nmap扫描
使用john破解密码
抓包
封装与解封装
网络层数据包结构
TCP头部结构编辑
UDP头部结构
实施抓包
安全加固
nginx安全
防止缓冲区溢出
Linux加固
kali
- 实际上它就是一个预安装了很多安全工具的Debian Linux
[root@myhost ~]# kali resetkali reset OK.该虚拟机系统用户名为:kali,密码为:kali
- 基础配置
$ ip a s # 查看网络IP地址,本例中查看到的是192.168.88.40$ sudo systemctl start ssh # 启ssh服务,弹出的窗口输入密码kali$ sudo systemctl enable ssh # 设置ssh服务开机自启[root@myhost ~]# ssh kali@192.168.88.40kali@192.168.88.40's password: kali┌──(kali㉿kali)-[~]└─$
nmap扫描
- 一般来说扫描是攻击的前奏。
- 扫描可以识别目标对象是什么系统,开放了哪些服务。
- 获知具体的服务软件及其版本号,可以使得攻击的成功率大大提升。
- 扫描可以检测潜在的风险,也可以寻找攻击目标、收集信息、找到漏洞
- windows下,扫描可以使用xscan / superscan
- Linux,扫描可以采用nmap
- 吾爱破解:吾爱破解 - LCG - LSG|安卓破解|病毒分析|www.52pojie.cn
- 中国黑客团队论坛:https://www.cnhackteam.org/
- 俄罗斯论坛:https://rutracker.org/
┌──(kali㉿kali)-[~]└─$ nmap# -sT: TCP扫描。# -U: 扫描目标的UDP端口。# -sP:ping扫描# -A:对目标系统全面分析# 扫描整个网段,哪机器可以ping通┌──(kali㉿kali)-[~]└─$ nmap -sP 192.168.88.0/24# 扫描192.168.88.100开放了哪些TCP端口┌──(kali㉿kali)-[~]└─$ sudo nmap -sT 192.168.88.100# 扫描192.168.88.100开放了哪些UDP端口。非常耗时!┌──(kali㉿kali)-[~]└─$ sudo nmap -sU 192.168.88.100# 全面扫描192.168.88.100系统信息┌──(kali㉿kali)-[~]└─$ sudo nmap -A 192.168.88.100
- 使用脚本扫描
# 通过脚本扫描目标主机的ftp服务# 在目标主机上安装vsftpd服务[root@web1 ~]# yum install -y vsftpd[root@web1 ~]# vim /etc/vsftpd/vsftpd.conf 12 anonymous_enable=YES[root@web1 ~]# systemctl enable vsftpd --now# 在kali主机上查看有哪些脚本┌──(kali㉿kali)-[~]└─$ ls /usr/share/nmap/scripts/# 扫描ftp服务是否支持匿名访问。ftp控制连接端口号是21┌──(kali㉿kali)-[~]└─$ sudo nmap --script=ftp-anon.nse 192.168.88.100 -p 2121/tcp open ftp| ftp-anon: Anonymous FTP login allowed # 允许匿名访问# 扫描ftp相关信息,如版本号、带宽限制等┌──(kali㉿kali)-[~]└─$ sudo nmap --script=ftp-syst.nse 192.168.88.100 -p 21# 扫描ftp后门漏洞┌──(kali㉿kali)-[~]└─$ sudo nmap --script=ftp-vsftpd-backdoor 192.168.88.100 -p 21
- 扫描口令
# 通过ssh协议,使用nmap自带的密码本扫描远程主机的用户名和密码# 在目标主机上创建名为admin的用户,密码为123456[root@web1 ~]# useradd admin[root@web1 ~]# echo 123456 | passwd --stdin admin# 在kali上扫描弱密码┌──(kali㉿kali)-[~]└─$ sudo nmap --script=ssh-brute.nse 192.168.88.100 -p 22# 通过ssh协议,使用nmap以及自己的密码本扫描远程主机的密码# 1. 创建用户名文件┌──(kali㉿kali)-[~]└─$ sudo echo root > /tmp/users.txt┌──(kali㉿kali)-[~]└─$ cat /tmp/users.txt root# 2. 生成1990-01-01到2020-12-31之间的所月日期┌──(kali㉿kali)-[~]└─$ vim mydate.pyfrom datetime import datetime, timedeltad1 = datetime(1989, 12, 31)d2 = datetime(2021, 1, 1)dt = timedelta(days=1)with open('/tmp/mima.txt', 'w') as f:while d1 < d2:d1 += dtf.write("%s\n" % d1.strftime('%Y%m%d'))┌──(kali㉿kali)-[~]└─$ python3 mydate.py# 3. 修改web1的密码[root@web1 ~]# echo 19910101 | passwd --stdin root# 4. 使用自己的密码本破解密码┌──(kali㉿kali)-[~]└─$ sudo nmap --script=ssh-brute.nse --script-args userdb=/tmp/users.txt,passdb=/tmp/mima.txt 192.168.88.100 -p 22# 5. 目标主机将会记录所有的登陆事件[root@web1 ~]# vim /var/log/secure# 查看最近的登陆失败事件[root@web1 ~]# lastb# 查看最近的登陆成功事件[root@web1 ~]# last
- 扫描windows口令
[root@myhost ~]# cat /tmp/winuser.txt # windows用户名administratoradmin# 通过samba服务扫描密码[root@myhost ~]# nmap --script=smb-brute.nse --script-args userdb=/tmp/winuser.txt,passdb=/tmp/mima 172.40.0.151
使用john破解密码
-
在线破解哈希值的网站:md5在线解密破解,md5解密加密
-
哈希是算法,英文hash的音译,包括md5、sha等
- 哈希算法是一种单向加密的算法,也就是将原始数据生成一串“乱码”
- 只能通过原始数据,生成这串“乱码”,但是不能通过“乱码”回推出原始数据
- 相同的原始数据,生成的乱码是相同的。
-
kali系统提供了一个名为john的工具,可用于密码破解
[root@web1 ~]# echo 123456 | passwd --stdin root[root@web1 ~]# useradd tom[root@web1 ~]# echo abc123 | passwd --stdin tom[root@web1 ~]# useradd jerry[root@web1 ~]# echo 123123 | passwd --stdin jerry[root@web1 ~]# scp /etc/shadow kali@192.168.88.40:/home/kali/# 字典暴力破解,密码本是/usr/share/john/password.lst┌──(kali㉿kali)-[~]└─$ sudo john shadow # 直接显示破解的密码,不显示其他额外信息┌──(kali㉿kali)-[~]└─$ sudo john --show shadow root:123456:18912:0:99999:7:::tom:abc123:18912:0:99999:7:::jerry:123123:18912:0:99999:7:::# 字典暴力破解,指定密码本文件┌──(kali㉿kali)-[~]└─$ sudo john --wordlist=/tmp/mima.txt shadow
抓包
封装与解封装
- MAC地址:分为目标和源MAC地址,6字节
- Type:类型,说明数据帧中包含的数据类型
- Data:高层数据
- FCS:帧校验序列
网络层数据包结构
- 版本:协议版本,如IPv4
- 生存时间:8位,初始一个值n,每经过一个路由器减1,直到为0丢弃,目的为防止分组在网络上无限传播下去
- 协议号:数据部分应交付的协议号,如TCP是6,UDP是17
TCP头部结构
- 源端口:数据段的源端口,一般为大于1024的随机值
- 目标端口:数据段的目标端口
- 序号:在一个TCP连接中传输的数据段都按顺序编号
UDP头部结构
- 源端口:数据段的源端口,一般为大于1024的随机值
- 目标端口:数据段的目标端口
实施抓包
- 传输的各种数据,在网络中都是一个个的数据包
┌──(kali㉿kali)-[~]└─$ sudo tcpdump# -i:指定抓取哪块网卡进入的数据包# -A:转换为ASCII码,使得可读# -w:抓包写入文件# -r:从文件中读取抓包信息# 抓包时可以过滤要抓哪些包# 使用host过滤主机,使用net过滤网段,使用port过滤端口... ...# 1. 抓包:抓取eth0上进出的、与192.168.88.100有关的、涉及TCP21端口的数据包。以下命令执行后,打开新终端。┌──(kali㉿kali)-[~]└─$ sudo tcpdump -i eth0 -A host 192.168.88.100 and tcp port 21# 2. 在新终端登陆ftp┌──(kali㉿kali)-[~]└─$ ftp 192.168.88.100Connected to 192.168.88.100.220 (vsFTPd 3.0.2)Name (192.168.88.11:kali): tom # 用户名331 Please specify the password.Password:abc123 # 此处是tom的密码230 Login successful.Remote system type is UNIX.Using binary mode to transfer files.ftp> exit # 退出221 Goodbye.# 3.在tcpdump终端可以看到明文的用户名和密码# 保存抓包文件# 1. 将抓到的包存入文件ftp.cap┌──(kali㉿kali)-[~]└─$ sudo tcpdump -i eth0 -A -w ftp.cap host 192.168.88.100 and tcp port 21# 2. 在另一个终端访问ftp# 在新终端登陆ftp┌──(kali㉿kali)-[~]└─$ ftp 192.168.88.100Connected to 192.168.88.100.220 (vsFTPd 3.0.2)Name (192.168.88.11:kali): tom # 用户名331 Please specify the password.Password:abc123 # 此处是tom的密码230 Login successful.Remote system type is UNIX.Using binary mode to transfer files.ftp> exit # 退出221 Goodbye.# 3. 在抓包终端ctrl+c停止# 4. 读取抓到的包,并过滤┌──(kali㉿kali)-[~]└─$ tcpdump -A -r ftp.cap | egrep 'USER|PASS'
- 图形工具:wireshark
[root@myhost ~]# yum install wireshark ftp
选择抓哪块网卡进出的数据,然后点左上角的开始
抓到包后,点击左上角同样位置停止,查看数据
安全加固
nginx安全
- 安装启服务
[root@web1 ~]# yum install -y nginx[root@web1 ~]# systemctl enable nginx --now
- 命令行访问不存在的路径:
[root@web1 ~]# curl -I http://192.168.88.100/HTTP/1.1 200 OKServer: nginx/1.14.1 # 版本号Date: Mon, 02 Jan 2023 02:54:45 GMTContent-Type: text/htmlContent-Length: 3429Last-Modified: Thu, 10 Jun 2021 09:09:03 GMTConnection: keep-aliveETag: "60c1d6af-d65"Accept-Ranges: bytes
- 隐藏版本信息
[root@web1 ~]# vim /etc/nginx/nginx.conf... ...17 http {18 server_tokens off;... ...[root@web1 ~]# systemctl restart nginx.service
- 再次访问不存在的路径,版本号消失
[root@web1 ~]# curl -I http://192.168.88.100/HTTP/1.1 200 OKServer: nginx # 没有版本号了Date: Mon, 02 Jan 2023 02:56:26 GMTContent-Type: text/htmlContent-Length: 3429Last-Modified: Thu, 10 Jun 2021 09:09:03 GMTConnection: keep-aliveETag: "60c1d6af-d65"Accept-Ranges: bytes
- 防止DOS、DDOS攻击
- DDOS:分布式拒绝服务
# 压力测试,每批次发送100个请求给web服务器,一共发200个[root@myhost ~]# yum install -y httpd-tools[root@myhost ~]# ab -c 100 -n 200 http://192.168.88.100/ ... ...Benchmarking 192.168.88.100 (be patient)Completed 100 requestsCompleted 200 requestsFinished 200 requests # 发送200个请求完成... ... Complete requests: 200 # 完成了200个请求Failed requests: 0 # 0个失败... ...
- 配置nginx连接共享内存为10M,每秒钟只接收一个请求,最多有5个请求排队,多余的拒绝
[root@web1 ~]# vim /etc/nginx/nginx.conf17 http {18 limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s; # 添加... ...40 server {41 listen 80 default_server;42 listen [::]:80 default_server;43 server_name _;44 root /usr/share/nginx/html;45 limit_req zone=one burst=5; # 添加[root@web1 ~]# systemctl restart nginx.service # 再次测试[root@myhost ~]# ab -c 100 -n 200 http://192.168.88.100/ ... ...Benchmarking 192.168.88.100 (be patient)Completed 100 requestsCompleted 200 requestsFinished 200 requests... ...Complete requests: 200Failed requests: 194 # 失败了194个... ...
防止缓冲区溢出
- 缓冲区溢出定义:程序企图在预分配的缓冲区之外写数据。
- 漏洞危害:用于更改程序执行流,控制函数返回值,执行任意代码。
# 配置nginx缓冲区大小,防止缓冲区溢出[root@web1 ~]# vim /etc/nginx/nginx.conf... ...17 http {18 client_body_buffer_size 1k;19 client_header_buffer_size 1k;20 client_max_body_size 1k;21 large_client_header_buffers 2 1k;... ...[root@web1 ~]# systemctl restart nginx.service
Linux加固
- 设置tom账号,有效期为2022-1-1
# 查看tom的账号信息[root@web1 ~]# chage -l tom最近一次密码修改时间 :10月 12, 2021密码过期时间 :从不密码失效时间 :从不帐户过期时间 :从不两次改变密码之间相距的最小天数 :0两次改变密码之间相距的最大天数 :99999在密码过期之前警告的天数 :7[root@web1 ~]# chage -E 2022-1-1 tom[root@web1 ~]# chage -l tom最近一次密码修改时间 :10月 12, 2021密码过期时间 :从不密码失效时间 :从不帐户过期时间 :1月 01, 2022两次改变密码之间相距的最小天数 :0两次改变密码之间相距的最大天数 :99999在密码过期之前警告的天数 :7# 设置账号永不过期,注意-E后面是数字-1,不是字母l[root@web1 ~]# chage -E -1 tom[root@web1 ~]# chage -l tom最近一次密码修改时间 :10月 12, 2021密码过期时间 :从不密码失效时间 :从不帐户过期时间 :从不两次改变密码之间相距的最小天数 :0两次改变密码之间相距的最大天数 :99999在密码过期之前警告的天数 :7# 设置新建用户的密码策略[root@web1 ~]# vim /etc/login.defs 39 PASS_MAX_DAYS 99999 # 密码永不过期,设置最长有效期40 PASS_MIN_DAYS 0 # 密码最短使用时间,0表示随时可改密码41 PASS_MIN_LEN 5 # 密码最短长度42 PASS_WARN_AGE 7 # 密码过期前7天发警告47 UID_MIN 1000 # 新建用户最小的UID48 UID_MAX 60000 # 新建用户最大的UID
- 用户安全设置
# 锁定tom账号[root@web1 ~]# passwd -l tom锁定用户 tom 的密码 。passwd: 操作成功[root@web1 ~]# passwd -S tom # 查看状态tom LK 2021-10-12 0 99999 7 -1 (密码已被锁定。)# 解锁tom账号[root@web1 ~]# passwd -u tom解锁用户 tom 的密码。passwd: 操作成功[root@web1 ~]# passwd -S tomtom PS 2021-10-12 0 99999 7 -1 (密码已设置,使用 SHA512 算法。)
- 保护文件
# 查看文件的特殊属性[root@web1 ~]# lsattr /etc/passwd---------------- /etc/passwd # 没有特殊属性# 修改属性chattr +i 文件 # 不允许对文件做任何操作,只能看chattr -i 文件 # 去除i属性chattr +a 文件 # 文件只允许追加chattr -a 文件 # 去除a属性[root@web1 ~]# chattr +i /etc/passwd[root@web1 ~]# lsattr /etc/passwd----i----------- /etc/passwd[root@web1 ~]# useradd zhangsanuseradd:无法打开 /etc/passwd[root@web1 ~]# rm -f /etc/passwdrm: 无法删除"/etc/passwd": 不允许的操作[root@web1 ~]# chattr -i /etc/passwd[root@web1 ~]# rm -f /etc/passwd # 可以删除[root@web1 ~]# ls /etc/passwdls: 无法访问/etc/passwd: 没有那个文件或目录# 恢复passwd文件[root@web1 ~]# cp /etc/passwd- /etc/passwd# 追加[root@web1 ~]# chattr +a /etc/hosts[root@web1 ~]# echo 'hello world' >> /etc/hosts[root@web1 ~]# rm -f /etc/hostsrm: 无法删除"/etc/hosts": 不允许的操作
相关文章:

kali系统概述、nmap扫描应用、john破解密码、抓包概述、以太网帧结构、抓包应用、wireshark应用、nginx安全加固、Linux系统加固
目录 kali nmap扫描 使用john破解密码 抓包 封装与解封装 网络层数据包结构 TCP头部结构编辑 UDP头部结构 实施抓包 安全加固 nginx安全 防止缓冲区溢出 Linux加固 kali 实际上它就是一个预安装了很多安全工具的Debian Linux [rootmyhost ~]# kali resetkali …...
Spring Cloud 路由和消息传递 (HTTP 路由)
Spring Cloud 路由 Spring Cloud 路由是指将请求路由到特定服务的机制。Spring Cloud 提供了多种路由机制,包括: Ribbon: 一个基于 HTTP 和 TCP 的客户端负载均衡工具,提供软负载均衡、故障转移等功能。Feign: 一个声明式的 HTTP 客户端&am…...

【PyQt】12-滑块、计数控件
文章目录 前言一、滑块控件 QSlider运行结果 二、计数器控件 QSpinBox运行结果 总结 前言 1、滑块控件 2、计数控件 一、滑块控件 QSlider #Author :susocool #Creattime:2024/2/15 #FileName:28-滑块控件 #Description: 通过滑块选择字体大小 import sys from PyQ…...

【牛客面试必刷TOP101】Day21.BM11 链表相加(二)和BM12 单链表的排序
作者简介:大家好,我是未央; 博客首页:未央.303 系列专栏:牛客面试必刷TOP101 每日一句:人的一生,可以有所作为的时机只有一次,那就是现在!!!&…...

疑似针对安全研究人员的窃密与勒索
前言 笔者在某国外开源样本沙箱平台闲逛的时候,发现了一个有趣的样本,该样本伪装成安全研究人员经常使用的某个渗透测试工具的破解版压缩包,对安全研究人员进行窃密与勒索双重攻击,这种双重攻击的方式也是勒索病毒黑客组织常用的…...
Mamba-UNet:用于医学图像分割的类似UNet的纯视觉Mamba网络
摘要 在医学图像分析的最新进展中,卷积神经网络(CNN)和视觉转换器(ViT)都取得了显著的基准成绩。前者通过其卷积操作在捕获局部特征方面表现出色,而后者则通过利用自注意力机制实现了出色的全局上下文理解。然而,这两种架构在有效建模医学图像中的长距离依赖关系时都存…...
2024/2/14
1.1、若有下面的变量定义,以下语句中合法的是( A )。 int i,a[10],*p; A) pa2; B) pa[5]; C) pa[2]2; D) p&(i2); 1.2、有以下程序 …...

跟廖雪峰老师学习Git(持续更新)
Git简介 创建版本库 第一步,创建一个新目录 第二步,通过git init变成Git可以管理的仓库 把文件添加到文本库,不要使用Windows自带的记事本! 我用的是VS code 创建readme.txt 放入库中 commit可以一次提交很多文件࿰…...

2024,欢迎来到性价比时代
「不是XX买不起,而是YY更有性价比。」——翻开过去一年的商业消费史,这句话几乎可以贯穿始终。年轻消费者们追求性价比的眼光一旦定型,一些品牌过去被品质生活、消费升级包装出来的华丽外壳,很容易一击就碎。 胜出的「性价比之王…...
【国产MCU】-CH32V307-通用定时器(GPTM)-输入捕获模式测量脉冲
通用定时器(GPTM)-输入捕获模式测量脉冲 文章目录 通用定时器(GPTM)-输入捕获模式测量脉冲1、通用定时器(GPTM)介绍2、输入捕获模式3、驱动API介绍4、定时器输入捕获示例CH32V307的通用定时器模块包含一个16 位可自动重装的定时器(TIM2、TIM3、TIM4和TIM5),用于测量脉…...
sqlserver char,nchar varchar nvarchar的区别
在 SQL Server 中,char、nchar、varchar 和 nvarchar 是用于存储文本数据的数据类型。它们之间的区别主要在于它们所使用的字符集和存储空间方面。 char:(中文占2个字节,英文1个) char 是一种固定长度的字符数据类型&a…...

FT2232调试记录(2)
FT2232调试记录 (1)获取当前连接的FTDI设备通道个数:(2)获取当前连接的设备通道的信息:(3)配置SPI的通道:(4)如何设置GPIO:(5)DEMO测试: FT2232调…...

网络学习:数据链路层VLAN原理和配置
一、简介: VLAN又称为虚拟局域网,它是用来将使用路由器的网络分割成多个虚拟局域网,起到隔离广播域的作用,一个VLAN通常对应一个IP网段,不同VLAN通常规划到不同IP网段。划分VLAN可以提高网络的通讯质量和安全性。 二、…...

Docker的常见命令以及命令别名
常见命令 命令说明docker pull拉取镜像docker push推送镜像到DockerRegistrydocker images查看本地镜像docker rmi删除本地镜像docker run创建并允许容器docker stop停止指定容器docker start启动指定容器docker restart重新启动容器docker rm删除指定容器docker ps查看容器do…...

2024.02.14作业
1. 请编程实现二维数组的杨辉三角 #include <stdio.h> #include <stdlib.h> #include <string.h>int main() {int n;scanf("%d", &n);int a[n][n];memset(a, 0, sizeof(a));a[0][0] 1;for (int i 1; i < n; i){for (int j 0; j < i …...

SpringMVC原理(设计原理+启动原理+工作原理)
文章目录 前言正文一、设计原理1.1 servlet生命周期简述1.2 设计原理小结 二、启动原理2.1 AbstractHandlerMethodMapping 初始化 --RequestMapping注解解析2.2 DispatcherServlet 的初始化2.3 DispatcherServlet#initHandlerMappings(...) 初始化示例说明 三、工作原理 前言 …...

Java+SpringBoot构建智能捐赠管理平台
✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 |…...

ubuntu远程桌面配置以及常见问题
ubuntu桌面系统配置 ubuntu远程桌面配置如下 第一步,安装xrdp sudo apt-get isntall xrdp安装完检查一下服务是否可以正常启动, sudo systemctl status xrdp如果看到active应该就正常启动了 第二步,开启Ubuntu桌面共享 好接下来我们测试一…...

数据结构:并查集讲解
并查集 1.并查集原理2.并查集实现3.并查集应用4.并查集的路径压缩 1.并查集原理 在一些应用问题中,需要将n个不同的元素划分成一些不相交的集合。开始时,每个元素自成一个单元素集合,然后按一定的规律将归于同一组元素的集合合并。在此过程中…...

Stable Diffusion主流UI详细介绍
Stable Diffusion目前主流的操作界面有WebUI、ComfyUI以及Fooocus 这里webui和fooocus在人机交互上的逻辑是一样的,fooocus界面更加简洁。 comfyui是在人机交互上是采用流程节点的交互逻辑,和上面略有区别。 界面分别如下: WebUI界面如下 we…...
五年级数学知识边界总结思考-下册
目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解:由来、作用与意义**一、知识点核心内容****二、知识点的由来:从生活实践到数学抽象****三、知识的作用:解决实际问题的工具****四、学习的意义:培养核心素养…...
vue3 字体颜色设置的多种方式
在Vue 3中设置字体颜色可以通过多种方式实现,这取决于你是想在组件内部直接设置,还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法: 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...

3-11单元格区域边界定位(End属性)学习笔记
返回一个Range 对象,只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意:它移动的位置必须是相连的有内容的单元格…...
laravel8+vue3.0+element-plus搭建方法
创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...
Spring是如何解决Bean的循环依赖:三级缓存机制
1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间互相持有对方引用,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...

华为OD机考-机房布局
import java.util.*;public class DemoTest5 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseSystem.out.println(solve(in.nextLine()));}}priv…...
08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险
C#入门系列【类的基本概念】:开启编程世界的奇妙冒险 嘿,各位编程小白探险家!欢迎来到 C# 的奇幻大陆!今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类!别害怕,跟着我,保准让你轻松搞…...
【学习笔记】erase 删除顺序迭代器后迭代器失效的解决方案
目录 使用 erase 返回值继续迭代使用索引进行遍历 我们知道类似 vector 的顺序迭代器被删除后,迭代器会失效,因为顺序迭代器在内存中是连续存储的,元素删除后,后续元素会前移。 但一些场景中,我们又需要在执行删除操作…...

水泥厂自动化升级利器:Devicenet转Modbus rtu协议转换网关
在水泥厂的生产流程中,工业自动化网关起着至关重要的作用,尤其是JH-DVN-RTU疆鸿智能Devicenet转Modbus rtu协议转换网关,为水泥厂实现高效生产与精准控制提供了有力支持。 水泥厂设备众多,其中不少设备采用Devicenet协议。Devicen…...
鸿蒙HarmonyOS 5军旗小游戏实现指南
1. 项目概述 本军旗小游戏基于鸿蒙HarmonyOS 5开发,采用DevEco Studio实现,包含完整的游戏逻辑和UI界面。 2. 项目结构 /src/main/java/com/example/militarychess/├── MainAbilitySlice.java // 主界面├── GameView.java // 游戏核…...