为什么服务端无法获取客户端mac地址,客户端无法伪造源ip

时间:2024-03-14 19:33:42

为什么服务端无法获取客户端mac地址?

原理

数据包中的数据链路层是有mac地址的,但是这个mac地址不是客户端地址而是运营商出口的mac地址,因为数据包一层一层往上传递的时候是需要修改包中的源mac地址(例如路由器)。这样收到返回数据的时候才能一层一层往下传。为什么需要修改mac呢,假设我的主机ip是192.168.1.2,那我的路由器的ip显然是192.168.1.1,但是路由在上一层它的ip也是192.168.1.2,那么我返回的包到路由器结束呢,还是到主机才结束呢,我不知道这个包一个开始是从谁开始发过来的,所以我需要mac地址标识机器。所以mac地址会替换,服务器获取数据包里面的地址也只是运营商出口的mac地址。除非像网上说的在客户端装个插件什么的获取mac地址。

验证

我的电脑向服务器发送一个请求,用wireshark抓一下服务器返回来的包。因为服务器不好抓包,所以就从返回来的包查看,就当作服务器请求我的电脑。
下面是服务器的mac地址
为什么服务端无法获取客户端mac地址,客户端无法伪造源ip
可以看到是 52:54:00:…
接下来看一下抓包里面的源地址
为什么服务端无法获取客户端mac地址,客户端无法伪造源ip
上面destination是我的电脑的mac地址,下面的是返回包的源地址,显然不是服务器的mac的地址,而是服务器运营商出口的mac地址。

内网情况
上面是外网通讯的情况,那么内网之间通讯是通过mac地址通讯的,外网是可以通过ip标识,因为外网ip唯一 ,但是内网ip不唯一,有可能两个相同的内网ip接收,所以需要mac地址标识。那么继续验证一下。

下面是虚拟机往主机发来的一个包,因为是桥接模式所以是同样的mac地址,同时说明了,源mac没有被修改为路由器的mac的地址。既然内网之间通讯时通过mac地址的,这样就可以通过修改网卡的mac地址实现伪造mac地址了。
为什么服务端无法获取客户端mac地址,客户端无法伪造源ip

为什么客户端无法伪造源ip

同样的道理,数据包网上传递是会修改源ip地址,到了出口就会把源ip修改为外网ip。所以服务端获取到的ip依然是真实的ip。除非你使用跳板(ip代理)。又或者是服务器只是简单获取了x-forward-for这个可以伪造的请求头。