Direcciones MAC en JavaScript

102

Sé que podemos obtener la dirección MAC de un usuario a través de IE (objetos ActiveX).

¿Existe alguna forma de obtener la dirección MAC de un usuario mediante JavaScript?

Adhip Gupta
fuente

Respuestas:

57

Estoy de acuerdo con todas las respuestas anteriores en que sería una vulnerabilidad de privacidad / seguridad si pudiera hacer esto directamente desde Javascript. Hay dos cosas en las que puedo pensar:

  • Usando Java (con un subprograma firmado)
  • Usando Javascript firmado, que en FF (y Mozilla en general) obtiene mayores privilegios que JS normal (pero es bastante complicado de configurar)
Pantera gris
fuente
1
Tuve la bondad de saberlo, ¿podemos obtener una información única como la dirección mac o el número de serie o algo así del usuario a través de JavaScript? ¿O el nombre de la PC?
Flamur Beqiraj
55

La respuesta rápida y sencilla es No.

Javascript es un lenguaje de bastante alto nivel y no tiene acceso a este tipo de información.

GateKiller
fuente
Entonces, ¿qué pasa con todos los resultados de búsqueda de Google que proporcionan códigos de muestra para obtener la dirección MAC
Luna
14
Eché un vistazo rápido a Google y todas las páginas que leí eran la única solución de IE que se basaba en el uso de objetos ActiveX. Si pudiera publicar un enlace que muestre lo contrario ...
GateKiller
25
Realmente no creo que ser un "lenguaje de alto nivel" tenga nada que ver con las direcciones MAC, ya que cualquier lenguaje de programación del lado del servidor te permite acceder a la tabla ARP, incluso indirectamente (por ejemplo, a través de un subproceso). Creo que el "lenguaje del lado del cliente" funcionaría mejor ...
kirbyfan64sos
6
No hay ninguna razón por la que un lenguaje de alto nivel no tenga acceso a información de hardware de bajo nivel. En este caso, esto no sucede porque sería un problema de seguridad.
nsn
31

No, no puede obtener la dirección MAC en JavaScript, principalmente porque la dirección MAC identifica de forma única la computadora en ejecución, por lo que sería una vulnerabilidad de seguridad.

Ahora, si todo lo que necesita es un identificador único, le sugiero que cree uno usted mismo usando algún algoritmo criptográfico y lo almacene en una cookie.

Si realmente necesita saber la dirección MAC de la computadora Y está desarrollando para aplicaciones internas, le sugiero que use un componente externo para hacerlo: ActiveX para IE, XPCOM para Firefox (instalado como una extensión).

Vincent Robert
fuente
¿Conoce algún componente externo para Safari?
No. De hecho, estaba sugiriendo crear uno.
Vincent Robert
¿Cómo sugiere crear un identificador único? ¿Cómo se usa un algoritmo criptográfico para garantizar que cualquier usuario que lo ejecute en su máquina obtenga una identificación única?
Michael
2
@Michael Wikipedia enumera varias implementaciones de UUID
Vincent Robert
7

No La razón por la que ActiveX puede hacerlo es porque ActiveX es una pequeña aplicación que se ejecuta en la máquina del cliente.

Me imagino que el acceso a dicha información a través de JavaScript sería una vulnerabilidad de seguridad.

Seibar
fuente
4

Si se trata de una aplicación de intranet y todos los clientes utilizan DHCP, puede consultar al servidor DHCP la dirección MAC para una dirección IP determinada.

Ryan Ahearn
fuente
4

Estaba buscando el mismo problema y me encontré con el siguiente código.

Cómo obtener la dirección MAC del cliente (Web):

Para obtener la dirección MAC del cliente, solo podemos confiar en JavaScript y el control Active X de Microsoft. Solo funciona en IE si Active X está habilitado para IE. Como ActiveXObject no está disponible con Firefox, no funciona con Firefox y funciona bien en IE.

Este script es solo para IE:

function showMacAddress() {
    var obj = new ActiveXObject("WbemScripting.SWbemLocator");
    var s = obj.ConnectServer(".");
    var properties = s.ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration");
    var e = new Enumerator(properties);
    var output;
    output = '<table border="0" cellPadding="5px" cellSpacing="1px" bgColor="#CCCCCC">';
    output = output + '<tr bgColor="#EAEAEA"><td>Caption</td><td>MACAddress</td></tr>';
    while (!e.atEnd()) {
        e.moveNext();
        var p = e.item();
        if (!p) continue;
        output = output + '<tr bgColor="#FFFFFF">';
        output = output + '<td>' + p.Caption; +'</td>';
        output = output + '<td>' + p.MACAddress + '</td>';
        output = output + '</tr>';
    }
    output = output + '</table>';
    document.getElementById("box").innerHTML = output;
}

showMacAddress();
<div id='box'></div>

Ad Kahn
fuente