我正在尝试读取子网内客户端的 Mac 地址(但不在运行我的 testServer 应用程序的同一台机器上)
@ManagedBean
public class ManagedBeanController implements Serializable {
private static final long serialVersionUID = -3244711761400747261L;
private String hostMac;
private InetAddress hostIp;
private String tmpIp;
// snippet taken from a BalusC post , works great. just pointing out that
// in case of a request from a client running on the same machine of the server,
// it return 127.0.0.1 (lookpback) instead of the actual localhost IP
public ManagedBeanController() {
HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
tmpIp = request.getRemoteAddr();
}
public void ReadHostMac()
{
try {
// InetAddress address = InetAddress.getLocalHost(); **COMMENTED**
InetAddress address = InetAddress.getByName(tmpIp);
System.out.println("Current IP address : " + address.getHostAddress() );
System.out.println("Host NAME : " + address.getHostName() );
NetworkInterface network = NetworkInterface.getByInetAddress(address);
if ( network!=null )
{
byte[] mac = network.getHardwareAddress();
if ( mac != null )
{
StringBuilder sb = new StringBuilder();
for (int i = 0; i < mac.length; i++) {
sb.append(String.format("%02X%s", mac[i], (i < mac.length - 1) ? "-" : ""));
}
System.out.println("Current MAC address : " + sb.toString());
setHostMac(sb.toString());
}
else
{
System.out.println("MAC address NULL");
setHostMac("MAC address NULL");
}
}
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (SocketException e){
e.printStackTrace();
}
}
// getters and setters
}
这个 Bean 返回的是什么:
如果在代码中使用 address = InetAddress.getLocalHost();
它只返回 localhost Mac 地址,无论哪个客户端正在连接。
InetAddress 地址 = InetAddress.getByName(tmpIp);
在这种情况下,网络属性在本地调用的情况下正确返回,但不是 MAC 属性,更糟糕的是“远程”(仍然在子网内)调用,在这种情况下,即使 NETWORK 属性也返回为 NULL。
任何提示表示赞赏,谢谢