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物理地址具有安全性和保密性,因为它的唯一性特殊需求下还是有用的,显然IP是不具备的(可以有假IP),推荐JS获取可以通过表单提交到后台。