Endereços MAC em JavaScript

102

Eu sei que podemos obter o endereço MAC de um usuário via IE (objetos ActiveX).

Existe uma maneira de obter o endereço MAC de um usuário usando JavaScript?

Adhip Gupta
fonte

Respostas:

57

Concordo com todas as respostas anteriores que seria uma vulnerabilidade de privacidade / segurança se você pudesse fazer isso diretamente do Javascript. Posso pensar em duas coisas:

  • Usando Java (com um miniaplicativo assinado)
  • Usando Javascript assinado, que no FF (e no Mozilla em geral) obtém privilégios mais altos do que o JS normal (mas é bastante complicado de configurar)
Pantera Cinzenta
fonte
1
Tive a gentileza de saber, podemos obter informações exclusivas, como endereço mac ou número de série ou algo assim, do usuário via JavaScript? Ou o nome do PC?
Flamur Beqiraj
55

A resposta rápida e simples é não.

Javascript é uma linguagem de alto nível e não tem acesso a este tipo de informação.

GateKiller
fonte
e todos os resultados de pesquisa do Google que fornecem códigos de amostra para obter o endereço MAC
Lua
14
Dei uma olhada rápida no Google e todas as páginas que li eram apenas soluções do IE, que dependiam do uso de objetos ActiveX. Se você pudesse postar um link mostrando o contrário ...
GateKiller
25
Eu realmente não acho que ser uma "linguagem de alto nível" tenha algo a ver com endereços MAC, uma vez que qualquer linguagem de programação do lado do servidor permite que você acesse a tabela ARP, mesmo indiretamente (por exemplo, através de um subprocesso). Acho que "linguagem do lado do cliente" funcionaria melhor ...
kirbyfan64sos
6
Não há razão para que uma linguagem de alto nível não tenha acesso às informações de hardware de baixo nível. Neste caso, isso não acontece porque seria um problema de segurança.
nsn
31

Não, você não pode obter o endereço MAC em JavaScript, principalmente porque o endereço MAC identifica exclusivamente o computador em execução, portanto, seria uma vulnerabilidade de segurança.

Agora, se você só precisa de um identificador exclusivo, sugiro que você mesmo crie um usando algum algoritmo criptográfico e armazene-o em um cookie.

Se você realmente precisa saber o endereço MAC do computador E está desenvolvendo para aplicativos internos, sugiro que use um componente externo para fazer isso: ActiveX para IE, XPCOM para Firefox (instalado como uma extensão).

Vincent Robert
fonte
Você conhece um componente externo para o Safari?
Não. Na verdade, eu estava sugerindo criar um.
Vincent Robert
como você sugere a criação de um identificador exclusivo? como você usa um algoritmo criptográfico para garantir que cada usuário que o executa em sua máquina obtenha uma identificação exclusiva?
Michael
2
@Michael Wikipedia lista várias implementações UUID
Vincent Robert
7

Não. A razão pela qual o ActiveX pode fazer isso é porque o ActiveX é um pequeno aplicativo que roda na máquina do cliente.

Eu imagino que o acesso a essas informações via JavaScript seja uma vulnerabilidade de segurança.

Seibar
fonte
4

Se for para um aplicativo de intranet e todos os clientes usarem DHCP, você poderá consultar o servidor DHCP para obter o endereço MAC de um determinado endereço IP.

Ryan Ahearn
fonte
4

Eu estava procurando o mesmo problema e me deparei com o código a seguir.

Como obter o endereço MAC do cliente (Web):

Para obter o endereço MAC do cliente, podemos contar com o controle JavaScript e Active X da Microsoft. Só funciona no IE se o Active X estiver habilitado para o IE. Como o ActiveXObject não está disponível com o Firefox, não está funcionando com o firefox e está funcionando bem no IE.

Este script é apenas 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
fonte