Địa chỉ MAC trong JavaScript


102

Tôi biết rằng chúng ta có thể lấy địa chỉ MAC của người dùng thông qua IE (các đối tượng ActiveX).

Có cách nào để lấy địa chỉ MAC của người dùng bằng JavaScript không?

Câu trả lời:


57

Tôi đồng ý với tất cả các câu trả lời trước rằng đó sẽ là một lỗ hổng bảo mật / riêng tư nếu bạn có thể thực hiện điều này trực tiếp từ Javascript. Có hai điều tôi có thể nghĩ đến:

  • Sử dụng Java (với một applet đã ký)
  • Sử dụng Javascript đã ký, trong FF (và Mozilla nói chung) nhận được đặc quyền cao hơn JS bình thường (nhưng nó khá phức tạp để thiết lập)

1
Tôi rất muốn biết, liệu chúng ta có thể nhận được một thông tin duy nhất như địa chỉ mac hoặc số sê-ri hoặc một cái gì đó tương tự từ người dùng thông qua JavaScript không? Hoặc tên PC?
Flamur Beqiraj

55

Câu trả lời nhanh chóng và đơn giản là Không.

Javascript là một ngôn ngữ cấp cao và không có quyền truy cập vào loại thông tin này.


thì sao về tất cả kết quả tìm kiếm của google cung cấp mã mẫu để lấy Địa chỉ MAC
Moon

14
Tôi đã xem qua Google và tất cả các trang tôi đã đọc đều là giải pháp duy nhất của IE dựa vào việc sử dụng các đối tượng ActiveX. Nếu bạn có thể đăng một liên kết hiển thị theo cách khác ...
GateKiller

25
Tôi thực sự không nghĩ rằng việc trở thành một "ngôn ngữ cấp cao" có liên quan gì đến địa chỉ MAC, vì bất kỳ ngôn ngữ lập trình phía máy chủ nào cũng cho phép bạn truy cập vào bảng ARP, thậm chí là gián tiếp (ví dụ: thông qua một quy trình con). Tôi nghĩ rằng "ngôn ngữ client-side" sẽ làm việc tốt hơn ...
kirbyfan64sos

6
Không có lý do gì tại sao một ngôn ngữ cấp cao lại không có quyền truy cập vào thông tin phần cứng cấp thấp. Trong trường hợp này, điều này không xảy ra vì nó sẽ là một vấn đề bảo mật.
nsn

31

Không, bạn không thể lấy địa chỉ MAC trong JavaScript, chủ yếu là do địa chỉ MAC nhận dạng duy nhất máy tính đang chạy nên nó sẽ là một lỗ hổng bảo mật.

Bây giờ nếu tất cả những gì bạn cần là một số nhận dạng duy nhất, tôi khuyên bạn nên tự tạo một số nhận dạng bằng cách sử dụng một số thuật toán mật mã và lưu trữ nó trong cookie.

Nếu bạn thực sự cần biết địa chỉ MAC của máy tính VÀ bạn đang phát triển các ứng dụng nội bộ, thì tôi khuyên bạn nên sử dụng một thành phần bên ngoài để làm điều đó: ActiveX cho IE, XPCOM cho Firefox (được cài đặt dưới dạng tiện ích mở rộng).


Bạn có biết về một thành phần bên ngoài cho Safari không?

Không. Tôi thực sự đề nghị tạo một cái.
Vincent Robert

bạn đề xuất tạo mã nhận dạng duy nhất như thế nào? làm thế nào để bạn sử dụng một thuật toán mật mã để đảm bảo rằng người dùng chạy nó trên máy của họ sẽ nhận được một id duy nhất?
Michael

2
@ Michael Wikipedia liệt kê một số triển khai UUID
Vincent Robert

7

Không. Sở dĩ ActiveX có thể làm được điều đó là vì ActiveX là một ứng dụng nhỏ chạy trên máy của khách hàng.

Tôi sẽ tưởng tượng việc truy cập thông tin như vậy thông qua JavaScript sẽ là một lỗ hổng bảo mật.


4

Nếu điều này dành cho một ứng dụng mạng nội bộ và tất cả các máy khách sử dụng DHCP, bạn có thể truy vấn máy chủ DHCP về địa chỉ MAC cho một địa chỉ IP nhất định.


4

tôi đang tìm kiếm vấn đề tương tự và tình cờ gặp mã sau.

Cách lấy địa chỉ MAC của máy khách (Web):

Để có được địa chỉ MAC của máy khách, chúng ta chỉ có thể dựa vào JavaScript và điều khiển Active X của Microsoft. Nó chỉ hoạt động trong IE nếu Active X kích hoạt cho IE. Vì ActiveXObject không khả dụng với Firefox, nó không hoạt động với firefox và hoạt động tốt trên IE.

Tập lệnh này chỉ dành cho 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>

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.