目录

java获取mac地址

目录

java获取mac地址

package net;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Inet4Address;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.net.UnknownHostException;
import java.util.Enumeration;

public class NetUtils {
		public static void main(String[] args) {
			String ip=NetUtils.getLocalIp();
			System.out.println(ip);
			try {
				String mac=NetUtils.getMac(ip);
				System.out.println(mac);
			} catch (UnknownHostException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (SocketException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
		}
	  public static String getMac(String ip) throws UnknownHostException, SocketException {
	        String macAddress = "";
	        String line;
	        // 如果为127.0.0.1,则获取本地MAC地址
	        if ("127.0.0.1".equals(ip) || "0:0:0:0:0:0:0:1".equals(ip) || "localhost".equals(ip) || getLocalIp().equals(ip)) {    //注意getLocalIp().equals(ip),由于else中的方法获取不到本机ip对应的的mac,所以放到这里,调用的getLocalIp()
	            InetAddress inetAddress = InetAddress.getLocalHost();
	            byte[] mac = NetworkInterface.getByInetAddress(inetAddress)
	                    .getHardwareAddress();
	            // 下面代码是把mac地址拼装成String
	            StringBuilder sb = new StringBuilder();
	            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地址并返回
	            macAddress = sb.toString().trim().toUpperCase();
	            return macAddress;
	        } else {

	            try {
	                Process p = Runtime.getRuntime().exec("arp -A " + ip);
	                InputStreamReader isr = new InputStreamReader(p.getInputStream());
	                BufferedReader br = new BufferedReader(isr);
	                while ((line = br.readLine()) != null) {
	                    if (line != null) {
	                        int index = line.indexOf(ip);
	                        if (index != -1) {
	                            macAddress = line.substring(index + ip.length() + 10,index + ip.length() + 27).trim().toUpperCase();
	                        }
	                    }
	                }
	                br.close();
	            } catch (IOException e) {
	                e.printStackTrace(System.out);
	            }
	            return macAddress;
	        }
	    }
	   public static String getLocalIp() {
	        try {
	            Enumeration allNetInterfaces = NetworkInterface.getNetworkInterfaces();
	            InetAddress ip;
	            while (allNetInterfaces.hasMoreElements()){
	                NetworkInterface netInterface = (NetworkInterface) allNetInterfaces.nextElement();
	                Enumeration addresses = netInterface.getInetAddresses();
	                while (addresses.hasMoreElements()){
	                    ip = (InetAddress) addresses.nextElement();
	                    if (ip != null && ip instanceof Inet4Address && !"127.0.0.1".equals(ip.getHostAddress())){
	                        return  ip.getHostAddress();
	                    }
	                }
	            }
	        } catch (Exception e) {}
	        return null;
	    }	

}

运行结果如下:

https://i-blog.csdnimg.cn/blog_migrate/fdbe9f0bb31858bbc8624a6b5461c959.png