我需要在我的网络中获取主机的MAC ID.为此,如果我ping到该IP并查询ARP缓存arp -a,我就能获得MAC ID.我只是想知道我是否可以获取任何API来查询ARP并获取MAC ID.
此外,如果有更好的方法从IP地址获取MAC ID,请建议.
PS:我在JAVA工作.
谢谢.
jqn*_*qno 10
Java没有提供直接查询网络中主机MAC地址的方法,因为它被Java的套接字库抽象出来.
在某种程度上,这是有道理的,因为主机的MAC地址实际上说的很少.没有主机的"MAC"地址.
将这两个问题放在一起,这意味着一个主机可能有许多不同的MAC地址(如果它有多个NIC),并且一个MAC地址可能代表许多不同的主机(如果流量通过路由器).
假设您知道所有这些并且您仍然需要获取主机的MAC地址,那么在Java中执行此操作的唯一方法是"go native":
system_profile命令的输出.system_profile可能存在类似于OS X的工具.有一种更简单的方法:
private static final String ARP_GET_IP_HW = "arp -a";
public String getARPTable(String cmd) throws IOException {
Scanner s = new Scanner(Runtime.getRuntime().exec(cmd).getInputStream()).useDelimiter("\\A");
return s.hasNext() ? s.next() : "";
}
System.out.println(getARPTable(ARP_GET_IP_HW ));
Run Code Online (Sandbox Code Playgroud)
然后,您将获得具有IP和HW排序的eintire ARP表。
然后,您可以将表拆分为单独的字符串行,并在每行上使用正则表达式以匹配硬件和IP地址。这样就完成了。