Metode 1: Bedakan alamat mesin lokal dari mesin lain di LAN
/** * Dapatkan alamat mac berdasarkan alamat IP * @param ipAddress 127.0.0.1 * @return * @throws SocketException * @throws UnknownHostException */ public static String getLocalMac(String ipAddress) throws SocketException, UnknownHostException { // TODO Auto -metode rintisan yang dihasilkan String str = ""; String macAddress = ""; final String LOOPBACK_ADDRESS = "127.0.0.1"; // Jika 127.0.0.1, dapatkan alamat MAC lokal. if (LOOPBACK_ADDRESS.equals(ipAddress)) { InetAddress inetAddress = InetAddress.getLocalHost(); // Tampaknya metode ini memerlukan JDK1.6. byte[] mac = NetworkInterface.getByInetAddress(inetAddress) .getHardwareAddress(); // Kode berikut merakit alamat mac menjadi String StringBuilder sb = new StringBuilder(); { jika (i != 0) { sb.append("-"); // mac[i] & 0xFF Ini untuk mengubah byte menjadi bilangan bulat positif String s = Integer.toHexString(mac[i] & 0xFF); Ubah huruf kecil menjadi huruf besar menjadi alamat mac biasa dan return macAddress = sb.toString().trim().toUpperCase(); return macAddress } else { // Dapatkan alamat MAC dari IP non-lokal coba { System.out.println(ipAddress); Proses p = Runtime.getRuntime() .exec("nbtstat -A " + ipAddress); ("= ==proses=="+p); InputStreamReader ir = InputStreamReader baru(p.getInputStream()); 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); ir.close(); } catch (IOException ex) {} mengembalikan alamat mac;
Mari kita lihat metode kedua:
paket com.alpha.test;impor java.io.BufferedReader;impor java.io.IOException;impor java.io.InputStream;impor java.io.InputStreamReader;impor java.io.LineNumberReader;getMac kelas publik {/** * java mendapatkan alamat MAC kartu jaringan klien * * @param args */public static void main(String[] args) {GetMac get = GetMac();System.out.println("1="+get.getMAC());System.out.println("2="+get.getMAC("127.0.0.1"));}// 1 baru .Dapatkan alamat IP klien (ini harus diteruskan dari klien ke latar belakang): // Di bawah halaman jsp, ini sangat sederhana, request.getRemoteAddr();// Karena lapisan VIew sistem diimplementasikan dengan JSF, permintaan serupa tidak dapat diperoleh langsung di halaman, sehingga konversi paksa dilakukan di kacang // public String getMyIP() {// try {// FacesContext fc = FacesContext. getCurrentInstance();// Permintaan HttpServletRequest = (HttpServletRequest) fc// .getExternalContext().getRequest();// kembali request.getRemoteAddr();// } catch (Exception e) {// e.printStackTrace();// }// return "";// }// 2. Dapatkan alamat mac klien // Panggil perintah window , di latar belakang Bean, dapatkan alamat mac melalui ip. Caranya sebagai berikut: // Kecepatan lari [cepat] 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 pesan = br.readLine();int indeks = -1;sementara (pesan != null) {if ((index = message.indexOf("Alamat Fisik")) > 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("Tidak bisa mendapatkan alamat mac!");return null;}return mac;}//Kecepatan berjalan [lambat] public String getMAC(String ip) {String str = null;String macAddress = null ;coba {Proses 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("Alamat MAC ") > 1) {macAddress = str.substring(str.indexOf("MAC Address") + 14);break;}}}} catch (IOException e) {e.printStackTrace(System.out);return null;}return macAddress;}}
Metode ketiga, lebih efisien
impor java.io.IOException;impor java.io.InputStreamReader;impor java.io.LineNumberReader;MACAddress kelas publik { String ip; String mac; MACAddress publik (String ip){ this.ip = ip; this.ip = "0.0.0.0"; } String publik getMac(){ coba { Proses p = Runtime.getRuntime().exec("arp -n"); InputStreamReader ir = new InputStreamReader(p.getInputStream()); LineNumberReader input = new LineNumberReader(ir); = "(" + ini.ip + ")"; while(bendera) { String str = input.readLine(); null) { if (str.indexOf(ipStr) > 1) { int temp = str.indexOf("at"); this.mac = str.substring( temp + 3, temp + 20); = false; } } catch (IOException | InterruptedException e) { e.printStackTrace(System.out } kembalikan this.mac; } public void setIp(String ip){ ini.ip = ip; }}
Terakhir, kita harus memperbesar langkahnya ya sob, perhatikan baik-baik.
Hal pertama yang harus saya katakan adalah: Metode ini dapat mendukung perolehan alamat mac mesin jaringan eksternal.
Saya dulu punya yang hanya bisa mengakses LAN. Anda tidak dapat mengaksesnya jika Anda memiliki firewall, tetapi Anda tidak perlu khawatir tentang hal ini.
Saya menguji IP Baidu dan bisa mendapatkan alamat mac.
java mendapat alamat mac melalui ip - blokir ip blokir alamat mac
import java.io.BufferedReader;import java.io.InputStreamReader;import java.util.regex.Matcher;import java.util.regex.Pattern;/*** Dapatkan alamat MAC* @penulis* 2011-12*/kelas publik GetMacAddress { public static String callCmd(String[] cmd) { String hasil = ""; String baris = ""; coba { Proses proc = Runtime.getRuntime().exec(cmd); InputStreamReader adalah = new InputStreamReader(proc.getInputStream()); BufferedReader br = new BufferedReader (adalah); += baris; } } catch(Pengecualian e) { e.printStackTrace(); cmd perintah pertama* @param perintah kedua lainnya* @kembalikan hasil eksekusi perintah kedua*/ public static String callCmd(String[] cmd,String[] another) { String result = ""; Runtime rt = Runtime.getRuntime(); Proses proc = rt.exec(cmd); proc.waitFor(); //Perintah pertama telah dijalankan dan perintah kedua telah dijalankan proc = rt.exec(yang lain); InputStreamReader adalah = new InputStreamReader(proc.getInputStream()); BufferedReader br = new BufferedReader (adalah); } } catch(Pengecualian e) { e.printStackTrace(); } mengembalikan hasil; Ip target, biasanya dalam LAN* @param sourceString String hasil pemrosesan perintah* @param macSeparator simbol pemisah mac* @return alamat mac, diwakili oleh simbol pemisah di atas*/ public static String filterMacAddress(final String ip, final String sourceString ,string akhir macSeparator) { Hasil string = ""; String regExp = "((([0-9,AF,af]{1,2}" + macSeparator + "){1,5})[0-9,AF,af]{1,2})"; Pola pola = Pattern.compile(regExp); Matcher matcher = pattern.matcher(sourceString); ()){ hasil = matcher.group(1); if(sourceString.indexOf(ip) <= sourceString.lastIndexOf(matcher.group(1))) { istirahat; //Jika ada beberapa IP, hanya Mac yang sesuai dengan IP ini yang cocok. } } hasil pengembalian } /** * * @param ip target ip * @return Mac Address * */ public static String getMacInWindows(final String ip ){ Hasil string = ""; String[] cmd = { "cmd", "/c", "ping " + ip }; }; Rangkaian cmdResult = callCmd(cmd,another); hasil = filterMacAddress(ip,cmdResult,"-"); ip){ Hasil string = ""; String[] cmd = { "/bin/sh", "-c", "ping " + ip + " -c 2 && arp -a" }; String cmdResult = callCmd(cmd); result = filterMacAddress(ip,cmdResult,":"); return result; } /** * Dapatkan alamat MAC* @return Mengembalikan alamat MAC*/ public String statis getMacAddress(String ip){ String macAddress = ""; macAddress = getMacInWindows(ip).trim(); if(macAddress==null||"".equals(macAddress)){ macAddress = getMacInLinux(ip).trim(); } return macAddress } //Lakukan pengujian public static void main(String[] args) { System .keluar.println(getMacAddress("220.181.111.148"));