Método 1: distinguir la dirección de la máquina local de otras máquinas en la LAN
/** * Obtener la dirección mac basada en la dirección IP * @param ipAddress 127.0.0.1 * @return * @throws SocketException * @throws UnknownHostException */ public static String getLocalMac(String ipAddress) throws SocketException, UnknownHostException { // TODO Auto -stub de método generado String str = "" String macAddress = "" final String; LOOPBACK_ADDRESS = "127.0.0.1"; // Si es 127.0.0.1, obtenga la dirección MAC local. if (LOOPBACK_ADDRESS.equals(ipAddress)) { InetAddress inetAddress = InetAddress.getLocalHost() // Parece que este método requiere JDK1.6. byte[] mac = NetworkInterface.getByInetAddress(inetAddress) .getHardwareAddress(); // El siguiente código ensambla la dirección mac en String StringBuilder sb = new StringBuilder() for (int i = 0; i < mac.length; i++) { si (yo! = 0) { sb.append("-" } // mac[i] & 0xFF Es convertir un byte en un entero positivo String s = Integer.toHexString(mac[i] & 0xFF); sb.append(s.length() == 1? 0 + s : } // Convertir todas las cadenas); Cambie las letras minúsculas a mayúsculas para que se conviertan en la dirección mac normal y devuelva macAddress = sb.toString().trim().toUpperCase() return macAddress } else { // Obtener la dirección MAC de la IP no local try { System.out.println(ipAddress); Process p = Runtime.getRuntime() .exec("nbtstat -A " + ipAddress); ("= ==proceso=="+p); InputStreamReader ir = nuevo InputStreamReader(p.getInputStream()); while ((str = br.readLine()) != null) { if(str.indexOf("MAC")>1){ macAddress = str.substring(str.indexOf("MAC")+9, str.length ()); direcciónmac = direcciónmac.trim(); System.out.println("direcciónmac:" + direcciónmac); ir.close(); } catch (IOException ex) { } return macAddress;
Echemos un vistazo al método dos:
paquete com.alpha.test;importar java.io.BufferedReader;importar java.io.IOException;importar java.io.InputStream;importar java.io.InputStreamReader;importar java.io.LineNumberReader;clase pública GetMac {/** * java obtiene la dirección MAC de la tarjeta de red del cliente * * @param args */public static void main(String[] args) {GetMac get = nuevo GetMac();System.out.println("1="+get.getMAC());System.out.println("2="+get.getMAC("127.0.0.1"));}// 1 .Obtenga la dirección IP del cliente (esto debe pasarse del cliente al fondo): // En la página jsp, es muy simple, request.getRemoteAddr();// Debido a que la capa VIew del sistema se implementa con JSF, no se pueden obtener solicitudes similares directamente en la página, por lo que se realiza una conversión forzada en el bean // public String getMyIP() {// try {// FacesContext fc = FacesContext. getCurrentInstance ();// solicitud HttpServletRequest = (HttpServletRequest) fc// .getExternalContext().getRequest();// retorno request.getRemoteAddr();// } catch (Exception e) {// e.printStackTrace();// }// return "";// }// 2. Obtener la dirección mac del cliente // Llame al comando de ventana , En segundo plano Bean, obtenga la dirección mac a través de ip. El método es el siguiente: // Velocidad de ejecución [rápida] public String getMAC() {String mac = null; try {Process pro = Runtime.getRuntime().exec("cmd.exe /c ipconfig/all");InputStream is = pro .getInputStream();BufferedReader br = new BufferedReader(new InputStreamReader(is));String mensaje = br.readLine();int index = -1; while (mensaje! = nulo) {if ((index = mensaje.indexOf("Dirección física")) > 0) {mac = mensaje.substring(index + 36).trim();break;}mensaje = br.readLine();}System.out.println(mac);br.close();pro.destroy();} captura (IOException e) {System.out.println("¡No se puede obtener la dirección mac!");return null;}return mac;}//Velocidad de ejecución [lenta] public String getMAC(String ip) {String str = null;String macAddress = null ;pruebe {Proceso p = Runtime.getRuntime().exec("nbtstat -A " + ip);InputStreamReader ir = nuevo InputStreamReader(p.getInputStream());LineNumberReader input = new LineNumberReader(ir);for (; true;) {str = input.readLine();if (str!= null) {if (str.indexOf("Dirección MAC ") > 1) {macAddress = str.substring(str.indexOf("Dirección MAC") + 14);break;}}}} catch (IOException e) {e.printStackTrace(System.out);return null;}return macAddress;}}
Método tres, más simplificado
importar java.io.IOException;importar java.io.InputStreamReader;importar java.io.LineNumberReader;dirección MAC de clase pública { IP de cadena; dirección MAC pública (ip de cadena){ this.ip = ip } dirección MAC pública (){ this.ip = "0.0.0.0"; } cadena pública getMac(){ prueba { Proceso p = Runtime.getRuntime().exec("arp -n"); InputStreamReader ir = new InputStreamReader(p.getInputStream()); LineNumberReader input = new LineNumberReader(ir); = "(" + this.ip + ")"; while(bandera) { String str = input.readLine(); if (str!= nulo) { if (str.indexOf(ipStr) > 1) { int temp = str.indexOf("at"); this.mac = str.substring( temp + 3, temp + 20); = falso; } } catch (IOException | InterruptedException e) { e.printStackTrace(System.out } return this.mac } public void setIp(String ip); esto.ip = ip; }}
Finalmente, tenemos que ampliar la jugada, amigos, miren con atención.
Lo primero que hay que decir es: este método puede admitir la obtención de la dirección mac de la máquina de la red externa.
Solía tener uno que sólo podía acceder a la LAN. No puedes acceder a él si tienes un firewall, pero no tienes que preocuparte por esto.
Probé la IP de Baidu y puedo obtener la dirección mac.
java obtiene la dirección mac a través de ip - bloquear ip bloquear la dirección mac
import java.io.BufferedReader;import java.io.InputStreamReader;import java.util.regex.Matcher;import java.util.regex.Pattern;/*** Obtener dirección MAC* @author* 2011-12*/clase pública GetMacAddress { callCmd de cadena estática pública (String [] cmd) { Resultado de cadena = ""; Línea de cadena = ""; Runtime.getRuntime().exec(cmd); InputStreamReader es = nuevo InputStreamReader(proc.getInputStream()); BufferedReader br = nuevo BufferedReader (es); += línea; } } catch(Exception e) { e.printStackTrace(); devolver resultado } /** * * @param cmd primer comando* @param otro segundo comando* @return resultado de ejecución del segundo comando*/ public static String callCmd(String[] cmd,String[] another) { String result = ""; Runtime rt = Runtime.getRuntime(); Process proc = rt.exec(cmd proc.waitFor(); // El primer comando se ha ejecutado y el segundo comando se ha ejecutado proc = rt.exec(otro); InputStreamReader es = nuevo InputStreamReader(proc.getInputStream()); BufferedReader br = nuevo BufferedReader (es mientras ((línea = br.readLine ()) != nulo) { resultado += línea; } } catch(Exception e) { e.printStackTrace(); devolver resultado } /** * * @param ip; IP de destino, generalmente dentro de la LAN* @param sourceString La cadena de resultado del procesamiento del comando* @param macSeparator símbolo de separador mac* @return dirección mac, representada por el símbolo separador arriba*/ public static String filterMacAddress(final String ip, final String sourceString ,final String macSeparator) { String resultado = ""; String regExp = "((([0-9,AF,af]{1,2}" + macSeparator + "){1,5})[0-9,AF,af]{1,2})"; Patrón patrón = Pattern.compile(regExp); Matcher matcher = patrón.matcher(sourceString); ()){ resultado = matcher.group(1); if(sourceString.indexOf(ip) <= sourceString.lastIndexOf(matcher.group(1))) { descanso; //Si hay varias IP, solo coincide la Mac correspondiente a esta IP. } } return result } /** * * @param ip target ip * @return Mac Address * */ public static String getMacInWindows(final String ip ){ Resultado de cadena = ""; Cadena[] cmd = { "cmd", "/c", "ping " + ip }; Cadena[] otro = { "cmd", "/c", "arp -a" }; Cadena cmdResult = callCmd(cmd,otro); resultado = filterMacAddress(ip,cmdResult,"-"); resultado de retorno } /** * @param ip target ip * @return Dirección Mac * */ public static String getMacInLinux(final String ip){ Resultado de cadena = ""; Cadena[] cmd = { "/bin/sh", "-c", "ping " + ip + " -c 2 && arp -a" }; String cmdResult = callCmd(cmd); result = filterMacAddress(ip,cmdResult,":"); return result; } /** * Obtener la dirección MAC* @return Devolver la dirección MAC*/ public cadena estática getMacAddress(String ip){ String macAddress = ""; macAddress = getMacInWindows(ip).trim(); if(macAddress==null||"".equals(macAddress)){ macAddress = getMacInLinux(ip).trim() } return macAddress } //Hacer una prueba public static void main(String[] args) { System .out.println(getMacAddress("220.181.111.148"));