lom_fd 2023-04-04 14:50 采纳率: 0%
浏览 47

Android10以上 如何访问本地arp(语言-java)

Android10以上 如何实现无根用户访问ARP表?


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

getFolderSize() : Exception_1 = java.lang.NullPointerException: Attempt to get length of null array

  • 写回答

2条回答 默认 最新

  • Java技术汇 2023-04-04 14:59
    关注

    在Android 10及以上的版本中,由于Android系统的安全性增强,应用程序不能直接读取ARP表。这是由于网络隐私和安全性因素所致。因此,应用程序不能直接使用ARP协议访问本地ARP表。

    但是,可以使用Android系统提供的ConnectivityManager类中的API。可以使用getLinkProperties()方法获取与设备连接的所有网络的网络参数,包括ARP表。您可以使用getLinkAddresses()方法或getInterfaceAddresses()方法获取IP地址/子网掩码/广播地址/MTU等详细信息。然后,您可以使用NetworkUtils中的方法解析网络中设备的MAC地址。

    以下是一个示例代码:

    用java实现:

    public static String getMacAddressFromArpCache(String ipAddress) {
        String macAddress = null;
        ConnectivityManager connMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
        Network network = connMgr.getActiveNetwork();
        LinkProperties linkProperties = connMgr.getLinkProperties(network);
        for (LinkAddress linkAddress : linkProperties.getLinkAddresses()) {
            InetAddress inetAddress = linkAddress.getAddress();
            if (inetAddress instanceof Inet4Address) {
                try {
                    String ip = inetAddress.getHostAddress();
                    if (ipAddress.equals(ip)) {
                        macAddress = NetworkUtils.resolveEthernetDevMac(ip);
                        break;
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
        return macAddress;
    }
    
    

    请注意,此类访问ARP缓存的方法可能会更改或停止工作,因为这些方法不属于公共API,而且可能随时受到Android系统更新的影响。

    评论

报告相同问题?

问题事件

  • 创建了问题 4月4日

悬赏问题

  • ¥15 WPF动态创建页面内容
  • ¥15 如何对TBSS的结果进行统计学的分析已完成置换检验,如何在最终的TBSS输出结果提取除具体值及如何做进一步相关性分析
  • ¥15 SQL数据库操作问题
  • ¥100 关于lm339比较电路出现的问题
  • ¥15 Matlab安装yalmip和cplex功能安装失败
  • ¥15 加装宝马安卓中控改变开机画面
  • ¥15 STK安装问题问问大家,这种情况应该怎么办
  • ¥15 关于罗技鼠标宏lua文件的问题
  • ¥15 halcon ocr mlp 识别问题
  • ¥15 已知曲线满足正余弦函数,根据其峰值,还原出整条曲线