Adresy MAC w JavaScript

102

Wiem, że możemy uzyskać adres MAC użytkownika przez IE (obiekty ActiveX).

Czy istnieje sposób na uzyskanie adresu MAC użytkownika za pomocą JavaScript?

Adhip Gupta
źródło

Odpowiedzi:

57

Zgadzam się ze wszystkimi poprzednimi odpowiedziami, że byłaby to luka w prywatności / bezpieczeństwie, gdybyś mógł to zrobić bezpośrednio z Javascript. Są dwie rzeczy, o których mogę pomyśleć:

  • Korzystanie z języka Java (z podpisanym apletem)
  • Używanie podpisanego Javascript, który w FF (i ogólnie w Mozilli) ma wyższe uprawnienia niż normalny JS (ale jest dość skomplikowany w konfiguracji)
Szara Pantera
źródło
1
Byłem ciekawy, czy możemy uzyskać unikalne informacje, takie jak adres MAC lub numer seryjny lub coś w tym rodzaju, od użytkownika za pomocą JavaScript? Albo nazwa komputera?
Flamur Beqiraj
55

Szybka i prosta odpowiedź brzmi: nie.

Javascript jest językiem wysokiego poziomu i nie ma dostępu do tego rodzaju informacji.

GateKiller
źródło
a co z wynikami wyszukiwania Google zawierającymi przykładowe kody, aby uzyskać adres MAC
Księżyc
14
Szybko rozejrzałem się po Google i wszystkie przeczytane strony były rozwiązaniem wyłącznie dla IE, które opierało się na wykorzystaniu obiektów ActiveX. Gdybyś mógł opublikować link wskazujący inaczej ...
GateKiller
25
Naprawdę nie sądzę, aby bycie „językiem wysokiego poziomu” miało cokolwiek wspólnego z adresami MAC, ponieważ każdy język programowania po stronie serwera umożliwia uzyskanie dostępu do tablicy ARP, nawet pośrednio (np. Poprzez podproces). Myślę, że „język po stronie klienta” działałby lepiej ...
kirbyfan64sos
6
Nie ma powodu, dla którego język wysokiego poziomu nie miałby dostępu do informacji o sprzęcie niskiego poziomu. W tym przypadku tak się nie dzieje, ponieważ byłby to problem z bezpieczeństwem.
nsn
31

Nie, nie możesz uzyskać adresu MAC w JavaScript, głównie dlatego, że adres MAC jednoznacznie identyfikuje uruchomiony komputer, więc byłby to luka w zabezpieczeniach.

Teraz, jeśli potrzebujesz tylko unikalnego identyfikatora, proponuję utworzyć go samodzielnie za pomocą algorytmu kryptograficznego i zapisać go w pliku cookie.

Jeśli naprawdę potrzebujesz znać adres MAC komputera ORAZ tworzysz dla aplikacji wewnętrznych, proponuję użyć do tego komponentu zewnętrznego: ActiveX dla IE, XPCOM dla Firefoksa (instalowane jako rozszerzenie).

Vincent Robert
źródło
Czy znasz zewnętrzny składnik Safari?
Nie. Właściwie to sugerowałem utworzenie takiego.
Vincent Robert
jak sugerujesz utworzenie unikalnego identyfikatora? jak używać algorytmu kryptograficznego, aby zagwarantować, że każdy użytkownik, który uruchomi go na swoim komputerze, otrzyma unikalny identyfikator?
Michael
2
@Michael Wikipedia wymienia kilka implementacji UUID
Vincent Robert,
7

Nie. Powodem, dla którego ActiveX może to zrobić, jest to, że ActiveX to mała aplikacja działająca na komputerze klienta.

Wyobrażam sobie, że dostęp do takich informacji poprzez JavaScript byłby luką w zabezpieczeniach.

Seibar
źródło
4

Jeśli jest to aplikacja intranetowa i wszyscy klienci używają DHCP, można wysłać zapytanie do serwera DHCP o adres MAC dla danego adresu IP.

Ryan Ahearn
źródło
4

Szukałem tego samego problemu i natknąłem się na następujący kod.

Jak uzyskać adres MAC klienta (sieć):

Aby uzyskać adres MAC klienta, możemy polegać na JavaScript i sterowaniu Active X firmy Microsoft. Działa to tylko w IE, jeśli Active X jest włączony dla IE. Ponieważ obiekt ActiveXObject nie jest dostępny w przeglądarce Firefox, nie działa z przeglądarką Firefox i działa dobrze w przeglądarce IE.

Ten skrypt jest przeznaczony tylko dla 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
źródło