JavaScript'teki MAC adresleri


102

IE (ActiveX nesneleri) aracılığıyla bir kullanıcının MAC adresini alabileceğimizi biliyorum.

JavaScript kullanarak bir kullanıcının MAC adresini almanın bir yolu var mı?

Yanıtlar:


57

Bunu doğrudan Javascript'ten yapabiliyorsanız, bunun bir gizlilik / güvenlik açığı olacağı konusunda önceki tüm cevaplarla aynı fikirdeyim. Aklıma gelen iki şey var:

  • Java kullanımı (imzalı bir uygulama ile)
  • FF'de (ve genel olarak Mozilla'da) normal JS'den daha yüksek ayrıcalıklara sahip olan imzalı Javascript kullanmak (ancak kurulumu oldukça karmaşıktır)

1
Merak ediyordum, mac adresi veya seri numarası gibi benzersiz bir bilgi veya JavaScript aracılığıyla kullanıcıdan böyle bir şey alabilir miyiz? Veya PC adı?
Flamur Beqiraj

55

Hızlı ve basit cevap Hayır.

Javascript oldukça yüksek seviyeli bir dildir ve bu tür bilgilere erişimi yoktur.


o zaman MAC Adresini almak için örnek kodlar sağlayan tüm google arama sonuçlarına ne olacak?
Ay

14
Google'a hızlıca bir göz attım ve okuduğum tüm sayfalar, ActiveX nesnelerini kullanmaya dayanan yalnızca IE çözümüydü.
Aksini

25
Herhangi bir sunucu taraflı programlama dili, dolaylı olarak bile (örneğin bir alt işlem aracılığıyla) ARP tablosuna erişmenize izin verdiği için, "yüksek seviyeli bir dil" olmanın MAC adresleriyle bir ilgisi olduğunu gerçekten düşünmüyorum. Bence "istemci tarafı dili" daha iyi çalışır ...
kirbyfan64sos

6
Yüksek seviyeli bir dilin düşük seviyeli donanım bilgilerine erişmemesi için hiçbir neden yoktur. Bu durumda bu bir güvenlik sorunu olacağı için olmaz.
nsn

31

Hayır, MAC adresini JavaScript'te alamazsınız, çünkü MAC adresi çalışan bilgisayarı benzersiz bir şekilde tanımladığından, bu bir güvenlik açığı olacaktır.

Şimdi ihtiyacınız olan tek şey benzersiz bir tanımlayıcıysa, bazı şifreleme algoritmalarını kullanarak kendiniz bir tane oluşturmanızı ve bir çerezde saklamanızı öneririm.

Bilgisayarın MAC adresini gerçekten bilmeniz gerekiyorsa VE dahili uygulamalar için geliştiriyorsanız, bunu yapmak için harici bir bileşen kullanmanızı öneririm: IE için ActiveX, Firefox için XPCOM (bir uzantı olarak yüklenir).


Safari için harici bir bileşen biliyor musunuz?

Hayır. Aslında bir tane yaratmayı öneriyordum.
Vincent Robert

benzersiz bir tanımlayıcı oluşturmayı nasıl öneriyorsunuz? Makinelerinde çalıştıran her kullanıcının benzersiz bir kimlik almasını garanti etmek için bir kriptografik algoritmayı nasıl kullanırsınız?
Michael

2
@Michael Wikipedia birkaç UUID uygulamasını
Vincent Robert

7

Hayır! ActiveX'in bunu yapmasının nedeni, ActiveX'in istemcinin makinesinde çalışan küçük bir uygulama olmasıdır.

JavaScript aracılığıyla bu tür bilgilere erişimin bir güvenlik açığı olacağını düşünürdüm.


4

Bu bir intranet uygulaması içinse ve tüm istemciler DHCP kullanıyorsa, belirli bir IP adresi için MAC adresi için DHCP sunucusunu sorgulayabilirsiniz.


4

Ben de aynı sorunu arıyordum ve aşağıdaki koda rastladım.

İstemci MAC adresi nasıl alınır (Web):

İstemci MAC adresini yalnızca Microsoft'un JavaScript ve Active X denetimine güvenebileceğimiz şekilde almak için IE'de Active X etkinleştirildiğinde yalnızca IE'de çalışır. ActiveXObject Firefox ile mevcut olmadığından, firefox ile çalışmıyor ve IE'de iyi çalışıyor.

Bu komut dosyası yalnızca IE içindir:

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>

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.