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

在 Java 中如何做到这一点?

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

有帮助吗?

解决方案

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

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

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

其他提示

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

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top