user1917209
user1917209

Reputation: 205

Detecting all devices connected to my wifi router using Android Programming

I am trying to build an app in Android that would need the IP addresses of all devices (PCs and other mobile devices) connected to a wifi router (my local router). The IP addresses are the ones assigned to the devices by the router using DHCP. Moreover, the app that I am trying to build would be local to a device connected to the same router. I have looked all over the web for Android code that could accomplish this, but all I found was how to scan for wifi access-points. Is what I am trying to do possible using Android programming?

Upvotes: 3

Views: 7295

Answers (3)

hannunehg
hannunehg

Reputation: 327

You can do this by using the arp cache table by:

        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;
        }

Upvotes: 0

Gabe Sechan
Gabe Sechan

Reputation: 93561

There's no direct API for this. Its not like the wifi router gives everyone a list of all IPs it assigns. You could try pinging every IP on your wifi network (you can tell what IPs those are by netmask), but that will only work if the device is configured to return ICMP packets and your router doesn't block them.

What might work for your app is Wi-fi direct (http://developer.android.com/guide/topics/connectivity/wifip2p.html).

Upvotes: 2

ethrbunny
ethrbunny

Reputation: 10469

It totally depends on your router: if it has this sort of functionality exposed via API or other. Most routers don't permit this sort of deep-querying. You might look at tomato or dd-wrt if you want to have more control over it.

Upvotes: 0

Related Questions