2

我正在尝试在 Android 中构建一个应用程序,该应用程序需要连接到 wifi 路由器(我的本地路由器)的所有设备(PC 和其他移动设备)的 IP 地址。IP 地址是路由器使用 DHCP 分配给设备的地址。此外,我正在尝试构建的应用程序对于连接到同一路由器的设备来说是本地的。我在网上寻找可以完成此任务的 Android 代码,但我发现的只是如何扫描 wifi 接入点。我正在尝试使用 Android 编程吗?

4

3 回答 3

2

没有直接的 API。它不像wifi路由器给每个人一个它分配的所有IP的列表。您可以尝试 ping wifi 网络上的每个 IP(您可以通过网络掩码判断这些 IP 是什么),但这只有在设备配置为返回 ICMP 数据包并且您的路由器不阻止它们时才有效。

可能适用于您的应用的是 Wi-fi direct ( http://developer.android.com/guide/topics/connectivity/wifip2p.html )。

于 2013-07-08T14:08:50.083 回答
0

这完全取决于您的路由器:它是否具有通过 API 或其他方式公开的此类功能。大多数路由器不允许这种深度查询。如果你想对它有更多的控制权,你可以看看番茄dd-wrt 。

于 2013-07-08T14:08:22.780 回答
0

您可以通过以下方式使用 arp 缓存表来执行此操作:

        BufferedReader br = null;
        ArrayList<String[]> ipCache = new ArrayList<>(3);
        try {
            br = new BufferedReader(new FileReader("/proc/net/arp"));
            String line;
            while ((line = br.readLine()) != null) {
                String[] split = line.split(" +");
                if (split.length >= 4 ) {
                    if(!split[0].equals("IP") &&!split[0].equals(ROUTER_IP) ){
                        ipCache.add(split);
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                br.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        int ipsPonged = ipCache.size();
        if(ipsPonged>0){
            for (String[] client :
                    ipCache) {
                // if one ping test succeeds we are fine
                if(!ping(client[0])){
                    ipsPonged--;
                }
            }
            if(ipsPonged == 0){
                return true;
            }
        }else{
            return false;
        }
于 2016-04-12T11:24:06.260 回答