一、浏览器获取MAC地址概述
MAC地址,全称为媒体访问控制地址,是一个唯一的硬件地址,用于标识网络适配器。浏览器获取MAC地址通常用于局域网设备的管理和限制,如局域网访问控制,网络审计等领域。然而,由于安全性和隐私问题的考虑,浏览器已经放弃了直接获取MAC地址的能力,所以要获取MAC地址需要利用非标准方法和技术手段。
二、浏览器获取MAC地址方法探究
1. 浏览器获取电脑MAC地址
浏览器获取电脑MAC地址的方法主要是利用客户端的脚本技术和一些网络API,常用的方法有下面两种:
i. 利用ActiveXObject对象获取WMI信息
```
try{
var locator = new ActiveXObject("WbemScripting.SWbemLocator");
var service = locator.ConnectServer(".");
var properties = service.ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True");
var e = new Enumerator (properties);/*用于枚举对象集合*/
for (;!e.atEnd();e.moveNext()){
var p = e.item();
var mac = p.MACAddress;//获取MAC地址
console.log(mac);
return mac;
}
}catch(e){
console.log(e);
}
该方法利用ActiveXObject对象获取WMI(Windows Management Instrumentation)信息,然后通过WMI查询获取当前设备的MAC地址。但是该方法只能用于IE浏览器。
ii. 利用XMLHttpRequest对象获取arp信息
```
function getMAC(){
var xhr = new XMLHttpRequest();
xhr.open("GET", "http://localhost/test.html", true);
xhr.onreadystatechange = function(){
if (xhr.readyState == 4 && xhr.status == 200){
var strs = xhr.responseText.split("\n");
for (var i = 0; i < strs.length; i++){
var str = strs[i].trim();
if (str.startsWith("Physical Address")){
var mac = str.split(":")[1].trim();
console.log(mac);
return mac;
}
}
}
}
xhr.send();
}
该方法利用XMLHttpRequest对象发起请求,获取arp表信息,然后从arp表信息中找到当前设备的MAC地址。该方法在谷歌浏览器和火狐浏览器中均可使用。
2. 手机浏览器获取MAC地址
在手机浏览器中获取MAC地址比较麻烦,因为手机浏览器通常不支持直接获取MAC地址。
i. 利用WebRTC API获取网卡信息
```
//检测浏览器是否支持WebRTC
window.RTCPeerConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection;
var pc = new RTCPeerConnection({iceServers:[]}), noop = function(){};
pc.createDataChannel("");
pc.createOffer(pc.setLocalDescription.bind(pc), noop);
pc.onicecandidate = function(ice){
if(!ice || !ice.candidate || !ice.candidate.candidate) return;
var res = ice.candidate.candidate.split(" ")[4];
console.log(res);
return res;
};
该方法利用WebRTC API获取当前设备的网卡信息,然后从网卡信息中找到当前设备的MAC地址。该方法在安卓手机的Chrome浏览器中支持,对于iOS Safari浏览器不支持。
ii. 利用自定义App获取
在移动APP中可以通过一些底层API获取设备的MAC地址,然后在webview中调用该API,将获取到的MAC地址传递给页面使用。不过,这需要我们在app中额外开发,并在应用市场发布才能使用。
3. 其他浏览器获取MAC地址方法
i. 利用JAVA APPlet技术
利用JAVA的Applet技术,通过调用客户端的System.getProperties方法,获取当前设备的MAC地址。该方法需用户在浏览器上安装Java插件,并且用户在第一次装Java插件是必须手动授权,然后才能获取MAC地址信息。
ii. 利用Flash技术
利用Flash技术,通过调用AS3中的NativeProcess类,执行系统命令获取当前设备的MAC地址。该方法需要用户在安装Flash插件,而且安全性和可靠性都存在较大的问题,一些浏览器为了安全性也禁用Flash插件的使用。
三、浏览器无法获取MAC地址的原因
浏览器无法直接获取MAC地址是因为网络安全与隐私保护方面的考虑。MAC地址可以唯一标识一台设备,如果MAC地址被泄露,恶意攻击者可以获得一些敏感信息,甚至可以在局域网内进行ARP欺骗攻击。因此,浏览器一般禁止直接获取MAC地址。
在安全性和隐私性方面的考虑,浏览器禁止直接获取MAC地址,只能通过非标准的方法或者技术手段来获取MAC地址,这些方法均存在一定的局限性,而且客户端场景下的获取才是可行的。
四、获取web服务器MAC地址
获取Web服务器的MAC地址主要有两种方法:
i. 通过发起ARP请求获取
通过发起ARP请求对服务器进行探测,获取其MAC地址。该方法需要谷歌应用商店下载ARP Scanner插件,并且网管的MAC地址需要放置在服务器不可见的网络中。
ii. 利用NMAP软件获取
利用NMAP软件对服务器进行探测,获取其MAC地址。该方法需要安装NMAP软件,并且需要对服务器进行扫描,需要与服务器所在的网络处在同一网段上。
五、关于浏览器获取MAC地址的安全问题
浏览器获取MAC地址涉及到用户隐私与网络安全两个方面,因此必须慎重处理。应该避免使用未知来源的插件,同时使用HTTPS和SSL等安全加密技术来保证数据的安全性。而对于企业用户,可以使用分配账户的方式,对用户的访问进行审计和控制,以保证网络的安全性和管理性。