在Android中访问没有root的ARP表
Posted
技术标签:
【中文标题】在Android中访问没有root的ARP表【英文标题】:access ARP table without root in Android 【发布时间】:2017-07-28 08:29:41 【问题描述】:我最近正在处理一个需要访问 ARP 表的 android 项目。要求之一是避免任何需要根设备的方法。所以,我的问题是: 有什么方法可以在不root设备的情况下访问android中的ARP表?
目前我发现大多数方法都是使用/proc/net/arp来访问需要root权限的ARP表,我不确定这是否是唯一的方法。
【问题讨论】:
您是否找到了访问 ARP 表的其他方法? 【参考方案1】:我可以在没有 root 的情况下访问 ARP 表。这是我的代码:
string GetMACAddressviaIP(string ipAddr)
string result = "";
ostringstream ss;
ss << "/proc/net/arp";
string loc = ss.str();
ifstream in(loc);
if(!in)
printf("open %s failed\n",loc.c_str());
return result;
string line;
while(getline(in, line))
if(strstr(line.c_str(), ipAddr.c_str()))
const char *buf = strstr(line.c_str(), ":") - 2;
int counter = 0;
stringstream ss;
while(counter < 17)
ss << buf[counter];
counter++;
result = ss.str();
return result;
【讨论】:
请提供更多详细信息...这是什么语言?你如何在android上执行它? ...... 这种语言是 C++。我在开发 Android 项目时使用了 NDK。 JNI 允许访问 C/C++ 代码。 @RobinDavies 是否有任何替代解决方案我卡住了,无法找到从 android 10 开始访问 arp 文件的方法, 我最终使用了与网络上除路由器以外的设备关联的 UUID 来识别网络。 @RobinDavies 你能提供更多细节吗?【参考方案2】:为了更好的理解,使用Java语言,可以在android中检索ARP表为:
BufferedReader br = null;
ArrayList<ClientScanResult> result = new ArrayList<ClientScanResult>();
try
br = new BufferedReader(new FileReader("/proc/net/arp"));
String line;
while ((line = br.readLine()) != null)
System.out.println(line);
Catch(Exception e)
finally
try
br.close();
catch (IOException e)
【讨论】:
【参考方案3】:作为先前答案的替代方案,“无编码”解决方案是在您的设备上安装 linux 终端仿真器并使用 arp -a 命令查看 arp 表。
【讨论】:
您好,欢迎来到 SO!请阅读tour 和How do I write a good answer? 例如,您可以将完整的命令分隔到代码块中的另一行,并添加如何安装该模拟器的指导。【参考方案4】:我为 Java 推荐如下内容。这结合了其他两个的答案。它尚未经过测试,因此可能需要进行一些调整,但您明白了。
public String getMacAddressForIp(final String ipAddress)
try (BufferedReader br = new BufferedReader(new FileReader("/proc/net/arp")))
String line;
while ((line = br.readLine()) != null)
if (line.contains(ipAddress))
final int macStartIndex = line.indexOf(":") - 2;
final int macEndPos = macStartIndex + 17;
if (macStartIndex >= 0 && macEndPos < line.length())
return line.substring(macStartIndex, macEndPos);
else
Log.w("MyClass", "Found ip address line, but mac address was invalid.");
catch(Exception e)
Log.e("MyClass", "Exception reading the arp table.", e);
return null;
【讨论】:
以上是关于在Android中访问没有root的ARP表的主要内容,如果未能解决你的问题,请参考以下文章
应用程序如何在没有 root 的情况下访问 Android 6.0(API 级别 23)中 USB OTG 存储上的文件?
android中怎么对没有root权限的手机, 进行数据库表的增删改查。
Wireshark Ethernet and ARP 实验—Wireshark Lab: Ethernet and ARP v7.0