• 先使用ping -n  2 10.0.0.1 命令,如果返回的结果中含有TTL字符,证明ping 10.0.0.1是能ping通的,即可达的。如果在Linux机器上请使用 ping -c 2 10.0.0.1命令
  • 再使用arp -a 10.0.0.1命令,在windows的cmd中使用该命令的返回结果如下图
  • 得到 10.0.0.1的Mac地址为34-96-72-a0-ee-b5
  • 既然通过这两个命令能实现从IP地址到MAC地址的转换,那么在Java后台无非就是执行这两条命令,对结果进行分析,对字符串进行处理得到MAC地址
  • import java.io.InputStream; import java.io.InputStreamReader; import java.util.regex.Matcher; import java.util.regex.Pattern; public class IP2MacUtils { public static String commond(String cmd) throws IOException{ Process process = Runtime.getRuntime().exec(cmd); InputStream inputStream = process.getInputStream(); BufferedReader bufferedReader = new BufferedReader( new InputStreamReader(inputStream)); StringBuilder stringBuilder = new StringBuilder(); String line = null ; while ((line = bufferedReader.readLine()) != null ){ // String encode = System.getProperty("sun.jun.encoding"); stringBuilder.append(line); return stringBuilder.toString(); public static String getMacByIP(String IPAddress) throws IOException{ String result = commond("ping -n 3 " + IPAddress); if ( result.contains("TTL" )) { result = commond("arp -a " + IPAddress); System.out.println(result); String regExp = "([0-9A-Fa-f]{2})([-:][0-9A-Fa-f]{2}){5}" ; Pattern pattern = Pattern.compile(regExp); Matcher matcher = pattern.matcher(result); StringBuilder stringBuilder = new StringBuilder(); while ( matcher.find() ){ String temp = matcher.group(); System.out.println(temp); stringBuilder.append(temp); return stringBuilder.toString(); public static void main(String[] args) throws IOException{ System.out.println( "MAC : " + getMacByIP("10.0.0.1" ));
  • 最终程序的运行结果为
  • 得到的结果一如命令行得到的结果,从而实现了Java中由IP地址得到MAC地址。

    Java.lang.Process , Pattern , Matcher ,正则表达式的简单使用