MAC物理地址获取两种方式

时间:2024-03-16 18:42:26

MAC物理地址获取两种方式

 MAC物理地址具有唯一性,绑定在网卡上

最近做了有关获取客户端MAC地址的需求,一般来看是不会有这种不合理的需求,目前对于MAC地址获取浏览器默认为属于一种脚本木马,仅有IE浏览器目前支持JS获取客户端的MAC物理地址。但是仍然存在特殊的业务,比如小编现在的需求:在登陆页面获取到客户端的物理地址MAC,用来控制用户登陆权限校验(说简单了其实就是一种特殊的登陆权限)。

一.通过js获取MAC地址,IP,计算机名
需要在IE浏览器下开启安全设置中的active控件(对未标记为可安全执行脚本的Active控件)。

<!DOCTYPE HTML>
<html>
<head>
<title>js获取本机mac地址,IP地址,计算机名</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta content="MSHTML 6.00.2800.1106" name="GENERATOR">
</head>
    
<body> 
<object id=locator classid=CLSID:76A64158-CB41-11D1-8B02-00600806D9B6 VIEWASTEXT></object> 
<object id=foo classid=CLSID:75718C9A-F029-11d1-A1AC-00C04FB6C223></object> 
<script language="JScript"> 
    var service = locator.ConnectServer(); 
    var MACAddr ; 
    var IPAddr ; 
    var DomainAddr; 
    var sDNSName; 
    service.Security_.ImpersonationLevel=3; 
    service.InstancesOfAsync(foo, 'Win32_NetworkAdapterConfiguration'); 
</script> 
<script language="JScript" event="OnCompleted(hResult,pErrorObject, pAsyncContext)" for="foo"> 
    document.forms[0].txtMACAddr.value=unescape(MACAddr); 
    document.all.txtIPAddr.value=unescape(IPAddr); 
    document.forms[0].txtDNSName.value=unescape(sDNSName); 
    //document.formbar.submit(); 
</script> 
<script language="JScript" event="OnObjectReady(objObject,objAsyncContext)" for="foo"> 
if(objObject.IPEnabled != null && objObject.IPEnabled != "undefined" && objObject.IPEnabled == true) { 
    if(objObject.MACAddress != null && objObject.MACAddress != "undefined") {
        MACAddr = objObject.MACAddress; 
    }
    if(objObject.IPEnabled && objObject.IPAddress(0) != null && objObject.IPAddress(0) != "undefined") {
        IPAddr = objObject.IPAddress(0); 
    }

二.通过后台代码获取本机所有MAC地址
缺点:只能获取到本机下的MAC地址,推荐js写法,还有一种写法是通过命令方式获取(不推荐)

public class Mac {
    public static void main(String[] args) {
        try {
            Enumeration<NetworkInterface> enumeration = NetworkInterface.getNetworkInterfaces();
            while (enumeration.hasMoreElements()) {
                StringBuffer stringBuffer = new StringBuffer();
                NetworkInterface networkInterface = enumeration.nextElement();
                if (networkInterface != null) {
                    byte[] bytes = networkInterface.getHardwareAddress();
                    if (bytes != null) {
                        for (int i = 0; i < bytes.length; i++) {
                            if (i != 0) {
                                stringBuffer.append("-");
                            }
                            int tmp = bytes[i] & 0xff; // 字节转换为整数
                            String str = Integer.toHexString(tmp);
                            if (str.length() == 1) {
                                stringBuffer.append("0" + str);
                            } else {
                                stringBuffer.append(str);
                            }
                        }
                        String mac = stringBuffer.toString().toUpperCase();  
                        System.out.println(mac);
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

三.通过命令ipconfig/all查看本机MAC地址
笔记本一般有两个网卡(无线和有线)
MAC物理地址获取两种方式
四.笔记心得
MAC物理地址具有安全性和保密性,因为它的唯一性特殊需求下还是有用的,显然IP是不具备的(可以有假IP),推荐JS获取可以通过表单提交到后台。