綁定帳號登入

Android 台灣中文網

打印 上一主題 下一主題

[教程] Android 學習:獲取 Ethernet、WIFI 的 ip 和 mac 地址

[複製連結] 查看: 24416|回覆: 0|好評: 0
跳轉到指定樓層
樓主
jianrupan | 收聽TA | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
發表於 2022-1-14 16:42

馬上加入Android 台灣中文網,立即免費下載應用遊戲。

您需要 登錄 才可以下載或查看,沒有帳號?註冊

x
/**
    * 獲取本地 ip
    *@return
    */
    public String getLocalIpAddress(){
        try{
            String ipv4=null;
            // 取得機器所有網路介面
            List<NetworkInterface> nilist= Collections.list(NetworkInterface.getNetworkInterfaces());
            for(NetworkInterface ni:nilist){
                // 取得網卡所有的 IP 地址
                List<InetAddress>ialist=Collections.list(ni.getInetAddresses());
                for(InetAddress address:ialist){
                    // 只取 IPv4 地址
                    ipv4=address.getHostAddress();
                                        if(!address.isLoopbackAddress() && address instanceof Inet4Address){
                        return ipv4;
                    }
                }
            }
        }catch(SocketException ex){
            Log.e(TAG, ex.toString());
        }
                return"0.0.0.0";
    }
    /**
    *通過本地 ip 獲取 mac 地址
*通過 ip 獲取的 mac 地址, 所以當是 wifi 連線時的 ip 獲取到的則是 WIFI 的 mac,如果是*Ethernet 連線時則獲取的是 Ethernet 的 mac 地址
    *@return
    */
    public String getLocalMacAddressFromIp(){
        String mac_s="";
        try{
            byte[]mac;
            // 獲取本地 IP
            String ip=getLocalIpAddress();
            // 取得網卡
            InetAddress ipAddress=InetAddress.getByName(ip);
            if(ipAddress==null){
                return mac_s;
            }
            // 只取 IPv4 地址
            if(!(ipAddress instanceof Inet4Address)){
                 return mac_s;
            }
            // 取 MAC
            NetworkInterface ne=NetworkInterface.getByInetAddress(ipAddress);
            mac=ne.getHardwareAddress();
                if(mac.length>0){
                    mac_s=byte2mac(mac);
                }
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            return mac_s;
        }
    }
    // 轉為 MAC 文字
    private String byte2mac(byte[]b){
        StringBuffer hs=new StringBuffer(b.length);
        String stmp="";
        int len=b.length;
        for(int n=0;n<len;n++){
            stmp=Integer.toHexString(b[n]&0xFF);
            if(stmp.length()==1){
                hs=hs.append("0").append(stmp);
            }else{
                hs=hs.append(stmp);
            }
        }
        StringBuffer str=new StringBuffer(hs);
        for(int i=0;i<str.length();i++){
            if(i%3==0){
                str.insert(i,":");
            }
        }
        return str.toString().substring(1);
    }
    /**
    *獲取 Ethernet 的 MAC 地址
    *@return
    */
        private String getWireMac(){
                String strMacAddress = null;
                try {
                        // 取得網卡 MAC
            byte[] b = NetworkInterface.getByName("eth0")
                                        .getHardwareAddress();
                        strMacAddress = byte2mac(b);
                } catch (Exception e) {
                        e.printStackTrace();
                }
                return strMacAddress;
        }
    /**
    *獲取 wifi mac
    *@return
    */
    private String getWifiMac(){
        WifiManager wifi=(WifiManager)getSystemService(Context.WIFI_SERVICE);
        WifiInfo info=wifi.getConnectionInfo();
        return info.getMacAddress()==null?"":info.getMacAddress();
    }

「用Android 就來APK.TW」,快來加入粉絲吧!
Android 台灣中文網(APK.TW)

評分

參與人數 1碎鑽 +1 幫助 +1 收起 理由
傻庭兒 + 1 + 1 非常讃

查看全部評分

收藏收藏 分享分享 分享專題
用Android 就來Android 台灣中文網(https://apk.tw)
回覆

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 註冊

本版積分規則