1.通过主机名称获取MAC地址
?
??? /**
???? * 获取操作系统名称
???? */?
??? public static String getOsName() {?
??????? String os = "";?
??????? os = System.getProperty("os.name");?
??????? return os;?
??? }
?
/**
???? * 获取MAC地址
???? */?
??? public static String getMACAddress() {?
??????? String address = "";?
??????? String os = getOsName();?
??????? //根据操作系统类型获取MAC地址?
??????? if (os.startsWith("Windows")) {?
??????????? try {?
??????????????? String command = "cmd.exe /c ipconfig /all";?
??????????????? Process p = Runtime.getRuntime().exec(command);?
??????????????? BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));?
??????????????? String line;?
??????????????? while ((line = br.readLine()) != null) {?
??????????????????? if (line.indexOf("Physical Address") > 0) {?
??????????????????????? int index = line.indexOf(":");?
??????????????????????? index += 2;?
??????????????????????? address = line.substring(index);?
??????????????????????? break;?
??????????????????? }?
??????????????? }?
??????????????? br.close();?
??????????????? return address.trim();?
??????????? } catch (IOException e) {?
??????????? }?
??????? } else if (os.startsWith("Linux")) {?
??????????? String command = "/bin/sh -c ifconfig -a";?
??????????? Process p;?
??????????? try {?
??????????????? p = Runtime.getRuntime().exec(command);?
??????????????? BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));?
??????????????? String line;?
??????????????? while ((line = br.readLine()) != null) {?
??????????????????? if (line.indexOf("HWaddr") > 0) {?
??????????????????????? int index = line.indexOf("HWaddr") + "HWaddr".length();?
??????????????????????? address = line.substring(index);?
??????????????????????? break;?
??????????????????? }?
??????????????? }?
??????????????? br.close();?
??????????? } catch (IOException e) {?
??????????? }?
??????? }?
??????? address = address.trim();?
??????? return address;?
??? }??
?
2.通过远程主机IP地址获取MAC地址
??? /**
??? ?* 获取远程MAC地址
??? ?* @return
??? ?*/
??? public static String getRemoteMac(){
??? ??? HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();
??? ??? return getRemoteMac(request);??? ???
??? }
???
??? /**
??? ?* 获取远程MAC地址
??? ?* @param request
??? ?* @return
??? ?*/
??? public static String getRemoteMac(HttpServletRequest request){
??? ??? String ip =? request.getRemoteAddr();
??? ??? return getMACAddress(ip);
??? }
??? /**
??? ?* 通过远程IP获取MAC地址
??? ?* @param ip 远程IP地址
??? ?* @return
??? ?*/
??? public static String getMACAddress(String ip) {
??? ??? String str = "";
??? ??? String macAddress = "";
??? ??? try {
??? ??? ??? Process p = Runtime.getRuntime().exec("nbtstat -a " + ip);
??? ??? ??? InputStreamReader ir = new InputStreamReader(p.getInputStream(),"GBK");
??? ??? ??? LineNumberReader input = new LineNumberReader(ir);
??? ??? ??? for (int i = 1; i < 100; i++) {
??? ??? ??? ??? str = input.readLine();
??? ??? ??? ??? logger.info("nbtstat -a " + ip +"\n mac info:"+str);
??? ??? ??? ??? if (str != null) {
??? ??? ??? ??? ??? if (str.indexOf("MAC 地址",1) > -1) {
??? ??? ??? ??? ??? ??? // 客户端使用的是中文版操作系统
??? ??? ??? ??? ??? ??? macAddress = str.substring(str.indexOf("MAC 地址") + 9,
??? ??? ??? ??? ??? ??? ??? ??? str.length());
??? ??? ??? ??? ??? ??? break;
??? ??? ??? ??? ??? } else if (str.indexOf("MAC Address",1) > -1) {
??? ??? ??? ??? ??? ??? // 客户端使用的是英文版操作系统
??? ??? ??? ??? ??? ??? macAddress = str.substring(
??? ??? ??? ??? ??? ??? ??? ??? str.indexOf("MAC Address") + 14, str.length());
??? ??? ??? ??? ??? ??? break;
??? ??? ??? ??? ??? }
??? ??? ??? ??? }else{
??? ??? ??? ??? ??? logger.error("执行 nbtstat -a " + ip + "指令执行失败");
??? ??? ??? ??? }
??? ??? ??? }
??? ??? } catch (IOException e) {
??? ??? ??? logger.error("=========获取远程mac地址异常=======IOException:", e);
??? ??? }
??? ??? return macAddress;
??? }
?
?