统信UOS 1060上通过Fail2Ban来Ban IP
原文链接:统信UOS 1060上通过Fail2Ban来Ban IP
hello,大家好啊,今天给大家带来一篇在统信UOS 1060上安装Fail2Ban并且当ip被ban后通过邮件发送通知的文章。Fail2Ban 是一个用于防止暴力攻击的开源软件。它可以扫描日志文件(例如,SSH或Web服务器日志文件)以查找IP地址,这些IP地址在定义的时间段内显示了太多的失败登录尝试,并在防火墙规则中封锁它们(通常使用iptables)。Fail2Ban通常用于防止各种类型的暴力攻击,例如SSH暴力攻击、邮件服务器攻击等。
1、查看系统版本信息
pdsyw@pdsyw-PC:~/Desktop$ uname -a
Linux pdsyw-PC 4.19.0-arm64-desktop #6030 SMP Tue Jun 27 15:28:10 CST 2023 aarch64 GNU/Linux
pdsyw@pdsyw-PC:~/Desktop$
pdsyw@pdsyw-PC:~/Desktop$
pdsyw@pdsyw-PC:~/Desktop$ cat /etc/os-version
[Version]
SystemName=UOS Desktop
SystemName[zh_CN]=统信桌面操作系统
ProductType=Desktop
ProductType[zh_CN]=桌面
EditionName=Professional
EditionName[zh_CN]=专业版
MajorVersion=20
MinorVersion=1060
OsBuild=11014.100.100
pdsyw@pdsyw-PC:~/Desktop$
2、配置fail2ban----安装fail2ban软件
pdsyw@pdsyw-PC:~/Desktop$ sudo apt update
请输入密码:
验证成功
命中:1 https://cdn-professional-security.chinauos.com eagle/1060 InRelease
命中:2 https://pro-driver-packages.uniontech.com eagle InRelease
命中:3 https://professional-packages.chinauos.com/desktop-professional eagle InRelease
命中:4 https://professional-packages.chinauos.com/printer eagle InRelease
命中:5 https://app-store-files.uniontech.com/231013140032791/appstore eagle-pro InRelease
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
有 156 个软件包可以升级。请执行 ‘apt list --upgradable’ 来查看它们。
pdsyw@pdsyw-PC:~/Desktop$ sudo apt install fail2ban -y
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
下列软件包是自动安装的并且现在不需要了:libutempter0 squashfs-tools x11-apps x11-session-utils xbitmaps xinit
使用'sudo apt autoremove'来卸载它(它们)。
将会同时安装下列软件:python3-pyinotify python3-systemd whois
建议安装:mailx monit python-pyinotify-doc
下列【新】软件包将被安装:fail2ban python3-pyinotify python3-systemd whois
升级了 0 个软件包,新安装了 4 个软件包,要卸载 0 个软件包,有 156 个软件包未被升级。
需要下载 522 kB 的归档。
解压缩后会消耗 2,550 kB 的额外空间。
获取:1 https://professional-packages.chinauos.com/desktop-professional eagle/main arm64 fail2ban all 0.10.2-2.1 [385 kB]
获取:2 https://professional-packages.chinauos.com/desktop-professional eagle/main arm64 python3-pyinotify all 0.9.6-1 [26.9 kB]
获取:3 https://professional-packages.chinauos.com/desktop-professional eagle/main arm64 python3-systemd arm64 234-2+b1 [34.9 kB]
获取:4 https://professional-packages.chinauos.com/desktop-professional eagle/main arm64 whois arm64 5.4.3 [75.6 kB]
已下载 522 kB,耗时 1秒 (351 kB/s)
正在选中未选择的软件包 fail2ban。
(正在读取数据库 ... 系统当前共安装有 198268 个文件和目录。)
准备解压 .../fail2ban_0.10.2-2.1_all.deb ...
正在解压 fail2ban (0.10.2-2.1) ...
/var/cache/apt/archives/fail2ban_0.10.2-2.1_all.deb
正在选中未选择的软件包 python3-pyinotify。
准备解压 .../python3-pyinotify_0.9.6-1_all.deb ...
正在解压 python3-pyinotify (0.9.6-1) ...
/var/cache/apt/archives/python3-pyinotify_0.9.6-1_all.deb
正在选中未选择的软件包 python3-systemd。
准备解压 .../python3-systemd_234-2+b1_arm64.deb ...
正在解压 python3-systemd (234-2+b1) ...
/var/cache/apt/archives/python3-systemd_234-2+b1_arm64.deb
正在选中未选择的软件包 whois。
准备解压 .../archives/whois_5.4.3_arm64.deb ...
正在解压 whois (5.4.3) ...
/var/cache/apt/archives/whois_5.4.3_arm64.deb
正在设置 whois (5.4.3) ...
正在设置 fail2ban (0.10.2-2.1) ...
Created symlink /etc/systemd/system/multi-user.target.wants/fail2ban.service → /lib/systemd/system/fail2ban.service.
[fail2ban-tmpfiles.conf:1] Line references path below legacy directory /var/run/, updating /var/run/fail2ban → /run/fail2ban; please update the tmpfiles.d/ drop-in file accordingly.
正在设置 python3-pyinotify (0.9.6-1) ...
正在设置 python3-systemd (234-2+b1) ...
正在处理用于 man-db (2.8.5-2) 的触发器 ...
正在处理用于 systemd (241.52-deepin1) 的触发器 ...
pdsyw@pdsyw-PC:~/Desktop$
3、配置fail2ban----启动fail2ban软件
pdsyw@pdsyw-PC:~/Desktop$ sudo systemctl start fail2ban
pdsyw@pdsyw-PC:~/Desktop$ sudo systemctl enable fail2ban
Synchronizing state of fail2ban.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable fail2ban
pdsyw@pdsyw-PC:~/Desktop$ sudo systemctl status fail2ban
● fail2ban.service - Fail2Ban ServiceLoaded: loaded (/lib/systemd/system/fail2ban.service; enabled; vendor preset: enabled)Active: active (running) since Fri 2023-10-13 20:27:45 CST; 5s agoDocs: man:fail2ban(1)Main PID: 6528 (fail2ban-server)Tasks: 3 (limit: 4915)Memory: 11.1MCGroup: /system.slice/fail2ban.service└─6528 /usr/bin/python3 /usr/bin/fail2ban-server -xf start10月 13 20:27:45 pdsyw-PC systemd[1]: Starting Fail2Ban Service...
10月 13 20:27:45 pdsyw-PC systemd[1]: Started Fail2Ban Service.
10月 13 20:27:45 pdsyw-PC fail2ban-server[6528]: Server ready
10月 13 20:27:45 pdsyw-PC systemd[1]: /lib/systemd/system/fail2ban.service:12: PIDFile= references path below
10月 13 20:27:45 pdsyw-PC systemd[1]: /lib/systemd/system/fail2ban.service:12: PIDFile= references path below
10月 13 20:27:45 pdsyw-PC systemd[1]: /lib/systemd/system/fail2ban.service:12: PIDFile= references path below
pdsyw@pdsyw-PC:~/Desktop$
4、配置fail2ban----编辑/etc/fail2ban/jail.local文件
[sshd]: 这是一个节(section),它定义了一个名为sshd的监狱(jail)。监狱是Fail2Ban中的一个概念,用于定义一组规则,以确定何时应该封禁IP地址。
enabled = true: 这表示sshd监狱已启用。
port = ssh: 这指定了Fail2Ban应该监视的端口,这里是SSH的默认端口。
action = msmtp-whois-lines[name=SSHD, dest=1111@163.com, sender=1111@qq.com]: 这定义了当IP被封禁时要执行的动作。这里,msmtp-whois-lines动作被配置为发送包含封禁IP的whois信息的电子邮件。邮件的主题名为SSHD,收件人地址为1111@163.com,发件人地址为1111@qq.com。
logpath = %(sshd_log)s: 这指定了Fail2Ban应该监视的日志文件的路径。%(sshd_log)s是一个预定义的变量,通常指向SSH守护进程的日志文件。
maxretry = 5: 这定义了在Fail2Ban触发封禁之前允许的失败尝试次数。
bantime = 600: 这定义了封禁的持续时间(以秒为单位)。这里,600秒等于10分钟。
pdsyw@pdsyw-PC:~/Desktop$ sudo vi /etc/fail2ban/jail.local
pdsyw@pdsyw-PC:~/Desktop$ cat /etc/fail2ban/jail.local
[sshd]
enabled = true
port = ssh
action = msmtp-whois-lines[name=SSHD, dest=1111@163.com, sender=1111@qq.com]
logpath = %(sshd_log)s
maxretry = 5
bantime = 600
pdsyw@pdsyw-PC:~/Desktop$
5、配置邮件通知----安装msmtp msmtp-mta软件
pdsyw@pdsyw-PC:~/Desktop$ sudo apt-get install msmtp msmtp-mta
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
下列软件包是自动安装的并且现在不需要了:libutempter0 squashfs-tools x11-apps x11-session-utils xbitmaps xinit
使用'sudo apt autoremove'来卸载它(它们)。
将会同时安装下列软件:libgsasl7 libntlm0
下列【新】软件包将被安装:libgsasl7 libntlm0 msmtp msmtp-mta
升级了 0 个软件包,新安装了 4 个软件包,要卸载 0 个软件包,有 156 个软件包未被升级。
需要下载 373 kB 的归档。
解压缩后会消耗 1,179 kB 的额外空间。
您希望继续执行吗? [Y/n] y
获取:1 https://professional-packages.chinauos.com/desktop-professional eagle/main arm64 libntlm0 arm64 1.5-1+deb10u1+rebuild [23.6 kB]
获取:2 https://professional-packages.chinauos.com/desktop-professional eagle/main arm64 libgsasl7 arm64 1.8.0-8+b2 [198 kB]
获取:3 https://professional-packages.chinauos.com/desktop-professional eagle/main arm64 msmtp arm64 1.8.3-1 [133 kB]
获取:4 https://professional-packages.chinauos.com/desktop-professional eagle/main arm64 msmtp-mta arm64 1.8.3-1 [18.8 kB]
已下载 373 kB,耗时 1秒 (403 kB/s)
正在预设定软件包 ...
正在选中未选择的软件包 libntlm0:arm64。
(正在读取数据库 ... 系统当前共安装有 198747 个文件和目录。)
准备解压 .../libntlm0_1.5-1+deb10u1+rebuild_arm64.deb ...
正在解压 libntlm0:arm64 (1.5-1+deb10u1+rebuild) ...
/var/cache/apt/archives/libntlm0_1.5-1+deb10u1+rebuild_arm64.deb
正在选中未选择的软件包 libgsasl7。
准备解压 .../libgsasl7_1.8.0-8+b2_arm64.deb ...
正在解压 libgsasl7 (1.8.0-8+b2) ...
/var/cache/apt/archives/libgsasl7_1.8.0-8+b2_arm64.deb
正在选中未选择的软件包 msmtp。
准备解压 .../msmtp_1.8.3-1_arm64.deb ...
正在解压 msmtp (1.8.3-1) ...
/var/cache/apt/archives/msmtp_1.8.3-1_arm64.deb
正在选中未选择的软件包 msmtp-mta。
准备解压 .../msmtp-mta_1.8.3-1_arm64.deb ...
正在解压 msmtp-mta (1.8.3-1) ...
/var/cache/apt/archives/msmtp-mta_1.8.3-1_arm64.deb
正在设置 libntlm0:arm64 (1.5-1+deb10u1+rebuild) ...
正在设置 libgsasl7 (1.8.0-8+b2) ...
正在设置 msmtp (1.8.3-1) ...
正在设置 msmtp-mta (1.8.3-1) ...
msmtpd.service is a disabled or a static unit, not starting it.
正在处理用于 man-db (2.8.5-2) 的触发器 ...
正在处理用于 libc-bin (2.28.23-deepin1) 的触发器 ...
pdsyw@pdsyw-PC:~/Desktop$
6、配置邮件通知----编辑/etc/msmtprc文件
defaults: 这一行开始定义默认设置区块。auth on: 启用SMTP认证。tls on: 启用TLS/SSL加密。tls_trust_file /etc/ssl/certs/ca-certificates.crt: 指定CA证书的位置,用于验证远程服务器的证书。logfile /var/log/msmtp.log: 指定msmtp的日志文件位置。account qqmail: 定义一个名为qqmail的账户设置区块。host smtp.qq.com: 设置SMTP服务器的地址。port 587: 设置SMTP服务器的端口。from 1111@qq.com: 设置发件人地址。auth login: 设置SMTP认证类型。user 1111@qq.com: 设置SMTP用户名。password [YourAppPassword]: 设置SMTP密码。这里的[YourAppPassword]应该被替换为实际的应用密码。account default : qqmail: 设置qqmail账户为默认账户。
pdsyw@pdsyw-PC:~/Desktop$ sudo vi /etc/msmtprc
pdsyw@pdsyw-PC:~/Desktop$ sudo cat /etc/msmtprc
defaults
auth on
tls on
tls_trust_file /etc/ssl/certs/ca-certificates.crt
logfile /var/log/msmtp.logaccount qqmail
host smtp.qq.com
port 587
from 1111@qq.com
auth login
user 1111@qq.com
password [YourAppPassword]account default : qqmailpdsyw@pdsyw-PC:~/Desktop$
7、配置邮件通知----确保日志可由msmtp写入
pdsyw@pdsyw-PC:~/Desktop$ sudo touch /var/log/msmtp.log
pdsyw@pdsyw-PC:~/Desktop$ sudo chown pdsyw:mail /var/log/msmtp.log
pdsyw@pdsyw-PC:~/Desktop$ sudo chmod 660 /var/log/msmtp.log
pdsyw@pdsyw-PC:~/Desktop$
8、配置fail2ban----使用 msmtp
pdsyw@pdsyw-PC:~/Desktop$ sudo vi /etc/fail2ban/action.d/msmtp-whois-lines.conf
pdsyw@pdsyw-PC:~/Desktop$ cat /etc/fail2ban/action.d/msmtp-whois-lines.conf
[INCLUDES]before = sendmail-common.confhelpers-common.conf[Definition]actionban = ( printf %%b "Subject: [Fail2Ban] <name>: banned <ip> from <fq-hostname>Date: `LC_ALL=C date +"%%a, %%d %%h %%Y %%T %%z"`From: <sendername> <<sender>>To: <dest>\nHi,\nThe IP <ip> has just been banned by Fail2Ban after<failures> attempts against <name>.\n\nHere is more information about <ip> :\n`/usr/bin/whois <ip> || echo missing whois program`\n\nLines containing failures of <ip>\n";%(_grep_logs)s;printf %%b "\nRegards,\nFail2Ban" ) | msmtp -t[Init]name = default
logpath = /dev/nullpdsyw@pdsyw-PC:~/Desktop$
9、启动和测试 Fail2Ban
pdsyw@pdsyw-PC:~/Desktop$ sudo systemctl start fail2ban
pdsyw@pdsyw-PC:~/Desktop$ sudo systemctl enable fail2ban
Synchronizing state of fail2ban.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable fail2ban
pdsyw@pdsyw-PC:~/Desktop$ fail2ban-client -t
OK: configuration test is successful
pdsyw@pdsyw-PC:~/Desktop$
10、监控 Fail2Ban 日志以确保 IP 地址被正确地封禁和解封
pdsyw@pdsyw-PC:~/Desktop$ sudo tail -f /var/log/fail2ban.log
2023-10-13 20:27:45,337 fail2ban.jail [6528]: INFO Jail 'sshd' uses pyinotify {}
2023-10-13 20:27:45,339 fail2ban.jail [6528]: INFO Initiated 'pyinotify' backend
2023-10-13 20:27:45,340 fail2ban.filter [6528]: INFO maxLines: 1
2023-10-13 20:27:45,348 fail2ban.server [6528]: INFO Jail sshd is not a JournalFilter instance
2023-10-13 20:27:45,349 fail2ban.filter [6528]: INFO Added logfile: '/var/log/auth.log' (pos = 25779, hash = d7fb092461318336103edd3a46d20259fe580f33)
2023-10-13 20:27:45,350 fail2ban.filter [6528]: INFO encoding: UTF-8
2023-10-13 20:27:45,350 fail2ban.filter [6528]: INFO maxRetry: 5
2023-10-13 20:27:45,350 fail2ban.filter [6528]: INFO findtime: 600
2023-10-13 20:27:45,350 fail2ban.actions [6528]: INFO banTime: 600
2023-10-13 20:27:45,351 fail2ban.jail [6528]: INFO Jail 'sshd' started
11、启动ssh服务
pdsyw@pdsyw-PC:~/Desktop$ sudo systemctl enable ssh --now
Synchronizing state of ssh.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable ssh
pdsyw@pdsyw-PC:~/Desktop$
12、通过另一个终端ssh连接测试,5次输错密码后无法连接
uos@uos-PC:~/Desktop$ ssh pdsyw@10.211.55.48
pdsyw@10.211.55.48's password:
Permission denied, please try again.
pdsyw@10.211.55.48's password:
Permission denied, please try again.
pdsyw@10.211.55.48's password:
pdsyw@10.211.55.48: Permission denied (publickey,password).
uos@uos-PC:~/Desktop$ ssh pdsyw@10.211.55.48
pdsyw@10.211.55.48's password:
Permission denied, please try again.
pdsyw@10.211.55.48's password:
Permission denied, please try again.
pdsyw@10.211.55.48's password:
pdsyw@10.211.55.48: Permission denied (publickey).
uos@uos-PC:~/Desktop$ ssh pdsyw@10.211.55.48
pdsyw@10.211.55.48's password:
pdsyw@10.211.55.48: Permission denied (publickey).
uos@uos-PC:~/Desktop$
13、通过监控 Fail2Ban 日志发现10.211.55.13被ban
pdsyw@pdsyw-PC:~/Desktop$ sudo tail -f /var/log/fail2ban.log
2023-10-13 21:00:14,456 fail2ban.filter [14138]: INFO [sshd] Found 10.211.55.13 - 2023-10-13 21:00:14
2023-10-13 21:00:19,071 fail2ban.filter [14138]: INFO [sshd] Found 10.211.55.13 - 2023-10-13 21:00:18
2023-10-13 21:00:20,673 fail2ban.filter [14138]: INFO [sshd] Found 10.211.55.13 - 2023-10-13 21:00:20
2023-10-13 21:00:20,687 fail2ban.actions [14138]: NOTICE [sshd] Ban 10.211.55.13
2023-10-13 21:00:24,346 fail2ban.filter [14138]: INFO [sshd] Found 10.211.55.13 - 2023-10-13 21:00:24
2023-10-13 21:00:28,819 fail2ban.filter [14138]: INFO [sshd] Found 10.211.55.13 - 2023-10-13 21:00:28
2023-10-13 21:00:31,528 fail2ban.filter [14138]: INFO [sshd] Found 10.211.55.13 - 2023-10-13 21:00:31
2023-10-13 21:00:33,272 fail2ban.filter [14138]: INFO [sshd] Found 10.211.55.13 - 2023-10-13 21:00:33
2023-10-13 21:00:34,062 fail2ban.filter [14138]: INFO [sshd] Found 10.211.55.13 - 2023-10-13 21:00:34
2023-10-13 21:00:34,359 fail2ban.actions [14138]: NOTICE [sshd] 10.211.55.13 already banned
14、进一步检查 sshd 监狱的状态和被封锁的 IP 地址
pdsyw@pdsyw-PC:~/Desktop$ sudo fail2ban-client status sshd
Status for the jail: sshd
|- Filter
| |- Currently failed: 0
| |- Total failed: 10
| `- File list: /var/log/auth.log
`- Actions|- Currently banned: 1|- Total banned: 1`- Banned IP list: 10.211.55.13
pdsyw@pdsyw-PC:~/Desktop$
15、邮箱查收到ip被ban的邮件
16、使用命令永久解封IP 地址
pdsyw@pdsyw-PC:~/Desktop$ sudo fail2ban-client set sshd unbanip 10.211.55.13
10.211.55.13
pdsyw@pdsyw-PC:~/Desktop$
pdsyw@pdsyw-PC:~/Desktop$ sudo fail2ban-client status sshd
Status for the jail: sshd
|- Filter
| |- Currently failed: 0
| |- Total failed: 15
| `- File list: /var/log/auth.log
`- Actions|- Currently banned: 0|- Total banned: 1`- Banned IP list:
pdsyw@pdsyw-PC:~/Desktop$
17、通过被解封的终端测试ssh,连接成功
uos@uos-PC:~/Desktop$ ssh pdsyw@10.211.55.48
pdsyw@10.211.55.48's password:
验证成功
Welcome to UnionTech OS Desktop 20 Professionalhomepage:https://www.chinauos.com/bugreport:https://bbs.chinauos.com/
pdsyw@pdsyw-PC:~$
相关文章:

