【发布时间】:2010-09-07 05:33:24
【问题描述】:
我想检索用于访问特定网站的网络接口的以太网地址。
如何在 Java 中做到这一点?
解决方案请注意,getHardwareAddress 的公认解决方案仅在 Java 6 中可用。除了执行 i(f|p)confing 之外,似乎没有适用于 Java 5 的解决方案。
【问题讨论】:
标签: java networking ethernet
我想检索用于访问特定网站的网络接口的以太网地址。
如何在 Java 中做到这一点?
解决方案请注意,getHardwareAddress 的公认解决方案仅在 Java 6 中可用。除了执行 i(f|p)confing 之外,似乎没有适用于 Java 5 的解决方案。
【问题讨论】:
标签: java networking ethernet
java.net.NetworkInterface.getHardwareAddress(Java 6 中添加的方法)
它必须在您感兴趣的机器上调用 - MAC 不会跨网络边界(即 LAN 和 WAN)传输。如果您想在网站服务器上使用它来询问客户端,则必须运行一个将结果报告给您的小程序。
对于 Java 5 及更早版本,我找到了代码 parsing output of command line tools on various systems。
【讨论】:
您可以使用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)
【讨论】: