【发布时间】:2013-12-15 08:40:38
【问题描述】:
我一直在阅读有关以编程方式在手机上获取连接到我的 WIFI 热点的设备列表的主题。
我找到了一个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.
}
【问题讨论】:
标签: java android linux networking arp