统信UOS 1060上通过Fail2Ban来Ban IP
原文链接:统信UOS 1060上通过Fail2Ban来Ban IP hello,大家好啊,今天给大家带来一篇在统信UOS 1060上安装Fail2Ban并且当ip被ban后通过邮件发送通知的文章。Fail2Ban 是一个用于防止暴力攻击的开源软件。它可以扫描日志文件(例如&a…...

Linux系统编程:文件描述符以及IO多路复用
书接上回,我们之前学习的文件系统编程都是在内存空间中的文件流(用户态文件缓冲区)内进行操作的,比如使用的fopen、fclose、fread和fwrite等等都是库函数,并没有用到内核态的功能(实际上库函数中调用的是内…...

python基于django的留学生服务管理平台
留学服务管理平台的用户是系统最根本使用者,按需要分析系统包括三类用户:学生、教师、管理员。这三类用户对系统的需求简要如下。技术栈 后端:pythondjango 前端:vueCSSJavaScriptjQueryelementui 开发语言:Python 框架…...
C++ 之 Map
Map map 是C STL中的关联容器, key-Value键值对存储,一对一的映射关系。 内部结构采用的是红黑树, 它会实现对数据的自动排序 ,所以map内部所有的数据都是有序的。 #include <map>定义的结构: map<数据类型1, 数据类型…...

MongoDB——centOS7环境Mongodb权限管理(图解版)
目录 一、MongDB权限概述1.1、MongDB权限概述1.2、MongDB权限列表 二、Mongodb权限管理示例2.1、创建账号2.1.1、创建管理员用户2.1.2、开启认证2.1.3、创建普通账号 一、MongDB权限概述 1.1、MongDB权限概述 mongodb是没有默认管理员账号,所以要先添加管理员账号…...
AndroidX项目接入穿山甲广告填坑
本文旨在记录初步接入过程遇到的一点点小问题,更详细的文档还是要参考官方文档。 一、项目版本 GradlePlugin:8.0.2 Gradle:8.0 Kotlin:1.7.20 compileSdk:34 compose-bom:2022.10.00 AS:2022.2.1 …...
汽车电子 - matlab - 用法
汽车电子 - matlab - 用法 面向对象 面向对象 % Man.m classdef Man < handle%UNTITLED2 此处显示有关此类的摘要% 此处显示详细说明properties(Accessprivate) %私有变量scoreendpropertiesageheightendmethodsfunction obj Man(inputArg1,inputArg2)%UNTITLED2 构造此…...

freefilesync文件同步软件
下载 下载链接 https://freefilesync.org/download.php 往下拉,看到下载的链接 下载windows版本 下载地址: https://freefilesync.org/download/FreeFileSync_13.0_Windows_Setup.exe 直接复制到浏览器中访问就能下载 安装 双击安装包,一路默…...

【2023】M1/M2 Mac 导入Flac音频到Pr的终极解决方案
介绍 原作者链接:https://github.com/fnordware/AdobeOgg 很早之前就发现了这个插件,超级好用,在windows上完全没有问题,可惜移植到mac就不行了(然后我给作者发了一个Issue,后来就有大佬把m1的编译出来了&…...

C# 图解教程 第5版 —— 第6章 方法
文章目录 6.1 方法的结构6.2 方法体内部的代码执行6.3 局部变量6.3.1 类型推断和 var 关键字6.3.2 嵌套块中的局部变量 6.4 局部常量6.5 控制流6.6 方法调用(*)6.7 返回值(*)6.8 返回语句和 void 方法6.9 局部函数6.10 参数&#…...

283 移动零
解题思路: \qquad 适用双指针,l:最左边‘0’元素坐标;r:l右边第一个非零元素坐标。 \qquad 最初的思路:将l和r初始化为0,遍历数组nums若任意一个指针到达数组末尾时停止。若当前nums[l] 0则移…...

maven 编译.../maven-metadata.xml 报错
文章目录 问题解决 问题 突然编译报错: 解决 打开maven的里离线工作模式,感觉就是下载包到本地. 一个是在maven设置里面 或者直接在maven编译的窗口:...
【Rust笔记】Rust与Java交互-JNI模块编写-实践总结
近期工作中有Rust和Java互相调用需求,这篇文章主要介绍如何用Rust通过JNI和Java进行交互,还有记录一下开发过程中遇到的一些坑。 JNI简单来说是一套Java与其他语言互相调用的标准,主要是C语言,官方也提供了基于C的C接口。 既然是C…...

uniapp:幸运大转盘demo
<template><view class"index"><image src"../../static/img/158.png" mode"" class"banner"></image><view class"title">绿色积分加倍卡拿到手软</view><almost-lottery :lottery…...
android 13.0 通过系统自定义服务控制屏幕亮屏和灭屏操作
1.前言 在13.0的产品开发中, 需要提供亮屏和灭屏的接口在8.0以后系统对于屏幕亮灭屏做了限制,直接调用亮屏和灭屏的方法就调不到了,所有就需要通过增加自定义服务的功能,来实现 通过系统服务的方法来调用系统关于控制屏幕亮屏灭屏的相关操作 2.通过系统自定义服务控制屏幕…...

【SQL】新建库表时,报错attempt to write a readonly database
目录 1.问题背景 2.问题原因 3.解决方式 4.结果 windows64位 Navicat sql vscode c 1.问题背景 需求是这样: 希望在调用初始化数据库方法时,查看是否有名为【POCT_PROCESS_CONFIG】的数据库表,如果没有就新建 我的数据库格式是这样 …...

C++ --STL
STL STL(Standard Template Library,标准模板库)STL从广义上分为: 容器(container)算法 (algorithm)迭代器 (iterator) 容器 和 算法之间通过迭代器进行无缝连接。STL几乎所有的代码都采用模板类或者模板函数 1、ST…...

一卷到底,大明哥带你横扫 Netty
上一个死磕 Java 专栏【死磕 NIO】(当然写的不是很好,争取今年将它重写一遍)是**【死磕 Netty】**的铺垫,对于我们 Java 程序员而言,我们在实际开发过程一般都不会直接使用 Java NIO 作为我们的网络编程框架,因为写出一套高质量的…...

Python Opencv实践 - 车辆统计(1)读取视频,移除背景,做预处理
示例中的图像的腐蚀、膨胀和闭运算等需要根据具体视频进行实验得到最佳效果。代码仅供参考。 import cv2 as cv import numpy as np#读取视频文件 video cv.VideoCapture("../../SampleVideos/Traffic.mp4") FPS 10 DELAY int(1000 / FPS) kernel cv.getStructu…...

ROS-6.参数的使用
参数的使用 参数服务结构命令行的使用方式运行小海龟命令介绍查看参数获取参数值设置参数保存参数到文件从文件导入参数 通过程序操作创建节点修改cmake编译运行 参数服务结构 ros中存在参数服务管理服务,管理这所有参数,所有节点剋订阅和发布这些节点 …...

接口测试中缓存处理策略
在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...
内存分配函数malloc kmalloc vmalloc
内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...
应用升级/灾备测试时使用guarantee 闪回点迅速回退
1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间, 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点,不需要开启数据库闪回。…...
从零实现富文本编辑器#5-编辑器选区模型的状态结构表达
先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql
智慧工地管理云平台系统,智慧工地全套源码,java版智慧工地源码,支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求,提供“平台网络终端”的整体解决方案,提供劳务管理、视频管理、智能监测、绿色施工、安全管…...

无法与IP建立连接,未能下载VSCode服务器
如题,在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈,发现是VSCode版本自动更新惹的祸!!! 在VSCode的帮助->关于这里发现前几天VSCode自动更新了,我的版本号变成了1.100.3 才导致了远程连接出…...
JVM垃圾回收机制全解析
Java虚拟机(JVM)中的垃圾收集器(Garbage Collector,简称GC)是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象,从而释放内存空间,避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...

微信小程序 - 手机震动
一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注:文档 https://developers.weixin.qq…...
ffmpeg(四):滤镜命令
FFmpeg 的滤镜命令是用于音视频处理中的强大工具,可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下: ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜: ffmpeg…...
Java入门学习详细版(一)
大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...