在本人的上篇文章中知道了如何去获取本地MAC地址集合,但是在实际操作中抓取的MAC地址只是要有效的那一个,那么问题来了,有没有办法直接获取呢?
打开cmd,输入ipconfig -all 可以看到机器上所有地址,如下:
很明显,我们要的MAC地址是有有效ip地址的。所以,我们通过ip地址来抓取MAC地址是不是就能得到有效的地址了呢?嗯,直接上代码:
import java.net.InetAddress;
import java.net.InterfaceAddress;
import java.net.NetworkInterface;
import java.net.UnknownHostException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class NetUtil {
private static NetUtil net = null;
private NetUtil() {
}
public static NetUtil getInstance() {
if (net == null)
net = new NetUtil();
return net;
}
/** 获取本地ip地址 **/
public String getIp() {
String ip = "";
try {
InetAddress addr = InetAddress.getLocalHost();
ip = addr.getHostAddress();
} catch (UnknownHostException e) {
e.printStackTrace();
}
return ip;
}
private Map<String, String> getMacMap() {
Map<String, String> tmpMacList = new HashMap<String, String>();
try {
java.util.Enumeration<NetworkInterface> en = NetworkInterface
.getNetworkInterfaces();
StringBuilder sb = new StringBuilder();
while (en.hasMoreElements()) {
NetworkInterface iface = en.nextElement();
List<InterfaceAddress> addrs = iface.getInterfaceAddresses();
for (InterfaceAddress addr : addrs) {
InetAddress ip = addr.getAddress();
NetworkInterface network = NetworkInterface
.getByInetAddress(ip);
String ipadd = ip.getHostAddress();
if (network == null) {
continue;
}
byte[] mac = network.getHardwareAddress();
if (mac == null) {
continue;
}
sb.delete(0, sb.length());// 清空内容
for (int i = 0; i < mac.length; i++) {
sb.append(String.format("%02X%s", mac[i],
(i < mac.length - 1) ? "-" : ""));
}
tmpMacList.put(ipadd, sb.toString());
}
}
} catch (Exception e) {
e.printStackTrace();
}
return tmpMacList;
}
/**
* 通过ip获取指定的Mac地址, 本地在使用Mac地址可通过,cmd输入 ipconfig -all 进行访问
* 192.168.0.109=D8-F8-83-93-60-93
* @param name
* @return
*/
public String getMac(String ip) {
if (!StringUtil.isEmpty(ip)) {
ip = ip.trim();
try {
Map<String, String> map = getMacMap();
return map.get(ip);
} catch (Exception e) {
e.printStackTrace();
}
}
return null;
}
}
开始执行,传入指定ip,192.168.0.109
public static void main(String[] args) {
System.out.println(NetUtil.getInstance().getMac(“192.168.0.109”));
}
这个结果和通过cmd查到的物理地址一致,完美!!