【问题标题】:Detecting all devices connected to my wifi router using Android Programming使用Android编程检测连接到我的wifi路由器的所有设备
【发布时间】:2013-07-08 14:03:00
【问题描述】:

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

【问题讨论】:

    标签: android


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        您可以通过使用 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;
                }
        

        【讨论】:

        • Android 10 以上版本不允许访问“/proc/net/arp”。欲了解更多信息,请参阅link
        猜你喜欢
        • 1970-01-01
        • 2020-04-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-23
        • 1970-01-01
        • 2018-12-28
        • 1970-01-01
        相关资源
        最近更新 更多