我有一个iOT设备,我知道设备的Mac地址。我的iOT设备连接到我的wifi,我想知道有没有方法知道该设备的本地ip使用它的mac地址?我的要求是将android应用程序连接到相同的wifi上,使用Mac地址搜索设备的ip地址,并建立TCP连接。到目前为止,我已经对此进行了搜索,我还没有得到完美的答案,ssdp扫描是真正需要的,或者还有其他方法可以做到。
RARP在安卓系统中有可能吗?
请帮帮我。
发布于 2018-06-20 05:41:49
两种,也许三种,我知道的可能的解决方案:
选项1: Ping广播地址,然后读取ARP表
这假设您无法在您试图发现IP地址的远程设备上运行任何特殊代码,但它确实有一个已加密的ICMP堆栈。(即你可以点击它)
假设此设备支持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返回为套接字中继呼叫中的"from“地址。您也可以将其构建到协议有效负载中。
选项3:已经有一段时间了,但这里有一些提示。我记得当我使用wifi开发硬件产品时,我们打算做某种自动配置协议,目标设备可能不在预定的wifi上,但我们想给它发送某种信息。我们试验了一些广播UDP到255.255.255的混合,并将UDP数据包发送到设备之间的多播地址。我认为当您广播到255.255.255.255或使用多播时,只要它们位于同一物理段或共享AP,它就会击中所有设备。需要做一些实验。您可以将此方法与上面的备选方案1或2结合起来。
https://stackoverflow.com/questions/50940552
复制相似问题