upload-labs1-21关文件上传通关手册
upload-labs文件上传漏洞靶场
目录
- upload-labs文件上传漏洞靶场
- 第一关pass-01:
- 第二关Pass-02
- 第三关pass-03:
- 第四关pass-04:
- 第五关pass-05:
- 第六关pass-06:
- 第七关Pass-07
- 第八关Pass-08
- 第九关Pass-09
- 第十关Pass-10
- 第十一关Pass-11
- 第十二关Pass-12
- 第十三关Pass-13
- 第十四关Pass-14
- 第十五关Pass-15
- 第十六关Pass-16
- 第十七关Pass-17
- 第十八关Pass-18
- 第十九关Pass-19
- 第二十关Pass-20
- 第二十一关Pass-21
第一关pass-01:
看源码可知道
仅让上传此三类的文件类型,其他都不可以上传。
上传会有js弹窗,前端检查(前端校验):
我们可以有三种绕过方法:
第一种:关闭网页的js提示弹窗
第二种:检查源代码,进行修改
第三种:利用burp进行抓包,修改上传的文件后缀.php
第一种:
在火狐浏览器中,搜索about:config,将js关闭即可
再次上传,即可成功。
方法二:检查页面的代码,进行修改,删除相应的方法以及返回值
删掉返回函数,再次尝试。
删除完成后,再次上传
上传成功
验证:
可以正常解析
第三种:burp抓包,改文件的后缀即可成功。
burp进行抓包,修改文件的后缀,放包:
上传成功
第二关Pass-02
查看源码,可知道服务器端检查MIME类型(HTTP Header中的Content-Type)
验证是否可以解析:
第三关pass-03:
查看代码可以知道,后端服务器做了很多的限制,不允许上传不允许上传.asp,.aspx,.php,.jsp后缀文件!删除文件末尾的点,转换为小写,收尾去空等限制
我们可以上传文件的别名,使用别名来绕过黑名单
放包后,上传成功!
访问并观察是否能够解析php:
第四关pass-04:
代码:
绕过方法:
方法一:
根据源代码,改后缀,改为xxxx.php. .
验证是否可以解析:
方法二:
上传.htaccess文件,文件内容:
<FilesMatch "lc">
Sethandler application/x-httpd-php
</FilesMatch>
再上传文件名当中包含lc的木马文件文件(木马文件码或者一句话木马)
上传成功后,访问,看是否能被解析:
成功解析:
第五关pass-05:
观察源代码:
$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {if (file_exists(UPLOAD_PATH)) {$deny_ext = array(".php",".php5",".php4",".php3",".php2",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".Html",".Htm",".pHtml",".jsp",".jspa",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHtml",".asp",".aspx",".asa",".asax",".ascx",".ashx",".asmx",".cer",".aSp",".aSpx",".aSa",".aSax",".aScx",".aShx",".aSmx",".cEr",".sWf",".swf",".htaccess");$file_name = trim($_FILES['upload_file']['name']);$file_name = deldot($file_name);//删除文件名末尾的点$file_ext = strrchr($file_name, '.');$file_ext = strtolower($file_ext); //转换为小写$file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA$file_ext = trim($file_ext); //首尾去空if (!in_array($file_ext, $deny_ext)) {$temp_file = $_FILES['upload_file']['tmp_name'];$img_path = UPLOAD_PATH.'/'.$file_name;if (move_uploaded_file($temp_file, $img_path)) {$is_upload = true;} else {$msg = '上传出错!';}} else {$msg = '此文件类型不允许上传!';}} else {$msg = UPLOAD_PATH . '文件夹不存在,请手工创建!';}
}
由源代码可知,过滤方式和第四关差不多,这一个又过滤了.htaccess,所以我们无法上传.htaccess文件了
绕过方式同第四关方法一相同,使用xxxx.php. .后缀的文件进行上传绕过
第六关pass-06:
观察源代码:
发现,此关卡没有过滤大小写,所以可以大小写绕过
成功上传
第七关Pass-07
观察源代码
发现没有过滤空格,所以可以文件后缀+空格进行绕过
访问该地址,看是否能被解析:
成功解析
第八关Pass-08
观察源码
没有过滤后缀名末尾的点,所以可以在后缀+.进行绕过
访问木马文件的地址,观察能否成功解析:
第九关Pass-09
观察源码
发现没有过虑去除字符串::$DATA
所以可以文件后缀加上::$DATA进行绕过
成功上传后,访问该木马文件地址:
注意,访问时去掉::$DATA
成功解析
第十关Pass-10
源代码:
本关卡可以使用. .进行绕过,同第四关方法一相同,抓包修改后缀即可。
第十一关Pass-11
观察源码
$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {if (file_exists(UPLOAD_PATH)) {$deny_ext = array("php","php5","php4","php3","php2","html","htm","phtml","pht","jsp","jspa","jspx","jsw","jsv","jspf","jtml","asp","aspx","asa","asax","ascx","ashx","asmx","cer","swf","htaccess","ini");$file_name = trim($_FILES['upload_file']['name']);$file_name = str_ireplace($deny_ext,"", $file_name);$temp_file = $_FILES['upload_file']['tmp_name'];$img_path = UPLOAD_PATH.'/'.$file_name; if (move_uploaded_file($temp_file, $img_path)) {$is_upload = true;} else {$msg = '上传出错!';}} else {$msg = UPLOAD_PATH . '文件夹不存在,请手工创建!';}
}
将黑名单当中的后缀名进行替换,只要遇到黑名单当中的后缀就替换成空
所以,本关卡可以使用双写进行绕过xxx.pphphp
访问该木马文件地址,看是否能够解析:
成功解析:
第十二关Pass-12
源代码
$is_upload = false;
$msg = null;
if(isset($_POST['submit'])){$ext_arr = array('jpg','png','gif');$file_ext = substr($_FILES['upload_file']['name'],strrpos($_FILES['upload_file']['name'],".")+1);if(in_array($file_ext,$ext_arr)){$temp_file = $_FILES['upload_file']['tmp_name'];$img_path = $_GET['save_path']."/".rand(10, 99).date("YmdHis").".".$file_ext;if(move_uploaded_file($temp_file,$img_path)){$is_upload = true;} else {$msg = '上传出错!';}} else{$msg = "只允许上传.jpg|.png|.gif类型文件!";}
}
0x00截断绕过:
文件名后缀就一个%00字节,可以截断某些函数对文件名的判断。在许多语言函数中,处理字符串 的函数中0x00被认为是终止符。网站上传函数处理 XXX.php%00.jpg 时,首先后缀名是合法的jpg格式,可以上传,在保存文件时,遇到%00字符丢弃后面的jpg,文件后缀最终保存的后缀名为xxx.php.
本关卡观察源码发现,为GET请求:
直接上传php文件,提示报错
上传png图片码或者在图片当中插入一句话木马
进行%00截断
复制木马文件地址链接,验证是否能够解析:
注意:删掉%00后面的部分,然后再访问执行
成功解析:
第十三关Pass-13
观察源码:
$is_upload = false;
$msg = null;
if(isset($_POST['submit'])){$ext_arr = array('jpg','png','gif');$file_ext = substr($_FILES['upload_file']['name'],strrpos($_FILES['upload_file']['name'],".")+1);if(in_array($file_ext,$ext_arr)){$temp_file = $_FILES['upload_file']['tmp_name'];$img_path = $_POST['save_path']."/".rand(10, 99).date("YmdHis").".".$file_ext;if(move_uploaded_file($temp_file,$img_path)){$is_upload = true;} else {$msg = "上传失败";}} else {$msg = "只允许上传.jpg|.png|.gif类型文件!";}
}
本关卡和上一关基本一致,区别为本关卡为POST请求
同理还是使用%00截断,注意的是,POST请求在使用%00截断时,%00需要进行url编码处理
编码后:
放包后,成功上传,复制图片木马地址,进行访问,看是否能够解析
注意:在访问时该木马文件地址时,还是删掉%00后面的内容
成功解析:
另外一种方法:
还可以在上传的时候,在后缀处添加空格,将空格的对应16进制编码改为00,放包即可
找到对应的16进制位,将16进制数值20改为00,放包即可
访问木马,看是否被解析:
注意:将木马地址当中的%00后面的内容删除掉,留php后缀的木马文件即可
成功解析执行
第十四关Pass-14
源代码
function getReailFileType($filename){$file = fopen($filename, "rb");$bin = fread($file, 2); //只读2字节fclose($file);$strInfo = @unpack("C2chars", $bin); $typeCode = intval($strInfo['chars1'].$strInfo['chars2']); $fileType = ''; switch($typeCode){ case 255216: $fileType = 'jpg';break;case 13780: $fileType = 'png';break; case 7173: $fileType = 'gif';break;default: $fileType = 'unknown';} return $fileType;
}$is_upload = false;
$msg = null;
if(isset($_POST['submit'])){$temp_file = $_FILES['upload_file']['tmp_name'];$file_type = getReailFileType($temp_file);if($file_type == 'unknown'){$msg = "文件未知,上传失败!";}else{$img_path = UPLOAD_PATH."/".rand(10, 99).date("YmdHis").".".$file_type;if(move_uploaded_file($temp_file,$img_path)){$is_upload = true;} else {$msg = "上传出错!";}}
}
通过源码分析可得,源码读取前2个字节判断上传文件的类型,判断通过后,便重新给文件赋予新的后缀名。
本关可以使用图片码,搭配文件包含来进行绕过,因为存在include ,所以会以本文的形式读取webshell.jpg
的内容,这样存在于webshell.jpg
里的一句话木马就可以执行
图片码制作:
copy 1.png /b + shell.php /a webshell.jpg或者使用编辑器工具,直接在图片当中插入一句话木马即可
通过文件包含,去包含这个图片马,包含后,里面的数据信息会当中php代码进行执行。
文件包含后,成功执行,并解析:
第十五关Pass-15
源码:
通过源码分析:
image_type_to_extension 根据指定的图像类型返回对应的后缀名
做法和14关一样,相同的方法进行绕过。
第十六关Pass-16
本关卡需要开启php_exif模块,在phpstudy扩展当中找到该模块,开启即可
源码:
由源码可得:
exif_imagetype() 判断一个图像的类型,读取一个图像的第一个字节并检查其签名。
本函数可用来避免调用其它 exif 函数用到了不支持的文件类型上或和 [$_SERVER’HTTP_ACCEPT’] 结合使用来检查浏览器是否可以显示某个指定的图像。
绕过方式和做法同14关一样。
第十七关Pass-17
源码:
$is_upload = false;
$msg = null;
if (isset($_POST['submit'])){// 获得上传文件的基本信息,文件名,类型,大小,临时文件路径$filename = $_FILES['upload_file']['name'];$filetype = $_FILES['upload_file']['type'];$tmpname = $_FILES['upload_file']['tmp_name'];$target_path=UPLOAD_PATH.'/'.basename($filename);// 获得上传文件的扩展名$fileext= substr(strrchr($filename,"."),1);//判断文件后缀与类型,合法才进行上传操作if(($fileext == "jpg") && ($filetype=="image/jpeg")){if(move_uploaded_file($tmpname,$target_path)){//使用上传的图片生成新的图片$im = imagecreatefromjpeg($target_path);if($im == false){$msg = "该文件不是jpg格式的图片!";@unlink($target_path);}else{//给新图片指定文件名srand(time());$newfilename = strval(rand()).".jpg";//显示二次渲染后的图片(使用用户上传图片生成的新图片)$img_path = UPLOAD_PATH.'/'.$newfilename;imagejpeg($im,$img_path);@unlink($target_path);$is_upload = true;}} else {$msg = "上传出错!";}}else if(($fileext == "png") && ($filetype=="image/png")){if(move_uploaded_file($tmpname,$target_path)){//使用上传的图片生成新的图片$im = imagecreatefrompng($target_path);if($im == false){$msg = "该文件不是png格式的图片!";@unlink($target_path);}else{//给新图片指定文件名srand(time());$newfilename = strval(rand()).".png";//显示二次渲染后的图片(使用用户上传图片生成的新图片)$img_path = UPLOAD_PATH.'/'.$newfilename;imagepng($im,$img_path);@unlink($target_path);$is_upload = true; }} else {$msg = "上传出错!";}}else if(($fileext == "gif") && ($filetype=="image/gif")){if(move_uploaded_file($tmpname,$target_path)){//使用上传的图片生成新的图片$im = imagecreatefromgif($target_path);if($im == false){$msg = "该文件不是gif格式的图片!";@unlink($target_path);}else{//给新图片指定文件名srand(time());$newfilename = strval(rand()).".gif";//显示二次渲染后的图片(使用用户上传图片生成的新图片)$img_path = UPLOAD_PATH.'/'.$newfilename;imagegif($im,$img_path);@unlink($target_path);$is_upload = true;}} else {$msg = "上传出错!";}}else{$msg = "只允许上传后缀为.jpg|.png|.gif的图片文件!";}
}
分析源码可得:
本关卡为二次渲染:
在我们上传文件后,网站会对图片进行二次处理(格式、尺寸要求等),服务器会把里面的内容进行替换更新,处理完成后,根据我们原有的图片生成一个新的图片并放到网站对应的标签进行显示。绕过:
配合文件包含漏洞:
将一句话木马插入到网站二次处理后的图片中,也就是把一句话插入图片在二次渲染后会保留的那部分数据里,确保不会在二次处理时删除掉。这样二次渲染后的图片中就存在了一句话,在配合文件包含漏洞获取webshell。简单说就是,先正常的上传一个图片马,去正常的访问,发现一句话木马没有了,然后将上传的图片马下载下来,和原始的图片码进行对比,看哪里变了,哪里没变,在没变的地方,插入一句话木马,再次上传,结合文件包含去访问即可。
正常的去上去带有一句话木马的图片马:
点击上传:可成功上传,然后去访问
复制该图片马的地址,去访问:
访问发现,我们的一句话木马被删掉了:
这时,我们将上传的木马下载下来,进行和源图片马就行对比:
对比发现变化的地方很多,只有头部没有变化,所以我们在头部插入我们的一句话木马:
再次上传我们下载下来的图片:
再次去访问:
成功解析:
第十八关Pass-18
源码:
$is_upload = false;
$msg = null;if(isset($_POST['submit'])){$ext_arr = array('jpg','png','gif');$file_name = $_FILES['upload_file']['name'];$temp_file = $_FILES['upload_file']['tmp_name'];$file_ext = substr($file_name,strrpos($file_name,".")+1);$upload_file = UPLOAD_PATH . '/' . $file_name;if(move_uploaded_file($temp_file, $upload_file)){if(in_array($file_ext,$ext_arr)){$img_path = UPLOAD_PATH . '/'. rand(10, 99).date("YmdHis").".".$file_ext;rename($upload_file, $img_path);$is_upload = true;}else{$msg = "只允许上传.jpg|.png|.gif类型文件!";unlink($upload_file);}}else{$msg = '上传出错!';}
}
通过源码分析,本关卡可以使用条件竞争进行绕过:
也可以使用文件包含,进行包含图片马
条件竞争:
在服务器删除我们上传的非法文件之前,访问这个文件,从而生成另一个木马文件,用这个木马文件getshell竞争条件原理:
网站允许上传任意文件,然后检测文件中若有webshell,就删除文件;若不是指定类型文件,那么就使用unlink删除文件
在删除之前访问上传的php文件,从而执行上传文件中的php代码
在我们上传这个木马文件,上传到服务器之前在重命名删除之前去抢占这个文件,从而执行当中的php恶意代码
为了呈现比较明显的效果,我们在木马文件当中写入这句话:
php一句话创建以及写入文件内容:
<?php fwrite(fopen("cmd.php","w"),'<?php @eval($_POST["SHELL"]);?>');?>
上传时进行抓包,发给intruder模块
清空标记的变量,将payload设置为空值爆破
可将线程调高一些
接下来,访问shell.php的地址,再进行抓包,发给intruder模块
其余配置信息和以上一致,接下来进行攻击即可。
状态码为200,说明抢占shell.php成功,木马中的php代码成功执行,接下来停止攻击,访问木马当中生成的cmd.php木马文件即可。
验证是否能够成功解析:
成功解析:
另外一种方法是,上传图片马,使用文件包含去包含这个图片马:
正常的去上传:
尝试文件包含:
一样还是可以成功被解析出来
第十九关Pass-19
本关卡上传路径和其他关卡不同,本关上传路径上传后会发现上传到网站的www目录下,可进行修改
myupload.php修改一下路径
function setDir( $dir ){if( !is_writable( $dir ) ){return "DIRECTORY_FAILURE";} else { $this->cls_upload_dir = $dir."/"; // 这里改一下,加个斜杠return 1;......
其他的操作和绕过方式同18关一致,也可使用文件包含进行绕过。
上传图片马,由于存在include.php,所以可通过include.php进行文件包含,同18关一样。
第二十关Pass-20
源码:
$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {if (file_exists(UPLOAD_PATH)) {$deny_ext = array("php","php5","php4","php3","php2","html","htm","phtml","pht","jsp","jspa","jspx","jsw","jsv","jspf","jtml","asp","aspx","asa","asax","ascx","ashx","asmx","cer","swf","htaccess");$file_name = $_POST['save_name'];$file_ext = pathinfo($file_name,PATHINFO_EXTENSION);if(!in_array($file_ext,$deny_ext)) {$temp_file = $_FILES['upload_file']['tmp_name'];$img_path = UPLOAD_PATH . '/' .$file_name;if (move_uploaded_file($temp_file, $img_path)) { $is_upload = true;}else{$msg = '上传出错!';}}else{$msg = '禁止保存为该类型文件!';}} else {$msg = UPLOAD_PATH . '文件夹不存在,请手工创建!';}
}
源码分析可得,save_name
可控,可以通过 .
,空格,00截断绕过对后缀的判断,进行绕过
方法一:%00截断进行绕过
上传webshell:
成功上传:
注意:访问时,将%00后面的内容进行删除,只留下php后缀的木马即可,成功解析文件
方法二:在后缀后加上/.让服务器认为是目录,匹配时会匹配成php/.,绕过检测
修改后,放包即可:
成功上传,复制地址链接,访问,验证是否能够解析成功:
成功解析
方法三:相同的位置,在POST请求体当中,上传的文件,在重命名的文件处修改后缀名,php+空格也可以进行绕过(和上述操作一致,区别就是后缀后+空格)同理+.也可以
第二十一关Pass-21
源码:
$is_upload = false;
$msg = null;
if(!empty($_FILES['upload_file'])){//检查MIME$allow_type = array('image/jpeg','image/png','image/gif');if(!in_array($_FILES['upload_file']['type'],$allow_type)){$msg = "禁止上传该类型文件!";}else{//检查文件名$file = empty($_POST['save_name']) ? $_FILES['upload_file']['name'] : $_POST['save_name'];if (!is_array($file)) {$file = explode('.', strtolower($file));}$ext = end($file);$allow_suffix = array('jpg','png','gif');if (!in_array($ext, $allow_suffix)) {$msg = "禁止上传该后缀文件!";}else{$file_name = reset($file) . '.' . $file[count($file) - 1];$temp_file = $_FILES['upload_file']['tmp_name'];$img_path = UPLOAD_PATH . '/' .$file_name;if (move_uploaded_file($temp_file, $img_path)) {$msg = "文件上传成功!";$is_upload = true;} else {$msg = "文件上传失败!";}}}
}else{$msg = "请选择要上传的文件!";
}
通过源码分析可得:
源码逻辑:
- 检查MIME (通过抓包改Content-Type 绕过)
- 判断 POST参数 save_name 是否为空,
- 判断$file 是否为数组,不是数组以
.
分割化为数组 - 取 $file 最后一个元素,作为文件后缀进行检查
- 取 f i l e 第一位和第 ‘ file 第一位和第` file第一位和第‘file[count($file) - 1]`作为文件名和后缀名保存文件
思路:
上传 webshell.php
, 修改save_name
为数组绕过对 f i l e 的切割,最后 file 的切割,最后 file的切割,最后file 最后一个元素是 save_name[2] = png
绕过后缀检测 , 然后reset($file) = webshell.php
。相当于抓包,将save_name修改为数组,save_name[0]的值为webshell.php/,save_name[2]的值为png,放包即可。上传图片马或者带有一句话木马的图片格式文件。
$file[1]` 没有定义为空,`count($file)` 的值为`$file[count($file) - 1]` = `$file[1]
所以最后上传的文件为webshell.php
操作:
使用数组进行绕过
成功上传:
复制图片地址链接,进行访问,看是否能够被成功解析:
成功解析:
注意:
上传时,POST请求体当中的,构造的save_name数组当中的上传文件名的信息后缀不用加/.,加/即可,否则上传失败
文章不妥之处,欢迎批评指正!
相关文章:
upload-labs1-21关文件上传通关手册
upload-labs文件上传漏洞靶场 目录 upload-labs文件上传漏洞靶场第一关pass-01:第二关Pass-02第三关pass-03:第四关pass-04:第五关pass-05:第六关pass-06:第七关Pass-07第八关Pass-08第九关Pass-09第十关Pass-10第十一…...
MATLAB遗传算法求解生鲜货损制冷时间窗碳排放多成本车辆路径规划问题
MATLAB遗传算法求解生鲜货损制冷时间窗碳排放多成本车辆路径规划问题实例 1、问题描述 已知配送中心和需求门店的地理位置,并且已经获得各个门店的需求量。关于送货时间的要求,门店都有规定的时间窗,对于超过规定时间窗外的配送时间会产生相应的惩罚成本。为保持生鲜农产品的…...
界面控件DevExpress .NET应用安全 Web API v23.1亮点:支持Swagger模式
DevExpress拥有.NET开发需要的所有平台控件,包含600多个UI控件、报表平台、DevExpress Dashboard eXpressApp 框架、适用于 Visual Studio的CodeRush等一系列辅助工具。 DevExpress 今年第一个重要版本v23.1日前已正式发布了,该版本拥有众多新产品和数十…...
SpringMVC之CRUD------增删改查
目录 前言 配置文件 pom.xml文件 web.xml文件 spring-context.xml spring-mvc.xml spring-MyBatis.xml jdbc.properties数据库配置文件 generatorConfig.xml log4j2日志文件 后台 PageBaen.java PageTag.java 切面类 biz层 定义一个接口 再写一个实现类 …...
微信小程序开发教学系列(4)- 抖音小程序组件开发
章节四:抖音小程序组件开发 在本章中,我们将深入探讨抖音小程序的组件开发。组件是抖音小程序中的基本构建块,它们负责展示数据和与用户交互。了解组件的开发方法和使用技巧是进行抖音小程序开发的重要一步。 4.1 抖音小程序的基本组件 抖…...
RabbitMQ反序列化失败:Failed to convert message
🎈 1 参考文档 RabbitMQ消费消息坑:failed to convert serialized Message content | jiuchengi-cnblogs 🔍2 问题描述 org.springframework.amqp.rabbit.support.ListenerExecutionFailedException: Failed to convert messageat org.sprin…...
CTFSHOW 年CTF
1.除夕 php的弱类型,用小数点绕过 这里后面直接加字母不行 2.初三 error_reporting(0); extract($_GET); include "flag.php"; highlight_file(__FILE__); 这里通过extract将get的参数导入为了变量 $_function($__,$___){return $__$___?$___:$__; }; …...
肖sir__设计测试用例方法之状态迁移法05_(黑盒测试)
设计测试用例方法之状态迁移法 一、状态迁移图 定义:通过描绘系统的状态及引起系统状态转换的事件,来表示系统的行为 案例: (1) 订机票案例1: l向航空公司打电话预定机票—>此时机票信息处于“完成”状…...
无涯教程-JavaScript - IMPRODUCT函数
描述 IMPRODUCT函数以x yi或x yj文本格式返回1到255个复数的乘积。两个复数的乘积为- $$(A BI)(C DI)(AC-BD)(A B)1 $$ 语法 IMPRODUCT (inumber1, [inumber2] ...)争论 Argument描述Required/OptionalInumber11 to 255 complex numbers to multiply.Required[inumbe…...
yapi以及gitlab的容器化部署
yapi部署: https://blog.csdn.net/Chimengmeng/article/details/132074922 gitlab部署 使用docker-compose.yml version: 3 services: web: image: twang2218/gitlab-ce-zh:10.5 restart: always hostname: 192.168.xx.xx environm…...
TCP、UDP 协议的区别,各自的应用场景
分析&回答 TCP 传输控制协议,提供的是面向连接、可靠的字节流服务。当客户和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能传输数据。TCP提供超时重发,丢弃重复数据,检验数据,流量控制等功能&…...
C高级 DAY3
一、shell中的变量 shell本身是擅长运行指令,是一种弱数据类型语言 它与c语言中定义变量有所不同 C中: 存储类型 数据类型 变量名;shell中: 变量变量的值 ----->如果变量的值中间没有空格直接使用 变量变量的值 ----->变量…...
Linux CentOS7命令及命令行
Linux CentOS7中命令及命令行是非常重要的概念。对大多数初学者来说是既熟悉又了解甚少。本文初步讨论这方面的内容,与同行者交流。 一、命令 命令又称为指令,(英语命令 command,可用简写cmd表示),在终端…...
【C++入门到精通】C++入门 ——搜索二叉树(二叉树进阶)
阅读导航 前言一、搜索二叉树简介1. 概念2. 基本操作⭕搜索操作🍪搜索操作基本代码(非递归) ⭕插入操作🍪插入操作基本代码(非递归) ⭕删除操作🍪删除操作基本代码(非递归࿰…...
学成在线-网站搭建
文章目录 代码素材来自b站pink老师 <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>学成在线首…...
stm32同芯片但不同flash工程更换Device出现报错
目录 1. 问题描述2. 解决方案 1. 问题描述 stm32同芯片但不同flash工程更换Device出现报错 2. 解决方案 更换Device,我是从ZE换为C8: 把这个从HD更换为MD 解决!...
Element UI实现每次只弹出一个Message消息提示
前言 在开发Web应用程序时,我们经常需要使用消息提示来向用户展示重要信息。Element UI提供了一个方便易用的组件——Message,可以用于显示各种类型的消息提示。 然而,默认情况下,当多个消息提示同时触发时,它们会依…...
「网页开发|前端开发|Vue」04 快速掌握开发网站需要的Vue基础知识
本文主要介绍使用Vue进行前端开发的一些必备知识,比如:Vue应用实例,Vue的组件概念,模板语言和模板语法,计算属性,路由配置等等。 文章目录 本系列前文传送门前言一、Vue实例:项目入口二、模板语…...
解决Redis分布式锁主从架构锁失效问题的终极方案 含面试题
面试题分享 2023最新面试合集链接 2023大厂面试题PDF 面试题PDF版本 java、python面试题 项目实战:AI文本 OCR识别最佳实践 AI Gamma一键生成PPT工具直达链接 玩转cloud Studio 在线编码神器 玩转 GPU AI绘画、AI讲话、翻译,GPU点亮AI想象空间 史上最全文档AI绘画stab…...
建站系列(三)--- 网络协议
目录 相关系列文章前言一、定义二、术语简介三、协议的组成要素四、网络层次划分五、常见网络协议划分六、常用协议介绍(一)TCP/IP(二)HTTP协议(超文本传输协议)(三)SSH协议 相关系列…...
jetson orin nx无显示器启动
sudo apt-get install xserver-xorg-core-hwe-18.04 sudo apt-get install xserver-xorg-video-dummy在 /usr/share/X11/xorg.conf.d/ 中添加 xorg.conf 文件。 Section "Monitor"Identifier "Monitor0"HorizSync 28.0-80.0VertRefresh 48.0-75.0Modeline…...
【APUE】标准I/O库
目录 1、简介 2、FILE对象 3、打开和关闭文件 3.1 fopen 3.2 fclose 4、输入输出流 4.1 fgetc 4.2 fputc 4.3 fgets 4.4 fputs 4.5 fread 4.6 fwrite 4.7 printf 族函数 4.8 scanf 族函数 5、文件指针操作 5.1 fseek 5.2 ftell 5.3 rewind 6、缓冲相关 6.…...
es6---模块化
main.js import { bar } from "./module1"; import module2 from "./module2"; bar() module2()module1.js // 多变量导出,导入变量需要变量名一对一映射 export const module1module1 export function bar(params) {console.log(module1) }m…...
【项目 计网12】4.32UDP通信实现 4.33广播 4.34组播 4.35本地套接字通信
文章目录 4.32UDP通信实现udp_client.cudp_server.c 4.33广播bro_server.cbro_client.c 4.34组播multi_server.cmulti_client.c 4.35本地套接字通信ipc_server.cipc_client.c 4.32UDP通信实现 udp_client.c #include <stdio.h> #include <stdlib.h> #include <…...
创建简单的 Docker 数据科学映像
推荐:使用NSDT场景编辑器快速搭建3D应用场景 为什么选择 Docker for Data Science? 作为一名数据科学家,拥有一个标准化的便携式分析和建模环境至关重要。Docker 提供了一种创建可重用和可共享的数据科学环境的绝佳方法。在本文中ÿ…...
angualr:CSS一个div内两个子元素的高度自适应
问题: 如题 参考: CSS一个div内两个子元素的高度自适应-腾讯云开发者社区-腾讯云...
Java基础之static关键字
目录 静态的特点第一章、静态代码块第二章、静态属性第三章、静态方法调用静态方法时静态方法中调用非静态方法时 第四章、static关键字与其他关键字 友情提醒 先看文章目录,大致了解文章知识点结构,点击文章目录可直接跳转到文章指定位置。 静态的特点…...
iPhone 15 Pro有5项重大设计升级,让iPhone 15看起来很无聊
距离苹果9月份的发布会还有不到一周的时间,我们很快就会第一次看到iPhone 15系列。源源不断的传言表明,这一代人将对大多数机型进行另一次增量更新,这对那些想换iPhone 14或更旧手机的人来说是个坏消息。 但这一次的高端选择,iPh…...
xCode14.3.1运行MonkeyDev出现“Executable Not Found“的解决办法
安装MonkeyDev遇到的坑 环境:Xcode Version 14.3.1 (14E300c) 错误提示 is not a valid path to an executable file. 报错 /Users/xxxx//Library/Developer/Xcode/DerivedData/MonTest-ccparhdyzjuqhjdergwrngpfwwoh/Build/Products/Debug-iphoneos/MonTest.app…...
C# Emgu.CV+Tesseract实现识别图像验证码
效果图,简单的还行,复杂的。。。拉跨 懒得写讲解了,全部源码直接上吧 /// <summary>/// 验证码识别/// </summary>public partial class FrmCodeIdentify : FrmBase{private string _filePath;// 原图像Image<Bgr, byte> …...
wordpress采集生成用户插件/关键词搜索优化外包
php中检测mysql扩展是否可用的例子,比如检测mysql_connect、mysqli_connect等。代码:复制代码 代码示例:/*** 检测可用的mysql扩展* by www.jbxue.com*/function mysqlinstalled (){if (function_exists ("mysql_connect")){return true;} els…...
和林格尔网站制作/如何找客户资源
《奔跑吧linux內核》3.2筆記,不足之處還望大家批評指正進程大致可以分為交互式進程,批處理進程和實時進程。對於不同的進程采用不同的調度策略,目前Linux內核中默認實現了4種調度策略,分別是deadline、realtime、CFS和idle&#x…...
余姚网站建设哪家好/公司网站建设步骤
1 新建 项目右键-->Dynamic web project动态WEB项目 2 在新建项目上面 3 转载于:https://www.cnblogs.com/cici-new/archive/2013/05/14/3078082.html...
wordpress开发视频教程/网页搜索引擎大全
一、痔疮用药市场规模 痔疮,是人类特有的常见病、多发病。据有关普查资料表明,痔疮等肛门直肠疾病的发病率为59.1%,痔疮占所有肛肠疾病中的87.25%,而其中又以内痔最为常见,占所有肛肠疾病的52.19%。男女均可得病&#…...
登录器显的窗口网站怎么做/网络营销推广方案
数据结构实验之图论三:判断可达性 Description 在古老的魔兽传说中,有两个军团,一个叫天灾,一个叫近卫。在他们所在的地域,有n个隘口,编号为1…n,某些隘口之间是有通道连接的。其中近卫军团在1…...
深圳html5网站建设价格/教育机构网站
Centos 7.0设置/etc/rc.local无效问题解决参考文章: (1)Centos 7.0设置/etc/rc.local无效问题解决 (2)https://www.cnblogs.com/koboshi/p/4036312.html 备忘一下。...