我一直在閱讀以編程方式獲取我的手機上連接到我的WIFI熱點的設備列表的主題。以編程方式刷新ARP表
我發現了一個useful post on stack overflow用下面的代碼和註釋說
這是不正確的ARP表不一定刷新 設備斷開連接時。有人說,你可以簡單地ping表中的所有設備,看看哪些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.
}
僅供參考:您可以控制ARP緩存時間。請參閱'/ proc/sys/net/ipv4/neigh/eth0/gc_stale_time' – BraveNewCurrency