你如何使用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)