今天突发奇想,想获取一下比如百度服务器的MAC地址,也就是说我通过DNS查到了百度服务器的IP地址,然后想当然的认为通过ARP协议可以获取它的MAC地址。着手去做,发送主机不可达,起初我以为是服务器故意不响应,但是一琢磨,ARP协议是非常基础的协议,服务器绝对没有理由不响应,如果不响应,那正常发送给服务器的数据甚至都无法到达。所以是自己对ARP协议理解的不够透彻。
如何获取其他网络主机的MAC地址
you can not!ARP协议分为请求和响应两种,在请求时,以太网帧将会产生target mac address为全1的广播地址,对于二层广播,路由器是不转发的,主要是为了避免产生广播风暴。也就是说ARP请求分组根本无法跨越到其他网络中。更谈不上获取其他网络主机的MAC地址了。
如何将分组发送给其他网络主机
有两种可行的办法:
第一,对路由器进行配置,对所有其他网络的主机的ARP请求进行响应,于是发送主机发送的分组中就含有如下内容【远程主机IP,路由器的MAC地址】,当路由器接收到以太网帧后,取出IP分组,查看到远程主机的IP,通过查询路由表,将该分组发送到其他路由器上,当然了,生成的以太网帧中源地址和目的地址都要更改。经过一系列流程,到达最后目标路由器,目标路由器通过ARP协议获取目的IP主机的MAC地址,然后重新生成MAC帧发送给目的主机。这种方法称为代理ARP。
第二,当给目的主机发送分组时,先判断目的主机与发送主机是否在同一LAN下,可以通过目的主机IP和子网掩码做与计算,如果不是,直接发送给边界路由器,然后边界路由器进行同1所示转发。
但是不管是哪种,都需要先将数据发送给边界路由器上,然后才行。而让边界路由器接收数据的前提是分组中的数据链路层地址与其本身的地址相同。