Android 设备中 ARP 缓存的定位与查看

9次阅读
没有评论

问题描述

在 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 缓存信息。

步骤:

  1. 安装一个具有文件管理功能的应用 (例如 ES File Explorer、Solid Explorer),这些应用通常自带 cat 这样的命令行工具来读取文本文件。
  2. 获取文件内容
  3. 使用该文件管理应用直接在手机上找到并打开 /proc/net/arp 文件,或使用其中集成的终端模拟器(如 ES File Explorer 的 Terminal)
  4. 使用例如 cat /proc/net/arp 命令来查看这个文件的内容。

由于这需要的是仅读取文件,并非修改系统文件或其他高度受限的动作,因此 无需 root 权限 即可完成此操作。不过需要注意的是 /proc/net/arp 文件可能不会在所有 Android 版本上都可用。

方案二:使用 ip neighbor 命令

另一种查看 ARP 缓存的方法是通过执行 ip neighbor 命令,该命令可以显示设备附近的所有 IP 和 MAC 地址对。

步骤:

  1. 通过第三方终端模拟器访问
  2. 下载并安装一个支持 adb shell 或具有高级功能的 Termux 应用(提供 adb shell 访问)。
  3. 执行命令
  4. 在 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 设备及版本,请根据实际设备环境做出相应适配与选择。

正文完