问题描述
在 Android 设备(以 Samsung Galaxy 为例)上,可以通过类似 Windows 操作系统中的命令行工具来查看 ARP 缓存。Windows 中可以使用 arp -a
命令来显示静态/动态 MAC 地址-IP 地址关联列表。
针对 Android 设备 5.1 版本,也有类似的 ARP 缓存吗?如果存在,请问如何在三星手机上查看当前的 IP-MAC 关联列表?
解决方案
在 Android 5.1 及更高版本中确实提供了访问等信息的方式。对于具体查看方法如下:
方案一:使用 /proc/net/arp
文件
根据之前网友提供的信息,在 Android 的文件系统中有一个名为 /proc/net/arp
的文件,它包含了需要的 ARP 缓存信息。
步骤:
- 安装一个具有文件管理功能的应用 (例如 ES File Explorer、Solid Explorer),这些应用通常自带
cat
这样的命令行工具来读取文本文件。 - 获取文件内容
- 使用该文件管理应用直接在手机上找到并打开
/proc/net/arp
文件,或使用其中集成的终端模拟器(如 ES File Explorer 的 Terminal) - 使用例如
cat /proc/net/arp
命令来查看这个文件的内容。
由于这需要的是仅读取文件,并非修改系统文件或其他高度受限的动作,因此 无需 root 权限 即可完成此操作。不过需要注意的是 /proc/net/arp
文件可能不会在所有 Android 版本上都可用。
方案二:使用 ip neighbor
命令
另一种查看 ARP 缓存的方法是通过执行 ip neighbor
命令,该命令可以显示设备附近的所有 IP 和 MAC 地址对。
步骤:
- 通过第三方终端模拟器访问
- 下载并安装一个支持
adb shell
或具有高级功能的 Termux 应用(提供adb shell
访问)。 - 执行命令
- 在 Termux 的外壳中或 ADB 模式下手动输入
ip neighbor show
命令,查看当前设备网络范围内的 ARP 缓存信息。此方法不需要 root 权限。
方案三:通过 Java 代码在 Android 应用里调用 bash
如果想通过编写一个 Android 应用获取 ARP 缓存并展示这些数据,则可能需要使用 shell 命令行工具进行操作,如下:
环境准备:
- 使用 Termux 应用或其他具备执行 shell 命令的应用/插件。
具体代码示例(Java):
import android.os.SystemProperties;
import java.io.InputStream;
public class ArpCacheTest {
static String exec(String cmd) {
Process p = null;
try {
Runtime runtime = Runtime.getRuntime();
p = runtime.exec(cmd);
p.waitFor(); // 等待命令执行完毕,并获取其标准输出
InputStream is = p.getInputStream();
StringBuilder sb = new StringBuilder();
int read;
while ((read = is.read()) != -1) {
sb.append((char) read);
}
return sb.toString();
} catch (Exception e) {}
return "";
}
public static void main(String[] args) {
// 调用 ip neighbor 以获取 ARP 缓存
String result = exec("ip neighbor show");
System.out.println(result); // 适配 Android 环境的具体输出方式
}
}
此例展示了如何在 Java 驱动的 Android 应用中通过系统命令(类似于 Shell 命令)来获取网络邻居信息并进行处理。需要注意的是,这里需要对 Android 开发基础有足够的熟悉程度。
以上方法适用于大多数常见的 Android 设备及版本,请根据实际设备环境做出相应适配与选择。
正文完