beinuo0501 发表于 2013-1-28 12:42:34

Common Get Web Client Mac Address Method (通用获取Web客户端MAC地址方法)

参考:http://techdetails.agwego.com/2008/02/11/37/
   实现:Java Applet
   优点:兼容所有支持Applet的浏览器.
Applet 源码:
/* * Author: Tim Desjardins * Copyright (c) 2008 Agwego Enterprises Inc. * * Feel free to use or abuse this code anyway you wish, without warranty of course. */import java.net.NetworkInterface;import java.net.SocketException;import java.util.Enumeration;import java.util.ArrayList;import java.applet.Applet;public class MacAddressApplet extends Applet{    public static String sep = ":";    public static String format = "%02X";    /**   * getMacAddress - return the first mac address found   * separator - byte seperator default ":"   * format - byte formatter default "%02X"   *   * @param ni - the network interface   * @return String - the mac address as a string   * @throws SocketException - pass it on   */    public static String macToString( NetworkInterface ni ) throws SocketException    {      return macToString( ni, MacAddressApplet.sep,MacAddressApplet.format );    }    /**   * getMacAddress - return the first mac address found   *   * @param ni - the network interface   * @param separator - byte seperator default ":"   * @param format - byte formatter default "%02X"   * @return String - the mac address as a string   * @throws SocketException - pass it on   */    public static String macToString( NetworkInterface ni, String separator, String format ) throws SocketException    {      byte mac [] = ni.getHardwareAddress();      if( mac != null ) {            StringBuffer macAddress = new StringBuffer( "" );            String sep = "";            for( byte o : mac ) {                macAddress.append( sep ).append( String.format( format, o ) );                sep = separator;            }            return macAddress.toString();      }      return null;    }    /**   * getMacAddress - return the first mac address found   *   * @return the mac address or undefined   */    public static String getMacAddress()    {      try {            Enumeration<NetworkInterface> nis = NetworkInterface.getNetworkInterfaces();            // not all interface will have a mac address for instance loopback on windows            while( nis.hasMoreElements() ) {                String mac = macToString( nis.nextElement() );                if( mac != null )                  return mac;            }      } catch( SocketException ex ) {            System.err.println( "SocketException:: " + ex.getMessage() );            ex.printStackTrace();      } catch( Exception ex ) {            System.err.println( "Exception:: " + ex.getMessage() );            ex.printStackTrace();      }      return "undefined";    }    /**   * getMacAddressesJSON - return all mac addresses found   *   * @return a JSON array of strings (as a string)   */    public static String getMacAddressesJSON()    {      try {            String macs [] = getMacAddresses();            String sep = "";            StringBuffer macArray = new StringBuffer( "['" );            for( String mac: macs ) {                macArray.append( sep ).append( mac );                sep = "','";            }            macArray.append( "']" );            return macArray.toString();      } catch( Exception ex ) {            System.err.println( "Exception:: " + ex.getMessage() );            ex.printStackTrace();      }      return "[]";    }    /**   * getMacAddresses - return all mac addresses found   *   * @return array of strings (mac addresses) empty if none found   */    public static String [] getMacAddresses()    {      try {            Enumeration<NetworkInterface> nis = NetworkInterface.getNetworkInterfaces();                        ArrayList<String> macs = new ArrayList<String>();            while( nis.hasMoreElements() ) {                String mac = macToString( nis.nextElement() );                // not all interface will have a mac address for instance loopback on windows                if( mac != null ) {                  macs.add( mac );                }            }            return macs.toArray( new String );      } catch( SocketException ex ) {            System.err.println( "SocketException:: " + ex.getMessage() );            ex.printStackTrace();      } catch( Exception ex ) {            System.err.println( "Exception:: " + ex.getMessage() );            ex.printStackTrace();      }      return new String;    }    /**   * getMacAddresses - return all mac addresses found   *   * @param sep - use a different separator   */    public static void setSep( String sep )    {      try {            MacAddressApplet.sep = sep;      } catch( Exception ex ) {            //don't care      }    }    /**   * getMacAddresses - return all mac addresses found   *   * @param format - the output format string for bytes that can be overridden default hex.   */    public static void setFormat( String format )    {      try {            MacAddressApplet.format = format;      } catch( Exception ex ) {            //don't care      }    }    public static void main( String... args )    {      System.err.println( " MacAddress = " + getMacAddress() );      setSep( "-" );      String macs [] = getMacAddresses();      for( String mac : macs )            System.err.println( " MacAddresses = " + mac );      setSep( ":" );      System.err.println( " MacAddresses JSON = " + getMacAddressesJSON() );    }}

客户端示例代码:
<!-- * * Author: Tim Desjardins * Copyright (c) 2008 Agwego Enterprises Inc. * * Feel free to use or abuse this code anyway you wish, without warranty of course.--><html><head></head><body>    <a href="" > Get "first" MAC Address</a>    <br/>    <br/>    <a href="" > Get all MAC Addresses</a>    <!--> Firefox and others will use outer object -->    <embed type="application/x-java-applet"         name="macaddressapplet"         width="0"         height="0"         code="MacAddressApplet"         archive="macaddressapplet.jar"         pluginspage="http://java.sun.com/javase/downloads/index.jsp"         style="position:absolute; top:-1000px; left:-1000px;">      <noembed>      <!--<!-->            <!---->            <object classid="clsid:CAFEEFAC-0016-0000-FFFF-ABCDEFFEDCBA"                  type="application/x-java-applet"                  name="macaddressapplet"                  style="position:absolute; top:-1000px; left:-1000px;"                  >                <param name="code" value="MacAddressApplet">                <param name="archive" value="macaddressapplet.jar" >                <param name="mayscript" value="true">                <param name="scriptable" value="true">                <param name="width" value="0">                <param name="height" value="0">            </object>      <!--> Firefox and others will use outer object -->      </noembed>    </embed>    <!--<!-->    <script type="text/javascript">      var macs = {            getMacAddress : function()            {                document.macaddressapplet.setSep( "-" );                alert( "Mac Address = " + document.macaddressapplet.getMacAddress() );            },            getMacAddressesJSON : function()            {                document.macaddressapplet.setSep( ":" );                document.macaddressapplet.setFormat( "%02x" );                var macs = eval( String( document.macaddressapplet.getMacAddressesJSON() ) );                var mac_string = "";                for( var idx = 0; idx < macs.length; idx ++ )                  mac_string += "\t" + macs[ idx ] + "\n ";                alert( "Mac Addresses = \n" + mac_string );            }      }    </script></body></html>
页: [1]
查看完整版本: Common Get Web Client Mac Address Method (通用获取Web客户端MAC地址方法)