Я читал тему получения списка устройств, подключенных к моей горячей точке WIFI на моем телефоне программно.Программно обновить таблицы ARP
Я нашел useful post on stack overflow со следующим кодом и комментарием говоря
Это неверно, так как таблицы ARP не обязательно обновлять, когда отключает устройство. Скажем, скажем, что вы можете просто пинговать все устройства в таблице, чтобы увидеть, какие IP-адреса активны, но вполне возможно, что устройство брандмауэром не отвечает на запрос ICMP , и ваш ping завершится с ошибкой. Это решение, хотя и работающее, не является надежным и точным.
Мне было интересно, если чтение proc/net/arp недостаточно точным из-за проблем с обновлением, как вы можете заставить систему сделать обновление, чтобы получить точные данные?
private int countNumMac()
{
int macCount = 0;
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader("/proc/net/arp"));
String line;
while ((line = br.readLine()) != null) {
String[] splitted = line.split(" +");
if (splitted != null && splitted.length >= 4) {
// Basic sanity check
String mac = splitted[3];
if (mac.matches("..:..:..:..:..:..")) {
macCount++;
}
}
}
}
catch (Exception e) {
e.printStackTrace();
}
finally {
try {
br.close();
}
catch (IOException e) {
e.printStackTrace();
}
}
if (macCount == 0)
return 0;
else
return macCount-1; //One MAC address entry will be for the host.
}
FYI: Вы можете управлять временем кэширования ARP. См. '/ Proc/sys/net/ipv4/neigh/eth0/gc_stale_time' – BraveNewCurrency