如何使用MAC地址[Android]获取本地网络内任何设备的动态ip?

如何使用MAC地址[Android]获取本地网络内任何设备的动态ip?,android,wifimanager,Android,Wifimanager,我有一个物联网设备,我知道设备的Mac地址。 我的物联网设备已连接到wifi,我想知道是否有任何方法可以使用其mac地址了解该设备的本地ip?我的要求是使用Mac地址将android应用程序连接到同一wifi搜索设备的ip地址,并建立TCP连接。 到目前为止,我一直在寻找这个问题,我没有得到这个问题的完美答案,ssdp扫描确实是这个问题所需要的,或者是否有其他方法可以做到这一点 RARP在android中可能吗 请帮帮我 据我所知,有两种或三种可能的解决方案: 选项1:Ping广播地址,然后读取

我有一个物联网设备,我知道设备的Mac地址。 我的物联网设备已连接到wifi,我想知道是否有任何方法可以使用其mac地址了解该设备的本地ip?我的要求是使用Mac地址将android应用程序连接到同一wifi搜索设备的ip地址,并建立TCP连接。 到目前为止,我一直在寻找这个问题,我没有得到这个问题的完美答案,ssdp扫描确实是这个问题所需要的,或者是否有其他方法可以做到这一点

RARP在android中可能吗


请帮帮我

据我所知,有两种或三种可能的解决方案:

选项1:Ping广播地址,然后读取ARP表

这假设您无法在试图查找IP地址的远程设备上运行任何特殊代码,但它确实有一个已启用的ICMP堆栈。i、 你可以打乒乓球

假设此设备支持ICMP ping。您可以向子网上的广播地址发送一个或多个ICMP ping请求,并侦听子网上所有设备的响应。然后查阅本地ARP表,查看您回复的设备消息。您可以从任何计算机的命令行尝试此操作。假设您的本地ip为192.168.1.2,子网掩码为255.255.255.0。因此,子网的广播IP为192.168.1.255。因此,您可以在命令提示符Linux、Windows和Mac上执行此操作

$> ping 192.168.1.255   // let this run for a few seconds, then cancel after it retries a few times
$> arp -a               // this will dump the local ARP table of every MAC to IP mapping discovered and cached 
编写与之相当的Android代码需要做一些工作,但这应该是可能的。您可能需要使用NDK访问较低级别的套接字函数来读取arp表。您可以通过recvmsg获取源以太网

选项2:UDP广播

这假设您可以在远程设备上运行某种代码,远程设备可以响应这些代码。它只监听指定端口,例如UDP端口29999。与上面类似,finder Android设备只向子网掩码的广播地址发送一条广播UDP消息。此消息的有效负载只是您自己的协议,用于询问谁拥有88-66-aa-6c-d5-c1?该设备的响应与I have 88-66-aa-6c-d5-c1的效果类似。IP作为套接字recvfrom调用中的from地址返回。您还可以将其构建到协议负载中

选项3:已经有一段时间了,但这里有一些提示。
我记得当我在使用wifi的硬件产品上工作时,我们打算执行某种自动配置协议,其中目标设备甚至可能不在预定的wifi上,但我们想向其发送某种消息。我们尝试了将UDP广播到255.255.255.255,并将UDP数据包发送到设备之间的多播地址。我认为,当您广播到255.255.255.255或使用多播时,只要它们位于同一物理段或共享一个AP,它就会命中所有设备。需要一些实验。您可能可以将此方法与上面的选项1或选项2结合使用。

我已经搜索了关于此的内容,这是什么?您基本上需要列出LAN中的所有设备,并反复检查它们的MAC地址。我想你不知道如何获取LAN中的设备列表?谢谢你的评论@VladyslavMatviienko,我担心延迟,这就是为什么我不寻找连接到同一网络的设备列表,我想使用mac地址Ping设备以获取其ip,我想知道有没有办法做到这一点,如果这是不可能的,请发布您的答案,将所有连接的设备扫描到WIFI网络。此问题已在此处回答:在android中是否可能使用RARP?