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

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

如何在Java中完成?

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

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

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

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

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

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

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

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