我在网上找了一下获取mac地址的方法,找了两种比较不太一样的方法。
第一种
1
2
3
4
|
public static void main(String[] args) throws Exception {
InetAddress ia = InetAddress.getLocalHost();
System.out.println(getMACAddress(ia));
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
private static String getMACAddress(InetAddress ia) throws Exception {
// 获得网络接口对象(即网卡),并得到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);
}
// 把字符串所有小写字母改为大写成为正规的mac地址并返回
return sb.toString().toUpperCase();
}
|
这种方法貌似是只能取本机的mac地址的。
第二种
1
2
3
|
public static void main(String[] args) throws Exception {
getMac( "192.168.1.186" );
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
public static String getMac(String ip){
String str = null ;
String mac = null ;
try {
Process p = Runtime.getRuntime().exec( "nbtstat -A " + ip);
InputStreamReader ir = new InputStreamReader(p.getInputStream(), "gbk" );
LineNumberReader input = new LineNumberReader(ir);
for (; true ;) {
str = input.readLine();
if (str != null ) {
if (str.indexOf( "MAC 地址" ) > 1 ) {
mac = str.substring(str.indexOf( "MAC 地址" ) + 9 );
break ;
}
}
}
System.out.println(mac);
} catch (IOException e){
e.printStackTrace();
}
return mac;
}
|
这种方法是我比较喜欢的,不过这种方法呢在时间效率上可能会稍差一些。这个里面有一个比较需要注意的点就是数据流那里记得要改成gbk格式的,不然读出来的数据是乱码的,后面就会无法进行了,然后识别字段那里,可能有一些会是"MAC address",所以可能需要自己做一些调整。
以上就是小编为大家带来的java 获取mac地址的两种方法(推荐)全部内容了,希望大家多多支持服务器之家~