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......