前段时间在开发中使用到用mac地址进行设备惟一验证登陆,后改用成指纹验证(fingerprintjs2),在此总结记录下,但愿获得补充与指正。git
// 建立ActiveX对象
var locator = new ActiveXObject("WbemScripting.SWbemLocator");
var service = locator.ConnectServer(".");
var properties = service.ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration");
var e = new Enumerator(properties);
let MacAddressIp = [];
// 获取mac地址 可能会出现有多个的状况
for (; !e.atEnd(); e.moveNext()) {
var p = e.item();
if (p.MACAddress !== null) {
MacAddressIp.push(p.MACAddress)
}
}
复制代码
function getSysInfo(){
var locator = new ActiveXObject ("WbemScripting.SWbemLocator");
var service = locator.ConnectServer(".");
//CPU信息
var cpu = new Enumerator (service.ExecQuery("SELECT * FROM Win32_Processor")).item();
var cpuType=cpu.Name,hostName=cpu.SystemName;
//内存信息
var memory = new Enumerator (service.ExecQuery("SELECT * FROM Win32_PhysicalMemory"));
for (var mem=[],i=0; !memory.atEnd(); memory.moveNext()) mem[i++]={cap:memory.item().Capacity/1024/1024,speed:memory.item().Speed}
//系统信息
var system=new Enumerator (service.ExecQuery("SELECT * FROM Win32_ComputerSystem")).item();
var physicMenCap=Math.ceil(system.TotalPhysicalMemory/1024/1024),curUser=system.UserName,cpuCount=system.NumberOfProcessors
return {cpuType:cpuType,cpuCount:cpuCount,hostName:hostName,curUser:curUser,memCap:physicMenCap,mem:mem}
}
复制代码
也就是根据浏览器,系统当前配置,等等给浏览器生成一个惟一的32位码,来进行验证;github
使用CDN在线获取:npm
<script src="https://cdnjs.com/libraries/fingerprintjs2"></script>
复制代码
使用bowerinstall命令进行安装:浏览器
bower install fingerprintjs2
复制代码
使用npminstall命令进行安装:安全
npm install fingerprintjs2 --save--dev
复制代码
import Fingerprint2 from 'fingerprintjs2'
// 使用浏览器指纹
var MacAddress;
new Fingerprint2({
// 配置项(可选)
excludeSessionStorage: true, // 排除会话存储用户的浏览器支持
excludeOpenDatabase: true, // 排除式用户浏览器的支持
excludeIndexedDB: true, // 排除IndexedDB用户浏览器的支持
excludeLanguage: true, // 排除浏览器的语言
userAgent: true, // 用户代理,包含浏览器版本号
}).get(function(result, components){
MacAddress = result;
});
复制代码
配置项完整列表bash
写的比较凌乱,有更好的方法,欢迎补充啦;网络