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

时间:2008-08-29 04:31:25

标签: java networking ethernet

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

如何在Java中完成?

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

4 个答案:

答案 0 :(得分:17)

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

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

对于Java 5及更早版本,我找到了代码parsing output of command line tools on various systems

答案 1 :(得分:3)

您可以使用http://java.sun.com/javase/6/docs/api/java/net/NetworkInterface.html#getInetAddresses()

获取连接到ServerSocket的地址

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

答案 2 :(得分:2)

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

答案 3 :(得分:0)

您可以使用Jxnet:https://github.com/ardikars/Jxnet(需要libpcap / winpcap)