如何快速获取内网所有设备的ip和mac

  • 在某些业务中,我们需要快速的获取内网所有ip和mac
  • 唯一的方案是:更新arp缓存 + 解析arp表
  • 目前全网搜集到的资料都只有这唯一方案,我们需要做的是缩短时间。

地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。地址解析协议是建立在网络中各个主机互相信任的基础上的,网络上的主机可以自主发送ARP应答消息,其他主机收到应答报文时不会检测该报文的真实性就会将其记入本机ARP缓存;由此攻击者就可以向某一主机发送伪ARP应答报文,使其发送的信息无法到达预期的主机或到达错误的主机,这就构成了一个ARP欺骗。ARP命令可用于查询本机ARP缓存中IP地址和MAC地址的对应关系、添加或删除静态对应关系等。相关协议有RARP、代理ARP。NDP用于在IPv6中代替地址解析协议。

  1. arp广播

    • 这是最底层的实现,如果拥有系统底层的权限,建议采用这种方式。以下几种方式都是基于此。
  2. ping

    • 发送icmp包,根据osi模型先去arp表中查询mac地址,如果没有,则广播arp数据帧,得到mac。
    • ping需要等待另一端返回响应,
    • 存在一个等待响应的时间,所以ping的方式比较慢。
  3. udp

    • 发送udp包,同ping一样,查询mac
    • udp协议不需要等待另一端响应
    • 不需要等待响应,所以udp的方式快
  1. 当环境有底层权限的时候,我们可以采用arp广播的方式去获取mac。比如Linux系统。
  2. 如果没有底层权限,例如没有root的Android设备,发送udp包是最好的方式了,博主在Android手机上测试基本达到毫秒级
  • 用以上方法更新arp表后,就可以提取本地的arp缓存了,然后解析出ip和mac。
  • 这个简单,就不说啦,各个平台的方式都不同,根据需要建议去Google搜索一波。
  1. 在网络上查了很多资料,然而很少有人说到根本。原理就是原理,不说是怎么来的。
  2. arp、udp、ping什么的,获取mac,为什么要怎么做?还记得初中计算机基础那本书嘛?osi七层模型完美的诠释了这一切。
  3. 傻傻的博主还在到处搜索ip如何转mac,搜索的方向就是个巨坑。