java 获取arp表,java – Android arp表 – 开发问题

我正在编写的Android应用程序有两个问题.

我正在从/ proc / net / arp中读出本地arp表,并在哈希映射中保存ip和相应的mac地址.看我的功能.它运作正常.

/**

* Extract and save ip and corresponding MAC address from arp table in HashMap

*/

public Map createArpMap() throws IOException {

checkMapARP.clear();

BufferedReader localBufferdReader = new BufferedReader(new FileReader(new File("/proc/net/arp")));

String line = "";

while ((line = localBufferdReader.readLine()) != null) {

String[] ipmac = line.split("[ ]+");

if (!ipmac[0].matches("IP")) {

String ip = ipmac[0];

String mac = ipmac[3];

if (!checkMapARP.containsKey(ip)) {

checkMapARP.put(ip, mac);

}

}

}

return Collections.unmodifiableMap(checkMapARP);

}

>第一个问题:

我也在使用广播接收器.当我的应用程序收到状态WifiManager.NETWORK_STATE_CHANGED_ACTION时,我检查是否建立了与网关的连接.如果为true,我调用我的函数来读取arp表.但是在这个阶段,系统还没有构建arp表.有时当我收到连接状态时,arp表是空的.

有人有想法解决这个问题吗?

>第二个问题:

我想以持久的方式保存网关的ip和mac地址.现在我正在使用Shared Preferences.也许写入内部存储更好?

有小费吗?

解决方法:

对于第一个问题,您可以在睡眠一段时间之后启动一个运行该方法的新线程,或者直到它有一些条目(使用邮箱创建Runnable以获取Map) – 除非您需要直接使用地图,那么我认为唯一的方法是等待参赛作品.例如(如果您需要直接使用地图):

public Map createArpMap() throws IOException {

checkMapARP.clear();

BufferedReader localBufferdReader = new BufferedReader(new FileReader(new File("/proc/net/arp")));

String line = "";

while ((line = localBufferdReader.readLine()) == null) {

localBufferdReader.close();

Thread.sleep(1000);

localBufferdReader = new BufferedReader(new FileReader(new File("/proc/net/arp")));

}

do {

String[] ipmac = line.split("[ ]+");

if (!ipmac[0].matches("IP")) {

String ip = ipmac[0];

String mac = ipmac[3];

if (!checkMapARP.containsKey(ip)) {

checkMapARP.put(ip, mac);

}

}

} while ((line = localBufferdReader.readLine()) != null);

return Collections.unmodifiableMap(checkMapARP);

}

标签:java,android

来源: https://codeday.me/bug/20190709/1412401.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值