MAC-адреса в JavaScript

Я знаю, что мы можем получить MAC-адрес пользователя через IE (объекты ActiveX).

Есть ли способ получить MAC-адрес пользователя с помощью JavaScript?


person Adhip Gupta    schedule 06.08.2008    source источник


Ответы (6)


Я согласен со всеми предыдущими ответами, что это было бы уязвимостью конфиденциальности / безопасности, если бы вы могли сделать это непосредственно из Javascript. Я могу думать о двух вещах:

  • Использование Java (с подписанным апплетом)
  • Использование подписанного Javascript, который в FF (и в Mozilla в целом) получает более высокие привилегии, чем обычный JS (но его довольно сложно настроить)
person Grey Panther    schedule 14.08.2008
comment
Мне было любопытно узнать, можем ли мы получить уникальную информацию, такую ​​как адрес Mac, серийный номер или что-то в этом роде, от пользователя через JavaScript? Или имя ПК? - person Flamur Beqiraj; 01.03.2019

Быстрый и простой ответ - нет.

Javascript - это язык довольно высокого уровня, и он не имеет доступа к такого рода информации.

person GateKiller    schedule 06.08.2008
comment
тогда как насчет всех результатов поиска Google, предоставляющих образцы кодов для получения MAC-адреса - person Moon; 26.12.2010
comment
Я быстро осмотрел Google, и все страницы, которые я прочитал, были только решением IE, которое полагалось на использование объектов ActiveX. Если бы вы могли опубликовать ссылку, показывающую иное ... - person GateKiller; 12.01.2011
comment
Я действительно не думаю, что язык высокого уровня имеет какое-либо отношение к MAC-адресам, поскольку любой язык программирования на стороне сервера позволяет вам получить доступ к таблице ARP, даже косвенно (например, через подпроцесс). Я думаю, что язык на стороне клиента работал бы лучше ... - person kirbyfan64sos; 06.10.2016
comment
Нет причин, по которым язык высокого уровня не имел бы доступа к информации об оборудовании низкого уровня. В этом случае этого не происходит, потому что это может быть проблемой безопасности. - person nsn; 07.05.2017

Нет, вы не можете получить MAC-адрес в JavaScript, в основном потому, что MAC-адрес однозначно идентифицирует работающий компьютер, поэтому это может быть уязвимостью безопасности.

Теперь, если все, что вам нужно, это уникальный идентификатор, я предлагаю вам создать его самостоятельно, используя какой-нибудь криптографический алгоритм, и сохранить его в файле cookie.

Если вам действительно нужно знать MAC-адрес компьютера, И вы разрабатываете для внутренних приложений, то я предлагаю вам использовать для этого внешний компонент: ActiveX для IE, XPCOM для Firefox (устанавливается как расширение).

person Vincent Robert    schedule 11.08.2008
comment
Вы знаете о внешнем компоненте для Safari? - person ; 07.02.2012
comment
Нет. Я действительно предлагал создать его. - person Vincent Robert; 07.02.2012
comment
как вы предлагаете создать уникальный идентификатор? как вы используете криптографический алгоритм, чтобы гарантировать, что когда-либо пользователь, запустивший его на своей машине, получит уникальный идентификатор? - person Michael; 11.12.2013
comment
@Michael Wikipedia перечисляет несколько реализаций UUID - person Vincent Robert; 11.12.2013

Неа. Причина, по которой ActiveX может это сделать, заключается в том, что ActiveX - это небольшое приложение, которое запускается на машине клиента.

Я предполагаю, что доступ к такой информации через JavaScript был бы уязвимостью безопасности.

person Seibar    schedule 06.08.2008

Если это для приложения интрасети и все клиенты используют DHCP, вы можете запросить у DHCP-сервера MAC-адрес для данного IP-адреса.

person Ryan Ahearn    schedule 06.08.2008

Я искал ту же проблему и наткнулся на следующий код.

Как получить MAC-адрес клиента (Интернет):

Чтобы получить MAC-адрес клиента, мы можем полагаться только на JavaScript и контроль Active X от Microsoft. Это работает только в IE, если Active X включен для IE. Поскольку ActiveXObject недоступен в Firefox, он не работает с Firefox и отлично работает в IE.

Этот сценарий предназначен только для 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>

person Ad Kahn    schedule 05.01.2018