Cannot run program "nbtstat": CreateProcess error=2, ϵͳÕҲ» 出錯解決

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()就可以了,它會把錯誤信息打出來。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章