设备不在同一网段内,可以通过ARP的方式获取到MAC地址吗? 这个基本没可能,因为ARP请求包是广播包,是无法跨越路由器的。我们只能通过其他更上层的能够穿透路由器的协议的方式来获取MAC地址。目前主流公开的协议主要有NetBIOS over TCP/IP和SNMP,基于SNMP协议又有两种获取方式。 1.NetBIOS over TCP/IP:NetBIOS是Network Basic Input/Output System的缩写,它让在不同计算机上运行的不同程序,可以在局域网中互相连接和分享数据。我们现在用的主流操作系统,多数都使用NetBIOS over TCP/IP协议,就是将NetBIOS协议包放入到TCP/IP包里面。我们的电脑里有个小工具nbtstat就是通过这种方式获取目标主机信息的:
2.SNMP是专门设计用于在 IP 网络管理网络设备的一种标准协议。SNMP使网络管理员能够方便的管理网络,发现并解决网络问题。在SNMP协议里,有个编号为 1.3.6.1.2.1.2.2.1.6名称为ifPhysAddress的OID,这里面存储着这个设备的MAC地址,所以我们只要针对该OID做SNMP请求动作,对方就把它的MAC地址返回给我们。
3.通过SNMP里的ARP列表的方式获取其他主机的MAC:在SNMP协议里,还有个节点名称为ipNetToMediaTable的OID,这个是存储了该设备的ARP列表,我们对此OID做SNMP请求动作,对方就把它的ARP列表返回给我们,这样,我们通过此台设备,就能够了解到该网络里存在的其他设备的MAC地址。
当然,这些方法都要求对方支持NetBIOS或者SNMP(需要密码),如果没有开启这些服务,这种获取MAC地址的方法就会失败,这也是众多扫MAC地址软件跨网段获取信息不全的原因。
![dbd39854235ba0ed8a383fae34abb0b7.png](https://i-blog.csdnimg.cn/blog_migrate/bdb32235cfd3cb01f27b8d60285ff327.png)
![6254ad6387e7629baaac113f6b8f9a7c.png](https://i-blog.csdnimg.cn/blog_migrate/322862f9d47a47997f7de9fdd79da34a.jpeg)
![b83f0eb4b5c07805dfac0513c1a3c97e.png](https://i-blog.csdnimg.cn/blog_migrate/f62bd259eb67e4f2fc55ddaeea932ecd.jpeg)