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