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?

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)

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.


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).


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.


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.


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>

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.