package com.simonjia.util.other;<br /><br />import java.net.InetAddress;<br />import java.net.InterfaceAddress;<br />import java.net.NetworkInterface;<br />import java.util.ArrayList;<br />import java.util.List;<br />import java.util.stream.Collectors;<br /><br />public class MacTools {<br /> /***因为一台机器不一定只有一个网卡呀,所以返回的是数组是很合理的***/<br /> public static List<String> getMacList() throws Exception {<br /> java.util.Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces();<br /> StringBuilder sb = new StringBuilder();<br /> ArrayList<String> tmpMacList = new ArrayList<>();<br /> while (en.hasMoreElements()) {<br /> NetworkInterface iface = en.nextElement();<br /> List<InterfaceAddress> addrs = iface.getInterfaceAddresses();<br /> for (InterfaceAddress addr : addrs) {<br /> InetAddress ip = addr.getAddress();<br /> NetworkInterface network = NetworkInterface.getByInetAddress(ip);<br /> if (network == null) {<br /> continue;<br /> }<br /> byte[] mac = network.getHardwareAddress();<br /> if (mac == null) {<br /> continue;<br /> }<br /> sb.delete(0, sb.length());<br /> for (int i = 0; i < mac.length; i++) {<br /> sb.append(String.format("%02X%s", mac[i], (i < mac.length - 1) ? "-" : ""));<br /> }<br /> tmpMacList.add(sb.toString());<br /> }<br /> }<br /> if (tmpMacList.size() <= 0) {<br /> return tmpMacList;<br /> }<br /> /***去重,别忘了同一个网卡的ipv4,ipv6得到的mac都是一样的,肯定有重复,下面这段代码是。。流式处理***/<br /> List<String> unique = tmpMacList.stream().distinct().collect(Collectors.toList());<br /> return unique;<br /> }<br /> <br /> public static void main(String[] args) throws Exception {<br /> long a = System.currentTimeMillis();<br /> System.out.println("进行 multi net address 测试===》");<br /> List<String> macs = getMacList();<br /> long b = System.currentTimeMillis();<br /> System.out.println("本机的mac网卡的地址有:" + macs);<br /> System.out.println("总耗时----" + (b - a) + "-----ms");<br /> }<br />}

博主原文太长,只取精华-0- 详细可见:https://blog.csdn.net/cdnight/article/details/86741265
【说明】:本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!