我想检索用于访问特定网站的网络接口的以太网地址。
如何在Java中完成?
解决方案请注意,getHardwareAddress
的已接受解决方案仅在Java 6中可用。除了执行i(f | p)confing之外,似乎没有Java 5的解决方案
答案 0 :(得分:17)
java.net.NetworkInterface.getHardwareAddress(Java 6中添加的方法)
必须在您感兴趣的计算机上调用它 - MAC不会跨网络边界(即LAN和WAN)传输。如果您想在网站服务器上使用它来询问客户端,您必须运行一个小程序,将结果报告给您。
对于Java 5及更早版本,我找到了代码parsing output of command line tools on various systems。
答案 1 :(得分:3)
您可以使用http://java.sun.com/javase/6/docs/api/java/net/NetworkInterface.html#getInetAddresses()
获取连接到ServerSocket的地址但是,如果您的客户端通过NAT连接,那么您将获得路由器的地址而不是以太网地址。如果它在您的本地网络上(通过集线器/交换机,没有带NAT的路由器),它将按预期工作。
答案 2 :(得分:2)
实际上,除了其他正确答案(JDK 6; exec'ifconfig')之外,还有基于JNI的库。 Java Uuid Generator (JUG) 2.0包含某些平台的代码。这适用于JDK 1.2及以上版本(至少1.1甚至)
答案 3 :(得分:0)
您可以使用Jxnet:https://github.com/ardikars/Jxnet(需要libpcap / winpcap)