次のようにコードをコピーします。
パッケージcom.yswc.dao.sign;
java.io.BufferedReaderをインポートします。
インポートjava.io.InputStreamReader;
java.util.regex.Matcherをインポートします。
java.util.regex.Patternをインポートします。
/**
*
* MACアドレスを取得する
*
* @著者
*
*2011-12
*
*/
パブリック クラス GetMacAddress {
public static String callCmd(String[] cmd) {
文字列結果 = "";
文字列行 = "";
試す {
プロセス proc = Runtime.getRuntime().exec(cmd);
InputStreamReader は = new InputStreamReader(proc.getInputStream());
BufferedReader br = 新しい BufferedReader (is);
while ((line = br.readLine ()) != null) {
結果 += 行;
}
}catch(例外 e) {
e.printStackTrace();
}
結果を返します。
}
/**
*
*
*
* @param コマンド
* 最初のコマンド
*
* @param別
* 2 番目のコマンド
*
* @return 2番目のコマンドの実行結果
*
*/
public static String callCmd(String[] cmd,String[] another) {
文字列結果 = "";
文字列行 = "";
試す {
ランタイム rt = Runtime.getRuntime();
プロセス proc = rt.exec(cmd);
proc.waitFor(); // 最初のコマンドが実行され、2 番目のコマンドが実行されました。
proc = rt.exec(別);
InputStreamReader は = new InputStreamReader(proc.getInputStream());
BufferedReader br = 新しい BufferedReader (is);
while ((line = br.readLine ()) != null) {
結果 += 行;
}
}catch(例外 e) {
e.printStackTrace();
}
結果を返します。
}
/**
*
*
*
* @パラメータIP
* ターゲット IP、通常は LAN 内
*
* @paramソース文字列
※コマンド処理の結果文字列
*
* @param macSeparator
* MAC区切り文字
*
* @return MAC アドレス。上記の区切り文字で表されます。
*
*/
public static String filterMacAddress(final String ip、final String sourceString、final String macSeparator) {
文字列結果 = "";
文字列 regExp = "((([0-9,AF,af]{1,2}" + macSeparator + "){1,5})[0-9,AF,af]{1,2})";
パターン pattern = Pattern.compile(regExp);
マッチャー matcher = pattern.matcher(sourceString);
while(matcher.find()){
結果 = matcher.group(1);
if(sourceString.indexOf(ip) <= sourceString.lastIndexOf(matcher.group(1))) {
Break; // IP が複数ある場合は、この IP に対応する Mac のみが一致します。
}
}
結果を返します。
}
/**
*
*
*
* @パラメータIP
* ターゲットIP
*
* @return Mac アドレス
*
*
*
*/
public static String getMacInWindows(final String ip){
文字列結果 = "";
String[] cmd = {"cmd","/c","ping " + ip};
String[] another = {"cmd","/c","arp -a"};
文字列 cmdResult = callCmd(cmd,another);
result = filterMacAddress(ip,cmdResult,"-");
結果を返します。
}
/**
*
* @パラメータIP
* ターゲットIP
* @return Mac アドレス
*
*/
public static String getMacInLinux(final String ip){
文字列結果 = "";
String[] cmd = {"/bin/sh","-c","ping " + ip + " -c 2 && arp -a" };
文字列 cmdResult = callCmd(cmd);
result = filterMacAddress(ip,cmdResult,":");
結果を返します。
}
/**
* MACアドレスを取得する
*
* @return MAC アドレスを返します
*/
public static String getMacAddress(String ip){
文字列 macAddress = "";
macAddress = getMacInWindows(ip).trim();
if(macAddress==null||"".equals(macAddress)){
macAddress = getMacInLinux(ip).trim();
}
macアドレスを返します。
}
public static void main(String[] args) {
文字列 mac=getMacAddress("192.168.1.102");
System.out.println("mac:"+mac);
}
}