最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java如何獲取客戶端mac地址

 更新時間:2024年09月27日 10:15:11   作者:岸遠水聲微  
在用戶登錄時,通過獲取IP地址來識別計算機的MAC地址,然后將用戶賬號與該MAC地址進行綁定,確保每個賬號只能在一臺特定的計算機上登錄,增強系統(tǒng)安全性,這種方法適用于需要嚴格賬戶安全管理的場景

Java獲取客戶端mac地址

問題

項目中需要實現(xiàn)一個功能,在用戶登錄的時候,要求系統(tǒng)賬號和計算機綁定,只有綁定的賬號才可以登錄,并且每個賬號只能綁定一臺計算機。

解決方案

通過請求IP獲取mac地址,然后將賬號與mac地址進行綁定。

代碼實現(xiàn)如下:

String getMacInfo(HttpServletRequest request)
    {
        //獲取ip地址
        String macInfo = null;
        try
        {
            String ip = request.getRemoteAddr();
            //linux下獲取mac地址
            macAddr = CommonUtils.getMac(ip);
            //windows下獲取mac地址
            if(StringUtils.isBlank(macAddr)){
                macAddr = CommonUtils.getMacInWindows(ip).trim();
            }
        }
        catch (Exception e)
        {
            log.error("獲取mac地址失敗");
            return null;
        }
        return macInfo;
    }

CommonUtils.java

	// 從類unix機器上獲取mac地址
	 public static String getMac(String ip) throws IOException {
        String mac = SysCode.BDFH.EMPTY;
        if (ip != null) {
            try {
                Process process = Runtime.getRuntime().exec("arp "+ip);
                InputStreamReader ir = new InputStreamReader(process.getInputStream());
                LineNumberReader input = new LineNumberReader(ir);
                String line;
                StringBuffer s = new StringBuffer();
                while ((line = input.readLine()) != null) {
                    s.append(line);
                }
                mac = s.toString();
                if (StringUtils.isNotBlank(mac)) {
                    mac = mac.substring(mac.indexOf(":") - 2, mac.lastIndexOf(":") + 3);
                }
                return mac;
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return mac;
    }
    
    // 從windows機器上獲取mac地址
	public static String getMacInWindows(final String ip) {
        String result = "";
        String[] cmd = {"cmd", "/c", "ping " + ip};
        String[] another = {"cmd", "/c", "ipconfig -all"};
        // 獲取執(zhí)行命令后的result
        String cmdResult = callCmd(cmd, another);
        // 從上一步的結(jié)果中獲取mac地址
        result = filterMacAddress(ip, cmdResult, "-");
        return result;
 	}
 	
 	// 命令執(zhí)行
 	public static String callCmd(String[] cmd, String[] another) {
        String result = "";
        String line = "";
        try {
            Runtime rt = Runtime.getRuntime();
            // 執(zhí)行第一個命令
            Process proc = rt.exec(cmd);
            proc.waitFor();
             // 執(zhí)行第二個命令
            proc = rt.exec(another);
            InputStreamReader is = new InputStreamReader(proc.getInputStream());
            BufferedReader br = new BufferedReader(is);
            while ((line = br.readLine()) != null) {
                result += line;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }
	
	// 獲取mac地址
	public static String filterMacAddress(final String ip, final String sourceString, final String macSeparator) {
        String result = "";
        String regExp = "((([0-9,A-F,a-f]{1,2}" + macSeparator + "){1,5})[0-9,A-F,a-f]{1,2})";
        Pattern pattern = Pattern.compile(regExp);
        Matcher matcher = pattern.matcher(sourceString);
        while (matcher.find()) {
            result = matcher.group(1);
            // 因計算機多網(wǎng)卡問題,截取緊靠IP后的第一個mac地址
            int num = sourceString.indexOf(ip) - sourceString.indexOf(": "+result + " ");
            if (num>0&&num<300) {
                break;
            }
        }
        return result;
    }

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • SpringBoot項目使用協(xié)同過濾的實現(xiàn)

    SpringBoot項目使用協(xié)同過濾的實現(xiàn)

    協(xié)同過濾是一種常用的推薦系統(tǒng)算法,用于預(yù)測用戶可能喜歡的物品,本文主要介紹了SpringBoot項目使用協(xié)同過濾的實現(xiàn),感興趣的可以了解一下
    2023-09-09
  • Spring boot 數(shù)據(jù)源未配置異常的解決

    Spring boot 數(shù)據(jù)源未配置異常的解決

    這篇文章主要介紹了Spring boot 數(shù)據(jù)源未配置異常的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • 使用Spring自定義命名空間

    使用Spring自定義命名空間

    這篇文章主要介紹了使用Spring自定義命名空間方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Java如何把數(shù)組轉(zhuǎn)換為ArrayList

    Java如何把數(shù)組轉(zhuǎn)換為ArrayList

    這篇文章主要介紹了Java如何把數(shù)組轉(zhuǎn)換為ArrayList,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友可以參考下
    2020-01-01
  • java?Spring的啟動原理詳解

    java?Spring的啟動原理詳解

    大家好,本篇文章主要講的是java?Spring的啟動原理詳解,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-01-01
  • Windows環(huán)境下重啟jar服務(wù)bat代碼的解決方案

    Windows環(huán)境下重啟jar服務(wù)bat代碼的解決方案

    在Windows環(huán)境下部署java的jar包,若有多個服務(wù)同時啟動,很難找到相應(yīng)服務(wù)重啟,每次都重啟全部服務(wù)很麻煩,應(yīng)用場景大多用于部署測試,今天給大家分享Windows環(huán)境下重啟jar服務(wù)bat代碼,感興趣的朋友一起看看吧
    2023-08-08
  • 理解java多線程中ExecutorService使用

    理解java多線程中ExecutorService使用

    這篇文章主要幫助大家理解java多線程中ExcetorServiced的使用方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • Spring Boot 集成Shiro的多realm配置過程

    Spring Boot 集成Shiro的多realm配置過程

    這篇文章主要介紹了Spring Boot 集成Shiro的多realm配置,本文給大家介紹的非常詳細,對大家的學(xué)習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-10-10
  • Spring Security添加驗證碼的兩種方式小結(jié)

    Spring Security添加驗證碼的兩種方式小結(jié)

    使用spring security的時候,框架會幫我們做賬戶密碼的驗證,但是如我們需要添加一個驗證碼,就需要對配置文件進行修改,這篇文章主要給大家介紹了關(guān)于Spring Security添加驗證碼的兩種方式,需要的朋友可以參考下
    2021-10-10
  • 詳解java操作Redis數(shù)據(jù)庫的redis工具(RedisUtil,jedis工具JedisUtil,JedisPoolUtil)

    詳解java操作Redis數(shù)據(jù)庫的redis工具(RedisUtil,jedis工具JedisUtil,JedisPoo

    這篇文章主要介紹了java操作Redis數(shù)據(jù)庫的redis工具,包括RedisUtil,jedis工具JedisUtil,JedisPoolUtil工具,本文通過實例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2021-08-08

最新評論

济南市| 建湖县| 鄢陵县| 通山县| 顺平县| 潢川县| 礼泉县| 尉犁县| 尖扎县| 绥江县| 西青区| 扎鲁特旗| 平罗县| 新沂市| 临颍县| 连江县| 北票市| 夏河县| 翁源县| 安龙县| 连城县| 台东市| 灵丘县| 陵川县| 西畴县| 海盐县| 如皋市| 治多县| 安徽省| 通海县| 汶川县| 远安县| 余江县| 于田县| 凤台县| 双流县| 游戏| 丹凤县| 兖州市| 桦甸市| 当阳市|