25

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

如何在 Java 中做到这一点?

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

4

3 回答 3

18

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

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

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

于 2008-08-29T04:48:46.717 回答
4

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

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

于 2008-08-29T04:48:45.390 回答
3

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

于 2010-04-16T21:01:10.207 回答