前段時間在開發中使用到用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
寫的比較凌亂,有更好的方法,歡迎補充啦;網絡