How to get Dynamic ip of any device within local network using MAC Address [Android]?

时间:2018-06-20 05:05:42

标签: android wifimanager

I have a iOT device , i know the Mac address of the device . My iOT device is connected to my wifi , i want to know is there any way to know the local ip of that device using it's mac address ? My requirement is to connect the android app to same wifi search for the device's ip address using Mac address and establish TCP connection . Till now i have searched regarding this , i didn't get the perfect answer for this , ssdp scanning is really required for this or is there any other way to do this .

is RARP possible in android ?

please help me .

1 个答案:

答案 0 :(得分:1)

我知道的两个甚至三个可能的解决方案:

选项1:ping广播地址,然后阅读ARP表

这假定您无法在要查找其IP地址的远程设备上运行任何特殊代码,但确实有一个ICMP堆栈出现问题。 (即您可以ping通)

假设此设备支持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”?设备对“我有88-66-aa-6c-d5-c1”的效果做出响应。 IP作为套接字recvfrom调用中的“发件人”地址返回。您也可以将其构建到协议有效负载中。

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