如何在Java中获取远程机器的MAC地址

4

可能是重复内容:
查询ARP缓存以获取MAC ID

我需要获取连接到我家庭网络的所有远程机器的MAC地址。我可以使用以下代码读取我的机器的MAC地址,但我不知道如何获取网络上其他机器的MAC地址。是否可能实现?

import java.net.InetAddress;
import java.net.NetworkInterface;
class Test {
public static void main(String[] args) throws Exception {
InetAddress address = InetAddress.getLocalHost();

NetworkInterface ni = NetworkInterface.getByInetAddress(address);
byte[] mac = ni.getHardwareAddress();

for (int i = 0; i < mac.length; i++) {
  System.out.format("%02X%s", mac[i], (i < mac.length - 1) ? "-" : "");
}
}
}  

输出(MyComputer的6字节mac地址)
30-60-77-12-cd-99


有什么目的呢?在Java中,除了显示MAC地址外,您无法做任何有用的事情。 - user207421
1个回答

1
如何获取远程机器的MAC地址
一般情况下是无法做到的。MAC地址仅适用于同一物理网络段中的机器。这些机器使用ARP协议直接相互通信,将IP地址转换为物理(MAC)地址。
一旦跨越IP路由器或任何其他第三层设备,任何MAC信息通常都会丢失。
底线:您无法通过Internet获取远程节点的MAC地址 - 即使在大多数中型到大型公司中实现的大多数私有网络中也无法做到这一点。

这也是为什么唤醒局域网(wake-on-LAN)数据包需要来自于同一物理网络段中的机器的原因。 - Thorbjørn Ravn Andersen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接