Способ 1. Отличите адрес локального компьютера от адресов других компьютеров в локальной сети.
/** * Получить mac-адрес на основе IP-адреса * @param ipAddress 127.0.0.1 * @return * @throws SocketException * @throws UnknownHostException */ public static String getLocalMac(String ipAddress) throws SocketException, UnknownHostException { // TODO Auto -сгенерированная заглушка метода String = "" String macAddress = ""; LOOPBACK_ADDRESS = "127.0.0.1" // Если это 127.0.0.1, получим локальный MAC-адрес. if (LOOPBACK_ADDRESS.equals(ipAddress)) { InetAddress inetAddress = InetAddress.getLocalHost(); // Кажется, для этого метода требуется JDK1.6. byte[] mac = NetworkInterface.getByInetAddress(inetAddress).getHardwareAddress(); // Следующий код собирает MAC-адрес в строку StringBuilder sb = new StringBuilder(); for (int i = 0; i < mac.length; i++) { if (i != 0) { sb.append("-" } // mac[i] & 0xFF; Это преобразование байта в положительное целое число String s = Integer.toHexString(mac[i] & 0xFF); sb.append(s.length() == 1 ? 0 + s : } // Преобразование всех строк; Измените строчные буквы на прописные, чтобы они стали обычным MAC-адресом, и верните macAddress = sb.toString().trim().toUpperCase() return macAddress }; else { // Получить MAC-адрес нелокального IP-адреса try { System.out.println(ipAddress); Process p = Runtime.getRuntime() .exec("nbtstat -A " + ipAddress System.out.println); ("= ==process=="+p); InputStreamReader ir = новый InputStreamReader(p.getInputStream()); br = new BufferedReader(ir); while ((str = br.readLine()) != null) { if(str.indexOf("MAC")>1){ macAddress = str.substring(str.indexOf("MAC")+9, str.length ()); macAddress = macAddress.trim(); System.out.println("macAddress:" + macAddress; } } p.destroy(); ir.close(); } catch (IOException ex) { } return macAddress } };
Давайте рассмотрим второй способ:
пакет com.alpha.test;импорт java.io.BufferedReader;импорт java.io.IOException;импорт java.io.InputStream;импорт java.io.InputStreamReader;импорт java.io.LineNumberReader;публичный класс GetMac {/** * java получает MAC-адрес сетевой карты клиента * * @param args */public static void main(String[] args) {GetMac get = new GetMac();System.out.println("1="+get.getMAC());System.out.println("2="+get.getMAC("127.0.0.1"));}// 1 .Получите IP-адрес клиента (он должен быть передан от клиента в фоновый режим): // На странице jsp это очень просто, request.getRemoteAddr();// Поскольку уровень VIew системы реализован с помощью JSF, подобные запросы невозможно получить непосредственно на странице, поэтому в компоненте выполняется принудительное преобразование // public String getMyIP() {// try {// FacesContext fc = FacesContext. getCurrentInstance();// HttpServletRequest request = (HttpServletRequest) fc// .getExternalContext().getRequest();// return request.getRemoteAddr();// } catch (Exception e) {// e.printStackTrace();// }// return "";// }// 2. Получить MAC-адрес клиента // Вызов команды окна , в фоновом режиме Bean получить mac-адрес через ip. Метод следующий: // Скорость работы [быстро] public String getMAC() {String mac = null; try {Process pro = Runtime.getRuntime().exec("cmd.exe /c ipconfig/all");InputStream is = pro .getInputStream();BufferedReader br = новый BufferedReader(новый InputStreamReader(is));String message = br.readLine();int index = -1; while (message != null) {if ((index = message.indexOf("Физический адрес")) > 0) {mac = message.substring(index + 36).trim();break;}message = br.readLine();}System.out.println(mac);br.close();pro.destroy();} catch (IOException e) {System.out.println("Невозможно получить MAC-адрес!");return null;}return mac;}//Скорость работы [медленная] public String getMAC(String ip) {String str = null;String macAddress = null ;попробуйте {Process p = Runtime.getRuntime().exec("nbtstat -A " + ip);InputStreamReader ir = new InputStreamReader(p.getInputStream());LineNumberReader input = new LineNumberReader(ir);for (; true;) {str = input.readLine();if (str != null) {if (str.indexOf("MAC-адрес) ") > 1) {macAddress = str.substring(str.indexOf("MAC-адрес") + 14);break;}}}} catch (IOException e) {e.printStackTrace(System.out); return null;} return macAddress;}}
Способ третий, более упрощенный
импорт java.io.IOException; импорт java.io.InputStreamReader; импорт java.io.LineNumberReader; общедоступный класс MACAddress {String ip; String mac; public MACAddress (String ip) {this.ip = ip () { this.ip = "0.0.0.0" } public String getMac() { try { Process p = Runtime.getRuntime().exec("arp -n"); InputStreamReader ir = new InputStreamReader(p.getInputStream()); LineNumberReader input = new LineNumberReader(ir); p.waitFor(); Boolean flag = true; = "(" + this.ip + ")"; while(flag) { String str = input.readLine(); if (str !=) null) { if (str.indexOf(ipStr) > 1) { int temp = str.indexOf("at"); this.mac = str.substring(temp + 3, temp + 20 } } else flag; = false; } } catch (IOException | InterruptedException e) {e.printStackTrace(System.out) return this.mac; } public void setIp(String ip) { это.ip = IP }}
Наконец, мы должны расширить ход, друзья, смотрите внимательно.
Первое, что нужно сказать: этот метод может поддерживать получение MAC-адреса машины внешней сети.
Раньше у меня был такой, который мог получить доступ только к локальной сети. Вы не сможете получить к нему доступ, если у вас есть брандмауэр, но вам не о чем беспокоиться.
Я проверил IP-адрес Baidu и могу узнать Mac-адрес.
Java получает mac-адрес через ip - заблокировать ip, заблокировать mac-адрес
импортировать java.io.BufferedReader;импортировать java.io.InputStreamReader;импортировать java.util.regex.Matcher;импортировать java.util.regex.Pattern;/*** Получить MAC-адрес* @author* 2011-12*/public class GetMacAddress {public static String callCmd (String [] cmd) { String result = ""; String line = ""; Runtime.getRuntime().exec(cmd); InputStreamReader is = new InputStreamReader(proc.getInputStream()); BufferedReader br = new BufferedReader (is); while ((line = br.readLine ()) != null) {result += строка; } } catch(Exception e) { e.printStackTrace() } return result } /** * * @param; cmd первая команда* @param другая вторая команда* @return результат выполнения второй команды*/ public static String callCmd(String[] cmd,String[] else) { String result = ""; String line = ""; Runtime rt = Runtime.getRuntime(); Process proc = rt.exec(cmd); proc.waitFor(); //Выполнена первая команда и выполнена вторая команда proc = rt.exec(другой); InputStreamReader = новый InputStreamReader(proc.getInputStream()); BufferedReader br = новый BufferedReader (is); while ((line = br.readLine ()) != null) {result += line; } } catch(Exception e) { e.printStackTrace() } возвращаем результат } /** * * @param ip; Целевой IP-адрес, обычно внутри локальной сети* @param sourceString Строка результата обработки команды* @param macSeparator символ-разделитель mac* @return mac-адрес, представленный символом-разделителем выше*/ public static String filterMacAddress(final String ip, Final String sourceString ,final String macSeparator) { String result = ""; String regExp = "((([0-9,AF,af]{1,2}" + macSeparator + "){1,5})[0-9,AF,af]{1,2})"; Шаблон шаблона = Pattern.compile(regExp); Сопоставитель = шаблон.matcher(sourceString); while(matcher.find); ()){ result = matcher.group(1); if(sourceString.indexOf(ip) <= sourceString.lastIndexOf(matcher.group(1))) {break; //Если существует несколько IP-адресов, сопоставляется только Mac, соответствующий этому IP-адресу. } } return result } /** * * @param ip target ip * @return Mac Address * */ public static String getMacInWindows(final String ip). ){ String result = ""; String[] cmd = { "cmd", "/c", "ping" + ip }; String[] else = { "cmd", "/c", "arp -a" }; Нить cmdResult = callCmd(cmd,another); result = filterMacAddress(ip,cmdResult,"-" return result } /** * @param ip target ip * @return Mac Address * */ public static String getMacInLinux(final String); ip){ String result = ""; String[] cmd = { "/bin/sh", "-c", "ping " + ip + " -c 2 && arp -a" }; String cmdResult = callCmd(cmd); result = filterMacAddress(ip,cmdResult,":"); return result; } /** * Получить MAC-адрес* @return Возвратить MAC-адрес*/ public статическая строка getMacAddress (String ip) { String macAddress = ""; getMacInWindows (ip).trim(); if(macAddress==null||"".equals(macAddress)){ macAddress = getMacInLinux(ip).trim(); } return macAddress; } //Выполняем тест public static void main(String[] args) { System .out.println(getMacAddress("220.181.111.148"));