我是用Liunx来开发Java的,现在要开发一个获取客户端Mac的需求,我网上找了一些代码都是能得到本机的MAC地址,而不是客户端的MAC地址,哪位大哥,帮帮忙,看看改改程序,能不能变成客户端执行服务端就能获得客户端MAC地址,谢谢了~package kaga.it.Tools;    import java.io.BufferedReader;   
    import java.io.IOException;   
    import java.io.InputStreamReader;   
      
    /**  
     * 获取MAC地址  
     * @author sunlightcs  
     *  
     */  
    public class GetMacAddress {   
      
          /**   
           *  获取当前操作系统名称.   
           *  return 操作系统名称 例如:windows,Linux,Unix等.   
          */     
         public static String getOSName() {     
             return System.getProperty("os.name").toLowerCase();     
         }     
                  
         /**   
           * 获取Unix网卡的mac地址.   
          * @return mac地址   
          */     
         public static String getUnixMACAddress() {     
             String mac = null;     
             BufferedReader bufferedReader = null;     
             Process process = null;     
             try {     
                   /**  
                    *  Unix下的命令,一般取eth0作为本地主网卡 显示信息中包含有mac地址信息    
                    */  
                 process = Runtime.getRuntime().exec("ifconfig eth0");   
                 bufferedReader = new BufferedReader(new InputStreamReader(process     
                         .getInputStream()));     
                 String line = null;     
                 int index = -1;     
                 while ((line = bufferedReader.readLine()) != null) {     
                        /**  
                         *  寻找标示字符串[hwaddr]   
                         */  
                     index = line.toLowerCase().indexOf("hwaddr");    
                        /**  
                         * 找到了  
                         */  
                     if (index != -1) {     
                            /**  
                             *   取出mac地址并去除2边空格    
                             */  
                         mac = line.substring(index +"hwaddr".length()+ 1).trim();   
                         break;     
                     }     
                 }     
             } catch (IOException e) {     
                 e.printStackTrace();     
             } finally {     
                 try {     
                     if (bufferedReader != null) {     
                         bufferedReader.close();     
                     }     
                 } catch (IOException e1) {     
                    e1.printStackTrace();     
                }     
                 bufferedReader = null;     
                 process = null;     
             }     
          
             return mac;     
         }     
              
                
                
             /**   
               * 获取Linux网卡的mac地址.   
              * @return mac地址   
              */     
             public static String getLinuxMACAddress() {     
                 String mac = null;     
                 BufferedReader bufferedReader = null;     
                 Process process = null;     
                 try {     
                       /**  
                        *  linux下的命令,一般取eth0作为本地主网卡 显示信息中包含有mac地址信息    
                        */  
                     process = Runtime.getRuntime().exec("ifconfig eth0");   
                     bufferedReader = new BufferedReader(new InputStreamReader(process     
                             .getInputStream()));     
                     String line = null;     
                     int index = -1;     
                     while ((line = bufferedReader.readLine()) != null) {     
                         index = line.toLowerCase().indexOf("硬件地址");    
                            /**  
                             * 找到了  
                             */  
                         if (index != -1) {     
                                /**  
                                 *   取出mac地址并去除2边空格    
                                 */  
                             mac = line.substring(index+4).trim();   
                             break;     
                         }     
                     }     
                 } catch (IOException e) {     
                     e.printStackTrace();     
                 } finally {     
                     try {     
                         if (bufferedReader != null) {     
                             bufferedReader.close();     
                         }     
                     } catch (IOException e1) {     
                        e1.printStackTrace();     
                    }     
                     bufferedReader = null;     
                     process = null;     
                 }   
              
                 return mac;     
             }   
                
             /**   
              * 获取widnows网卡的mac地址.   
              * @return mac地址   
              */     
             public static String getWindowsMACAddress() {     
                 String mac = null;     
                 BufferedReader bufferedReader = null;     
                 Process process = null;     
                 try {     
                       /**  
                        * windows下的命令,显示信息中包含有mac地址信息    
                        */  
                     process = Runtime.getRuntime().exec("ipconfig /all");   
                     bufferedReader = new BufferedReader(new InputStreamReader(process     
                             .getInputStream()));     
                     String line = null;     
                     int index = -1;     
                     while ((line = bufferedReader.readLine()) != null) {     
                            /**  
                             *  寻找标示字符串[physical address]   
                             */  
                         index = line.toLowerCase().indexOf("physical address");    
                         if (index != -1) {   
                             index = line.indexOf(":");   
                             if (index != -1) {   
                                    /**  
                                     *   取出mac地址并去除2边空格  
                                     */  
                                mac = line.substring(index + 1).trim();    
                            }   
                             break;     
                         }   
                     }   
                 } catch (IOException e) {     
                     e.printStackTrace();     
                 }finally {     
                     try {     
                         if (bufferedReader != null) {     
                             bufferedReader.close();     
                           }     
                     }catch (IOException e1) {     
                         e1.printStackTrace();     
                       }     
                     bufferedReader = null;     
                     process = null;     
                 }     
              
                 return mac;     
             }     
              
             /**   
              * 测试用的main方法.   
              *    
              * @param argc   
             *            运行参数.   
              */     
             public static void main(String[] argc) {     
                 String os = getOSName();     
                 System.out.println(os);     
                 if(os.startsWith("windows")){     
                     String mac = getWindowsMACAddress();     
                     System.out.println("本地是windows:"+mac);     
                 }else if(os.startsWith("linux")){     
                       String mac = getLinuxMACAddress();     
                     System.out.println("本地是Linux系统,MAC地址是:"+mac);   
                 }else{     
                     String mac = getUnixMACAddress();                         
                     System.out.println("本地是Unix系统 MAC地址是:"+mac);   
                 }     
             }     
      
    }  

