2012-12-27 49 views
4

可能重复:
Query ARP cache to get MAC ID如何获得远程机器的MAC地址的Java

我需要连接到我的家庭网络的所有远程计算机的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) ? "-" : ""); 
} 
} 
} 

输出(我的电脑的6byte MAC地址)
30-60-77-12-CD-99

+0

为了什么目的?除了显示它之外,您可以使用Java中的MAC地址做任何有用的事情。 – EJP

回答

1

如何获得远程机器的MAC地址

你不能这样做 - 不在一般情况下。 MAC addresses仅适用于同一物理网段的机器。这些机器使用ARP协议直接相互通信,以将IP地址“转换”为物理(MAC)地址。

只要IP路由器或任何其他Layer-3设备越过,通常会丢失任何MAC信息。底线:无法通过互联网获取远程节点的MAC地址 - 甚至在任何中等规模的专用网络中都无法做到这一点,例如,大多数大中型公司。

+0

这也是为什么LAN唤醒数据包需要来自同一物理网段中的一台机器的原因。 –