首页 java基础 根据ip获取mac地址(亲测可用,获取速度慢,需要用异步来保存)

根据ip获取mac地址(亲测可用,获取速度慢,需要用异步来保存)

package com.thinkgem.jeesite.modules.ad.util; import java.io…

package com.thinkgem.jeesite.modules.ad.util;

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 = "";
     try {
       Process proc = Runtime.getRuntime().exec(cmd);
       InputStreamReader is = new InputStreamReader(proc.getInputStream());
       BufferedReader br = new BufferedReader(is);
       while ((line = br.readLine ()) != null) {
       result += line;
       }
     }
     catch(Exception e) {
       e.printStackTrace();
     }
     return result;
   }

   /**
   *
   * @param cmd 第一个命令
   * @param another 第二个命令
   * @return  第二个命令的执行结果
   */
   public static String callCmd(String[] cmd,String[] another) {
     String result = "";
     String line = "";
     try {
       Runtime rt = Runtime.getRuntime();
       Process proc = rt.exec(cmd);
       proc.waitFor(); //已经执行完第一个命令,准备执行第二个命令
       proc = rt.exec(another);
       InputStreamReader is = new InputStreamReader(proc.getInputStream());
       BufferedReader br = new BufferedReader (is);
       while ((line = br.readLine ()) != null) {
         result += line;
       }
     }
     catch(Exception e) {
       e.printStackTrace();
     }
     return result;
   }



   /**
   *
   * @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,A-F,a-f]{1,2}" + macSeparator + "){1,5})[0-9,A-F,a-f]{1,2})";
     Pattern pattern = Pattern.compile(regExp);
     Matcher matcher = pattern.matcher(sourceString);
     while(matcher.find()){
       result = matcher.group(1);
       if(sourceString.indexOf(ip) <= sourceString.lastIndexOf(matcher.group(1))) {
         break; //如果有多个IP,只匹配本IP对应的Mac.
       }
     }

     return result;
   }



   /**
   *
   * @param ip 目标ip
   * @return  Mac Address
   *
   */
   public static String getMacInWindows(final String ip){
     String result = "";
     String[] cmd = {
         "cmd",
         "/c",
         "ping " + ip
         };
     String[] another = {
         "cmd",
         "/c",
         "arp -a"
         };

     String cmdResult = callCmd(cmd,another);
     result = filterMacAddress(ip,cmdResult,"-");

     return result;
   }

   /**
   * @param ip 目标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 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.158"));
   }

}
免责声明:文章内容不代表本站立场,本站不对其内容的真实性、完整性、准确性给予任何担保、暗示和承诺,仅供读者参考,文章版权归原作者所有。如本文内容影响到您的合法权益(内容、图片等),请及时联系本站,我们会及时删除处理。

为您推荐

26个大小写字母对应的哈希值

26个大小写字母对应的哈希值

大写字母: 小写字母 A 对应的哈希值:65 B 对应的哈希值:66 C 对应的哈希值:67 D 对应的哈希值:68 E...
linux 把文件名字写入到txt

linux 把文件名字写入到txt

1、首先连接上linux主机,进入到需要处理的目录,例如“/”目录。   2、输入:ls -1 > 1....
git 流程开发

git 流程开发

前提条件:不能在 master 分支上修改任何文件。master 分支的变更只能通过 git pull 和 git me...
使用Git将本地文件提交到远程仓库

使用Git将本地文件提交到远程仓库

使用Git将本地文件提交到远程仓库 使用Git将本地文件提交到远程仓库 现在要将本地代码推到git远程仓库保存,可以提交...
将博客搬至CSDN

将博客搬至CSDN

将博客搬至CSDN
返回顶部