我想制作一个Android应用程序来查找在同一个wifi上连接的所有连接设备的IP地址。我试过这个:
for (int i = lower; i <= upper; i++) {
String host = subnet + i;
try {
InetAddress inetAddress = InetAddress.getByName(host);
if (inetAddress.isReachable(timeout)){
publishProgress(inetAddress.toString());
}
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
但它只能获得连接的手机的IP,而不是个人电脑。如何获得连接的PC的IP地址?
试试这个
public ArrayList<String> getClientList() {
ArrayList<String> clientList = new ArrayList<>();
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader("/proc/net/arp"));
String line;
while ((line = br.readLine()) != null) {
String[] clientInfo = line.split(" +");
String mac = clientInfo[3];
if (mac.matches("..:..:..:..:..:..")) { // To make sure its not the title
clientList.add(clientInfo[0]);
}
}
} catch (java.io.IOException aE) {
aE.printStackTrace();
return null;
}
return clientList;
}
并像这样使用它
ArrayList<String> list = getClientList();
for (String ip:list) {
Log.e(TAG,ip);
}
结果:
192.168.1.9
192.168.1.1
192.168.1.5
还检查这个question
许多网络完全禁止这种做法,这种做法被称为“无线隔离”或“客户端隔离”,它可以节省电池,提高吞吐量,如果网络是公共的,可以提高隐私,代价是一个客户端难以找到其他主机相同的WLAN。
对于其余的,ping通子网中的所有地址通常是最好的方法,即使有点慢。如果字符串subnet
以点结尾,则代码看起来没问题。
当然,所有这些在IPv6上毫无意义。