lunes, 23 de agosto de 2010

Como capturar Mac Address de Cliente

Bueno señores escribo del tema porque como cosa rara al principio me parecio algo sencillo pero cuando lo comence hacer no fue así.

Para capturar la Mac Address de los clientes que visitan tu aplicación lo hice con JAVA.

Hay que tomar en cuenta que la Mac no viaja por ninguno de los protocolos de la red,  como TCP/IP.  Y tampoco se encuentra en la cabecera de la información que viaja por tu pagina Web.

Entonces como capturamos la Mac Address del cliente que nos visita???

En la red hay mucha información tal es el caso de algunas paginas como esta:

http://www.kodejava.org/examples/250.html

o esta

http://www.easywayserver.com/forum/viewtopic.php?t=1241

Pero a mi ninguna me sirvio

Las opciones de esos link los probe pero solo funcionan para obtener la mac address del servidor donde se aloja el contenedor de nuestra aplicación más no la del cliente.

Tambien existe otra forma que es con ActiveX Control pero solo funciona con IE y el cliente tendria que habilitar opciones que violan niveles de seguridad  en su navegador. Y como solo funcionaba con IE y mis clientes son de 80% software libre esa opción no es un camino.

Bueno la solución la consegui.... la mac address se encuentra en la capa 2 del modelo OSI y no la podemos leer tan facilmente del cliente y mucho menos sin autorización.

Los pasos resumidamente son:
Paso 1:
El cliente debe tener instalado un plugin de Java (JRE) Este debe ser JRE 6u20 si es otra versión no se garantiza que funcione.
Y se puede verificar aquí:

http://www.java.com/es/download/installed.jsp

Y nuestra pagina debe verificar si lo tiene instalado.

Se puede hacer con el siguiente codigo Javacript:

var L = navigator.plugins.length;
var exis = 0;
for(var i=0; i<L; i++) {   
switch(navigator.plugins[i].name)
{
    case "Java(TM) Platform SE 6 U20": //Para SO basados en Windows
        exis = 1;
    break;
    case "Java(TM) Plug-in 1.6.0_20":  //Para SO basados en Debian
        exis = 1;
    break;
    case "IcedTea NPR Web Browser Plugin (using IcedTea6 1.7.3(suse-2.1.1i386))": //Para SO basados en Slackware
        exis = 1;
    break;
    case "IcedTea Java Web Browser Plugin": //Para SO basados en Red Had
        exis = 1;
    break;
}
}

Si exis es igual a 0 el cliente no tiene instalado el plugin, si es 1 el cliente lo tiene instalado.

Paso 2:

Descargue el siguiente archivo que contiene los ejemplos y el codigo fuente:

http://www.softwaresamurai.com/Agwego/mac/macaddressapplet-1.0.tar.gz 

Una vez descargados los descomprimen sea cual sea el caso en linux o windows busque como descomprimirlos.

Paso 3:
Luego adapte mi aplicación a lo que descargue.

colocando el siguiente codigo en el body

<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>
        </noembed>
    </embed>

<script type="text/javascript">
        function getMacAddressesJSON1()
            {
                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 ";
                document.getElementById("txtMACAdress").value = mac_string;               
            }
      
       </script>

Las primeras lineas son para importar las librerias necesarias para el uso de las funciones que descargamos.


Y las ultimas llama a la función getMacAddressesJSON1 me trae las mac address del cliente incluyendo mac de maquinas virtuales que pudiera tener el cliente. Guardando los datos en un input de tipo texto "tXtMACAdress"


Y guala con el dato en un input puedo utilizarlo para lo que se desee...

Cualquier pregunta escribame y con gusto los ayudaré...


Espero sus comentarios a ver si me motivo a escribir de diferentes temas tecnológicos...

4 comentarios:

P.IP dijo...

Hola soy nuevo en esto pero te aviso con lo que descargue no me funciona en win7 ni con IE ni el Firefox..como hago para que funcione...te paso mi mail...luisyooo@hotmail.com..a ya lo puse en el web server propio pero igual me tira el cartelito de su mac es.. y esta en blanco

Canito dijo...

Verifica primero con la aplicacion de prueba que bajaste en el siguiente link
http://www.softwaresamurai.com/Agwego/mac/macaddressapplet-1.0.tar.gz

he instalalo en tu IDE yo utilizo Netbeans
luego verifica que tu cliente posea
JRE 6u20 instalado en la siguiente pagina.

http://www.java.com/es/download/installed.jsp

y deberia de funcionar..

Cualquier pregunta estoy a la orden.

Unknown dijo...

Que pasaría, si quiero capturar el mac de una tablet? o peor aun de un TV smart con wifi integrado.

Unknown dijo...

Gracias por compartir tu conocimiento.

Como puedo distinguir entre una macaddress de máquinas virtuales y una mac de una física? si lo que ocupo es obtener solo la física.

Gracias y saludos.