查询 ARP 缓存以获取 MAC ID
2022-09-04 06:21:40
我需要获取网络中主机的 MAC ID。为此,如果我ping到该IP并查询ARP缓存,我能够获得MAC ID。我只是想知道我是否可以获取任何API来查询ARP并获取MAC ID。arp -a
另外,如果有更好的方法从IP地址获取MAC ID,请建议。
P.S:我在JAVA工作。
谢谢。
我需要获取网络中主机的 MAC ID。为此,如果我ping到该IP并查询ARP缓存,我能够获得MAC ID。我只是想知道我是否可以获取任何API来查询ARP并获取MAC ID。arp -a
另外,如果有更好的方法从IP地址获取MAC ID,请建议。
P.S:我在JAVA工作。
谢谢。
Java没有提供直接的方法来查询网络中主机的MAC地址,因为这是由Java的套接字库抽象出来的。
在某种程度上,这是有道理的,因为主机的MAC地址实际上说得很少。没有主机的“MAC地址”这样的东西。
将这两个问题放在一起,这意味着一个主机可能具有许多不同的MAC地址(如果它具有多个NIC),并且一个MAC地址可能代表许多不同的主机(如果流量通过路由器)。
假设您知道所有这些,并且仍然需要获取主机的MAC地址,那么在Java中执行此操作的唯一方法是“本机”:
system_profile
system_profile
有一种更简单的方法:
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 ));
您将获得在每行上排序的IP和HW的eintier ARP表。
然后,您可以将表拆分为单独的 String 行,并在每行上使用正则表达式来匹配 HW 和 IP 地址。大功告成。