方法 1: ローカル マシンのアドレスを LAN 内の他のマシンから区別する
/** * IP アドレスに基づいて MAC アドレスを取得します * @param ipAddress 127.0.0.1 * @return * @throws SocketException * @throws UnknownHostException */ public static String getLocalMac(String ipAddress) throws SocketException, UnknownHostException { // TODO Auto -生成されたメソッド スタブ 文字列 str = "" 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 アドレスを String 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 : s);小文字を大文字に変更して通常の MAC アドレスにし、return macAddress = sb.toString().trim().toUpperCase(); else { // 非ローカル IP の MAC アドレスを取得します try { System.out.println(ipAddress); Process p = Runtime.getRuntime() .exec("nbtstat -A " + ipAddress); ("= ==process=="+p); InputStreamReader ir = 新しい BufferedReader(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) { } macAddress を返します。
方法 2 を見てみましょう。
パッケージ com.alpha.test;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.LineNumberReader;public class GetMac {/** * java はクライアント ネットワーク カードの MAC アドレスを取得します * * @param args */public static void main(String[] args) {GetMac get = new GetMac();System.out.println("1="+getMAC());System.out.println("2="+getMAC("127.0.0.1"));}// 1 .クライアント IP アドレスを取得します (これはクライアントからバックグラウンドに渡される必要があります): // JSP ページでは、非常に単純です request.getRemoteAddr();//システムの VIew 層は JSF で実装されているため、同様のリクエストをページ上で直接取得することはできません。そのため、Bean // 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 アドレスを取得します // window コマンドを呼び出します, バックグラウンド Bean で、ip を介して MAC アドレスを取得します。メソッドは次のとおりです。 // 実行速度 [速い] 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(newInputStreamReader(is));文字列メッセージ = br.readLine();int インデックス = -1;while (メッセージ != 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("Can't get mac address!");return null;}return mac;}//実行速度 [遅い] public String getMAC(String ip) {String str = null;String macAddress = null ;try {プロセス 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);null を返す;}macAddress を返す;}}
方法 3、より合理化された方法
import java.io.IOException;import java.io.InputStreamReader;import java.io.LineNumberReader; public class MACAddress { String ip String mac; this.ip = ip; this.ip = "0.0.0.0"; } public String getMac(){ try { プロセス p = Runtime.getRuntime().exec("arp -n"); InputStreamReader ir = new InputStreamReader(p.getInputStream()); p.waitFor(); = "(" + 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); = false; } } catch (IOException | InterruptedException e) { e.printStackTrace(System.out) } public void setIp(String ip);この.ip = }}
最後に、私たちは動きを拡大しなければなりません、皆さん、注意深く見守ってください。
最初に言っておきたいのは、この方法は外部ネットワーク マシンの MAC アドレスの取得をサポートできるということです。
以前はLANのみにアクセスできるものを使用していました。 ファイアウォールがある場合はアクセスできませんが、心配する必要はありません。
Baidu の IP をテストしたところ、MAC アドレスを取得できました。
JavaはIPを介してMACアドレスを取得します - IPをブロックしてMACアドレスをブロックします
import java.io.BufferedReader;import java.io.InputStreamReader;import java.util.regex.Matcher;import 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()); br = new BufferedReader (is) while ((line = br.readLine ()) != null); += 行; } } catch(Exception e) { e.printStackTrace() } 結果を返します。 cmd 最初のコマンド* @param 別の 2 番目のコマンド* @return 2 番目のコマンドの実行結果*/ public static String callCmd(String[] cmd,String[] another) { String result = ""; String line = "";ランタイム rt = Runtime.getRuntime(); プロセス proc = rt.exec(cmd); //最初のコマンドが実行され、2 番目のコマンドが実行されました。 rt.exec(another); InputStreamReader is = new InputStreamReader(proc.getInputStream()); br = new BufferedReader (is); ((line = br.readLine ()) != null) { result += line; } } catch(Exception e) { e.printStackTrace() } 結果を返します } /** * * @param ipターゲット IP (通常は LAN 内)* @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) = pattern.matcher(sourceString); ()){ 結果 = matcher.group(1); if(sourceString.indexOf(ip) <= sourceString.lastIndexOf(matcher.group(1))) { ブレーク; //IP が複数ある場合は、この IP に対応する Mac のみが一致します。 } } return result } /** * * @param ip target ip * @return Mac Address * */ public static String getMacInWindows(final String ip) ){ 文字列結果 = ""; String[] cmd = { "cmd", "/c", "ping " + ip }; }; 弦cmdResult = callCmd(cmd,another); result = filterMacAddress(ip,cmdResult,"-"); /** * @param ip target ip * */ public static String getMacInLinux(final String); ip){ 文字列結果 = ""; 文字列 [] cmd = { "/bin/sh", "-c", "ping " + ip + " -c 2 && arp -a" }; String cmdResult = callCmd(cmd); result = filterMacAddress(ip,cmdResult,":"); return result; } /** * MAC アドレスを取得します* @return MAC アドレスを返します*/ public static String getMacAddress(String ip){ String macAddress = "" 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"));