解决方案 »

  1.   

    http://rodneytt.iteye.com/blog/544676好像大部分都是通过ip来获取客户端的mac地址的、ip可以通过request获取到
      

  2.   

    在客户端开发一段代码,可以获取并返回Mac地址,然后服务器发消息让客户端提交过来就是了。
    能够从服务器端直接的到客户端Mac地址的方法虽然有,但是基本上只限于相同网段内。
      

  3.   

    <script language="JScript" event=OnObjectReady(objObject,objAsyncContext) for="someaddr">
                if(objObject.IPEnabled != null && objObject.IPEnabled != "undefined" && objObject.IPEnabled == true)
                {
                if(objObject.MACAddress != null && objObject.MACAddress != "undefined")
                 MACAddr = objObject.MACAddress;
                if(objObject.IPEnabled && objObject.IPAddress(0) != null && objObject.IPAddress(0) != "undefined")
                 IPAddr = objObject.IPAddress(0);
                if(objObject.DNSHostName != null && objObject.DNSHostName != "undefined")
                 sDNSName = objObject.DNSHostName;
                }
            </script>        <script type="text/javascript" event="OnCompleted(hResult,pErrorObject, pAsyncContext)" for="someaddr">
             var hidMacString=unescape(MACAddr);
             var hidMac=hidMacString.replace(/:/g,"-");
                document.getElementById('hidMac').value=hidMac ;
                </script>
    里面的hidMac就是mac地址可能需要设置下浏览器的安全级别
      

  4.   

    是的,WEB开发,目前还没有找到有效的方法
      

  5.   


    Web开发的话,就需要借助ActiveX来处理了,比如Applet也算是ActiveX。总的来说就是客户端(浏览器)获取到本机Mac,然后提交给服务器端。
      

  6.   

    有没有具体的实现代码呢,,我是在liunx环境下开发的,如是有现成的代码就好了
      

  7.   

    web开发的话,我刚贴的那一段就行;
      

  8.   

    <script language="JScript" event=OnObjectReady(objObject,objAsyncContext) for="someaddr">
                if(objObject.IPEnabled != null && objObject.IPEnabled != "undefined" && objObject.IPEnabled == true)
                {
                    if(objObject.MACAddress != null && objObject.MACAddress != "undefined")
                        MACAddr = objObject.MACAddress;
                    if(objObject.IPEnabled && objObject.IPAddress(0) != null && objObject.IPAddress(0) != "undefined")
                        IPAddr = objObject.IPAddress(0);
                    if(objObject.DNSHostName != null && objObject.DNSHostName != "undefined")
                        sDNSName = objObject.DNSHostName;
                }
            </script>        <script type="text/javascript" event="OnCompleted(hResult,pErrorObject, pAsyncContext)" for="someaddr">
                var hidMacString=unescape(MACAddr);
                var hidMac=hidMacString.replace(/:/g,"-");
                document.getElementById('hidMac').value=hidMac ;
                </script>弱弱的问一下,我是新手,js不是很熟悉,html代码如何得到hidMac的值呀,    <form action="UserLogin.action" method="post">
            <div align="center">得到MAC地址
             
              <br>MAC地址是:
              <input type="text" name="hidMac" value="hidMac"/>
              <br>
           
            <input name="submit" type="submit" value="提交">
            <input name="reset" type="reset" value="重置">
            </div>
          </form>这样子行吗,不行的话,帮我改一下代码吧,谢谢了!!!!!
      

  9.   

     <form action="UserLogin.action" method="post">
            <div align="center">得到MAC地址
             
              <br>MAC地址是:
              <input type="text" id="hidMac" name="hidMac" />
              <br>
           
            <input name="submit" type="submit" value="提交">
            <input name="reset" type="reset" value="重置">
            </div>
          </form>这样子还是获得不到.....哎...
      

  10.   

    改成隐藏域  在js 中通过变量 给它赋值  然后 表单提交 也可以拼url 把值传过去
      

  11.   

    能不能帮我写几行表单读JS的hidMac变量值,谢谢了!!-
      

  12.   

    <script>
    function gosubmit(){
    document.getElementById("hidMac").value=hidMac;
    document.macForm.action="UserLogin";
    document.macForm.submit();
    }
    </script>
    <form name="macForm" method="post">
    <input type="hidden" name="hidMac" id="hidMac" />
    <input type="button" value="提交" onclick="javascript:gosubmit();" />
    </form>
    大概 或许 是这样 
      

  13.   

    String hidMac = req.getParameter("hidMac");//客户端网卡地址

                     System.out.println("客户端网卡地址:"+hidMac);
    结果输出是:客户端网卡地址:[object HTMLInputElement]还是没有用.....
      

  14.   

    ie下面拿js是可以获取到mac地址的。js是在客户端执行的。
    火狐下面不可以。jsp、java代码取到的都是服务器的mac。
      

  15.   

    已经解决,yugao2918的方法可以用,谢谢了 但是FIRFOX死活都获取不到IP