我们如何使用Java获得以太网地址?

时间:2020-03-05 18:44:50  来源:igfitidea点击:

我想检索用于访问特定网站的网络接口的以太网地址。

用Java如何做到这一点?

解决方案请注意,公认的" getHardwareAddress"解决方案仅在Java 6中可用。除了执行i(f | p)confing之外,似乎没有Java 5的解决方案。

解决方案

回答

我们可以使用http://java.sun.com/javase/6/docs/api/java/net/NetworkInterface.html#getInetAddresses()获取连接到ServerSocket的地址。

但是,如果客户端通过NAT连接,则将获得路由器的地址,而不是以太网地址。如果它在本地网络上(通过集线器/交换机,没有带NAT的路由器),它将按预期工作。

回答

java.net.NetworkInterface.getHardwareAddress(Java 6中添加的方法)

必须在我们对MAC不跨网络边界(即LAN和WAN)传输的机器感兴趣的机器上调用它。如果要在网站服务器上使用它来询问客户端,则必须运行一个小程序,该小程序将结果报告给我们。

对于Java 5和更早的版本,我发现了各种系统上的命令行工具输出的代码解析代码。

回答

实际上,除了其他正确的答案(JDK 6; exec'ifconfig')之外,还有基于JNI的库。 Java Uuid Generator(JUG)2.0具有某些平台的代码。这至少适用于JDK 1.2及更高版本(甚至1.1)