使用Android编程检测连接到我的wifi路由器的所有设备

时间:2013-07-08 14:03:01

标签: android

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

3 个答案:

答案 0 :(得分:2)

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

可能对您的应用有效的是Wi-Fi直接(http://developer.android.com/guide/topics/connectivity/wifip2p.html)。

答案 1 :(得分:0)

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

答案 2 :(得分: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;
        }