java获取当前计算机网卡MAC地址
package com.yjm.testmac;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.net.UnknownHostException;
import java.util.Enumeration;
public class MacTest {
public static void main(String[] args) {
// 获得本机全部的mac地址信息
test();
// 根据当前的IP地址信息对象获得在用的网卡信息
test1();
}
private static void test1() {
System.out.println("==========test1方法中运行start......");
try {
InetAddress ipInfo = InetAddress.getLocalHost();
// 输出IP地址内容
System.out.println(ipInfo.getHostAddress());
// 获得网卡内容字节数组
byte[] byAddress = NetworkInterface.getByInetAddress(ipInfo)
.getHardwareAddress();
// 输出数组长度
System.out.println(byAddress.length);
// 地址字符串容器
StringBuffer stringBuffer = new StringBuffer();
// 单个数组值进行转换
for (int i = 0; i < byAddress.length; i++) {
// 单个数组值 就是一个地址位数添加分隔符
if (i != 0) {
stringBuffer.append("-");
}
// 字节转换为16进制数
int number = byAddress[i] & 0xff;
String strAddr = Integer.toHexString(number);
System.out.println("转换后:=======================================" + strAddr);
// 当转换的值是 个位数时,在前面补0
if (strAddr.length() == 1) {
stringBuffer.append("0" + strAddr);
} else {
stringBuffer.append(strAddr);
}
}
// 输出转换后的mac地址
System.out.println("转换后的MacAddress为:"
+ stringBuffer.toString().toUpperCase());
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (SocketException e) {
e.printStackTrace();
}
System.out.println("==========test1方法中运行over......");
}
private static void test() {
System.out.println("==========test方法中运行start......");
// 初始化 网卡信息容器
Enumeration<NetworkInterface> allNetDevices = null;
// 初始化一张网卡对象
NetworkInterface networkInterface = null;
// 等到网卡的byte数组信息
byte[] networkbyte = null;
// 盛放 封装的网卡信息字符串
StringBuffer stringBuffer=null;
try {
// 获取网卡信息容器
allNetDevices = NetworkInterface.getNetworkInterfaces();
while (allNetDevices.hasMoreElements()) {
// 获取单张网卡对象 迭代输出网卡信息
networkInterface = allNetDevices.nextElement();
// 获得正在 运行的 网卡信息
if (networkInterface.isUp()) {
//转换字节后用到的网卡地址容器
stringBuffer = new StringBuffer();
//网卡mac地址字节容器
networkbyte = networkInterface.getHardwareAddress();
//网卡名字
System.out.println("网卡 名字: "+networkInterface.getName());
//网卡信息
System.out.println("网卡信息 : "+networkInterface.getDisplayName());
// 单个数组值进行转换
for (int i = 0; i < networkbyte.length; i++) {
// 单个数组值 就是一个地址位数添加分隔符
if (i != 0) {
stringBuffer.append("-");
}
// 字节转换为16进制数
int number = networkbyte[i] & 0xff;
String strAddr = Integer.toHexString(number);
System.out.println("转换后:==================================" + strAddr);
// 当转换的值是 个位数时,在前面补0
if (strAddr.length() == 1) {
stringBuffer.append("0" + strAddr);
} else {
stringBuffer.append(strAddr);
}
}
// 输出转换后的mac地址
System.out.println("转换后的MacAddress为:"
+ stringBuffer.toString().toUpperCase());
}
}
} catch (SocketException e) {
e.printStackTrace();
}
System.out.println("==========test方法中运行 over......");
}
}
方法在Linux下只能得到127.0.0.1,只能在Windows下获取正确的ip地址。
输出结果:
==========test方法中运行start......
网卡 名字: lo
网卡信息 : Software Loopback Interface 1
转换后的MacAddress为:
网卡 名字: eth3
网卡信息 : Realtek PCIe GBE Family Controller
转换后:==================================14
转换后:==================================da
转换后:==================================e9
转换后:==================================2b
转换后:==================================38
转换后:==================================10
转换后的MacAddress为:14-DA-E9-2B-38-10
网卡 名字: net4
网卡信息 : Teredo Tunneling Pseudo-Interface
转换后:==================================0
转换后:==================================0
转换后:==================================0
转换后:==================================0
转换后:==================================0
转换后:==================================0
转换后:==================================0
转换后:==================================e0
转换后的MacAddress为:00-00-00-00-00-00-00-E0
==========test方法中运行 over......
==========test1方法中运行start......
192.168.101.243
6
转换后:=======================================14
转换后:=======================================da
转换后:=======================================e9
转换后:=======================================2b
转换后:=======================================38
转换后:=======================================10
转换后的MacAddress为:14-DA-E9-2B-38-10
==========test1方法中运行over......
转载于:https://blog.51cto.com/yjm199/1653855