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]