繁体   English   中英

如何从多播LAN地址中找到特定设备的IP地址?

[英]How to find the IP address of a specific device from a multicast LAN address?

我正在尝试编写一个 android 应用程序仪表板(最新的 Java android 5.1 棒棒糖),它能够控制我的 govee 灯,它有一个 LAN 控件 api,它连接到我的 LAN 上的多播地址(239.255.255.250),但我需要一个方法找到特定灯的 IP,以便我可以在用户与我的应用交互后向它发送命令。

ping 组播 IP 无响应(操作超时)。 环顾谷歌寻找一种方法,但找不到任何东西,所以想知道这里是否有人可以帮助我。 TY 为您的时间:)

假设您知道 mac 地址,您可以发送一个反向 ARP 数据包(反向地址解析协议)来获取 IP 地址。 ARP 本身通常用于将 map 和 IP 地址转换为 mac 地址,以便本地路由器可以正确转发数据包。 RARP 则相反。

另一种方法是从任何连接设备上的程序内部查询本地 ARP 缓存,看看是否有它。 因此,在程序中的 windows 操作系统上,您可以在控制台 window 中启动arp -a以查看当前的 arp 缓存。 唯一需要注意的是,特定值可能会超时并被删除。

这是后者的一个例子。

String mac = "1c-7e-81-9e-48-e8";
try {
    Runtime rt = Runtime.getRuntime();
    // send broadcast address
    rt.exec(new String[]{
            "ping","-n 1 -w 200 192.255.255.255"
    });
    // interrogate arp cache
    Process p = rt.exec(new String[]{
            "cmd.exe","/c","arp","-a"
    });

    BufferedReader in = new BufferedReader(
            new java.io.InputStreamReader(p.getInputStream()));
    String line1;
    while ((line1 = in.readLine()) != null) {
        if (line1.contains(mac)) {
            System.out.println(line1);
        }

    }

} catch (Exception e) {
    e.printStackTrace();
}

打印类似的东西

192.168.1.107         1c-7e-81-9e-48-e8     dynamic   

可能需要调整以上内容以满足您的确切要求。

当然,最简单的方法可能是强制发出并分配您选择的 static 地址。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM