package com.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="+get.getMAC());  

       System.out.println("2="+get.getMAC("192.168.0.9"));  

   }  


   // 1.获取客户端ip地址( 这个必须从客户端传到后台):  

   // jsp页面下,很简单,request.getRemoteAddr() ;  

   // 因为系统的VIew层是用JSF来实现的,因此页面上没法直接获得类似request,在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(new InputStreamReader(is,"GBK"));  

           String message = br.readLine();  


           int index = -1;  

           while (message != null) {  

               if ((index = message.indexOf("Physical Address")) > 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 {  

           Process p = Runtime.getRuntime().exec(" nbtstat -A " + ip);  

           InputStreamReader ir = new InputStreamReader(p.getInputStream(), "GBK");  

           LineNumberReader input = new LineNumberReader(ir);  

           for (; true;) {  

               str = input.readLine();  

               System.out.println(str);

               if (str != null) {  

                   if (str.indexOf("MAC Address") > 1) {  

                       macAddress = str  

                               .substring(str.indexOf("MAC Address") + 14);  

                       break;  

                   }  

               }  

           }  

       } catch (IOException e) {  

           e.printStackTrace(System.out);  

           return null;  

       }  

       return macAddress;  

   }  

}  






解决方案如下

C:\\Windows\\system32\\nbtstat.exe在程序中调,是找不到的。
是64位系统的产生的原因,把命令改成“cmd /c C:\\Windows\\sysnative\\nbtstat.exe -a 192.168.44.1”就可以了,至于sysnative是什么意思,自行网上查查。

你的代码之所以不打印任何东西,也不输出错误信息,是因为用了process.getInputStream(),它是获取到了std_out,而由于前面说的,找不到C:\\Windows\\system32\\nbtstat.exe,会在std_err输出错误信息,所以你把process.getInputStream()改成getErrorStream()就可以了,它会把错误信息打出来。