Reputation: 205
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
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
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