做项目时遇到一个需求,需要获取客户端mac地址,我通过下面的java代码获取,但是得到的却是获取服务器本机的mac,地址,请问我该怎样获取到客户端mac地址?
InetAddress ia = InetAddress.getLocalHost();
//获得网络接口对象(即网卡),并得到mac地址,mac地址存在于一个byte数组中。
byte[] mac = NetworkInterface.getByInetAddress(ia).getHardwareAddress();
//下面代码是把mac地址拼装成String
StringBuffer sb = new StringBuffer();
for(int i=0;i<mac.length;i++){
if(i!=0){
sb.append("-");
}
//mac[i] & 0xFF 是为了把byte转化为正整数
String s = Integer.toHexString(mac[i] & 0xFF);
sb.append(s.length()==1?0+s:s);
}
String MacAddress = sb.toString().toUpperCase();
log.error("mac地址"+MacAddress);
entity.setClientMac(MacAddress);
getRemoteAddr,应该使用这个方法
客户端的mac地址,服务器是拿不到的。只能通过客户端拿到以后传给你。
http://www.jb51.net/article/73882.htm
http://cobble19.iteye.com/blog/828371
1、首先,创建工程,包,和一个类。
在此不加详述,我们直接看代码。
这里,我把这个类命名为GetMacAddr
2、这里,最最关键的就是这里这个方法。
我们通过NetworkInterface这个类来操作。
也就是通过getLocalHost()方法先得到本机IP,
然后调用getHardwareAddress()方法得到一个byte数组的地址。
我们把六位地址传到一个byte数组里面,然后输出来就是。
不多废话,看代码:
private void getMACAddr()
throws SocketException, UnknownHostException {
// 获得IP
NetworkInterface netInterface =
NetworkInterface.getByInetAddress(InetAddress.getLocalHost());
// 获得Mac地址的byte数组
byte[] macAddr = netInterface.getHardwareAddress();
System.out.print("MAC Addr:\t");
// 循环输出
for (byte b : macAddr) {
// 这里的toHexString()是自己写的格式化输出的方法,见下步。
System.out.print(toHexString(b) + " ");
}
}
3、上一步骤中,为什么会出现一个toHexString()方法呢?
因为可能10进制转16进制时候可能会出现单字符,
所以,如果有出现单字符的情况,我们在其前面添加一个“0”做占位符。
这也是为了视觉的直观,也夹带着个人的习惯。
private static String toHexString(int integer) {
// 将得来的int类型数字转化为十六进制数
String str = Integer.toHexString((int) (integer & 0xff));
// 如果遇到单字符,前置0占位补满两格
if (str.length() == 1) {
str = "0" + str;
}
return str;
}
4、然后,我们写一个简单的main方法测试一下。
public static void main(String[] args)
throws SocketException, UnknownHostException {
new GetMacAddr().getMACAddr();
}
5、结果无误,我们得到了本地的MAC地址。更多mac教程,欢迎关注mac.orsoon.com本站了解