MAC-адреси в JavaScript


102

Я знаю, що ми можемо отримати MAC-адресу користувача через IE (ActiveX-об'єкти).

Чи є спосіб отримати MAC-адресу користувача за допомогою JavaScript?

Відповіді:


57

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

  • Використання Java (із підписаним аплетом)
  • Використовуючи підписаний Javascript, який у FF (і Mozilla взагалі) отримує більш високі привілеї, ніж звичайний JS (але його досить складно налаштувати)

1
Мені було цікаво знати, чи можемо ми отримати користувачеві через JavaScript унікальну інформацію, наприклад, мак-адресу чи серійний номер чи щось подібне? Або ім'я ПК?
Фламур Бекірай

55

Швидка і проста відповідь - Ні.

Javascript є досить високим рівнем мови і не має доступу до такої інформації.


то що робити з усіма результатами пошуку Google, що надають зразкові коди, щоб отримати MAC-адресу
Місяць,

14
Я швидко оглянув Google, і всі прочитані сторінки були лише рішенням IE, яке спиралось на використання об’єктів ActiveX. Якщо ви можете опублікувати посилання, в якому відображається інше ...
GateKiller

25
Я дійсно не думаю, що "мова високого рівня" не має нічого спільного з MAC-адресами, оскільки будь-яка мова програмування на стороні сервера дозволяє отримати доступ до таблиці ARP, навіть побічно (наприклад, через підпроцес). Я думаю, що "мова на стороні клієнта" буде працювати краще ...
kirbyfan64sos

6
Немає причини, щоб мова високого рівня не мала доступу до апаратної інформації низького рівня. У цьому випадку цього не відбувається, оскільки це буде проблема безпеки.
nsn

31

Ні, ви не можете отримати MAC-адресу в JavaScript, головним чином тому, що MAC-адреса однозначно ідентифікує працюючий комп'ютер, так що це буде вразливим захистом.

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

Якщо вам дійсно потрібно знати MAC-адресу комп’ютера І ви розробляєте для внутрішніх додатків, тоді я пропоную вам скористатися зовнішнім компонентом для цього: ActiveX для IE, XPCOM для Firefox (встановлюється як розширення).


Чи знаєте ви про зовнішній компонент Safari?

Ні. Я насправді пропонував створити його.
Вінсент Роберт

як ви пропонуєте створити унікальний ідентифікатор? як ви використовуєте криптографічний алгоритм, щоб гарантувати, що будь-який користувач, який управляє ним на своїй машині, отримає унікальний ідентифікатор?
Майкл

2
У Вікіпедії @Michael перелічено декілька реалізацій UUID
Вінсент Роберт

7

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

Я думаю, що доступ до такої інформації через JavaScript був би вразливим для безпеки.


4

Якщо це для програми інтрамережі, і всі клієнти використовують DHCP, ви можете запитувати сервер DHCP щодо MAC-адреси для вказаної IP-адреси.


4

я шукав ту саму проблему і натрапив на наступний код.

Як отримати MAC-адресу клієнта (Web):

Щоб отримати клієнтську 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>

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.