android 获取ip地址和mac地址的多种方式

部分来自网络:

        /**
	 * 获取移动设备本地IP
	 * @return
	 */
	protected static InetAddress getLocalInetAddress() {
		InetAddress ip = null;
		try {
			//列举
			Enumeration<NetworkInterface> en_netInterface = NetworkInterface.getNetworkInterfaces();
			while (en_netInterface.hasMoreElements()) {//是否还有元素
				NetworkInterface ni = (NetworkInterface) en_netInterface.nextElement();//得到下一个元素
				Enumeration<InetAddress> en_ip = ni.getInetAddresses();//得到一个ip地址的列举
				while (en_ip.hasMoreElements()) {
					ip = en_ip.nextElement();
					if (!ip.isLoopbackAddress() && ip.getHostAddress().indexOf(":") == -1)
						break;
					else
						ip = null;
				}

				if (ip != null) {
					break;
				}
			}
		} catch (SocketException e) {

			e.printStackTrace();
		}
		return ip;
	}


        /**
	 * 获取本地IP
	 * @return
	 */
	public static String getLocalIpAddress() {  
		try {  
			for (Enumeration<NetworkInterface> en = NetworkInterface  
					.getNetworkInterfaces(); en.hasMoreElements();) {  
				NetworkInterface intf = en.nextElement();  
				for (Enumeration<InetAddress> enumIpAddr = intf  
						.getInetAddresses(); enumIpAddr.hasMoreElements();) {  
					InetAddress inetAddress = enumIpAddr.nextElement();  
					if (!inetAddress.isLoopbackAddress()) {  
						return inetAddress.getHostAddress().toString();  
					}  
				}  
			}  
		} catch (SocketException ex) {  
			ex.printStackTrace();
		}  
		return null;  
	}
/**
	 * 根据IP地址获取MAC地址
	 * @return
	 */
	@SuppressLint({ "NewApi", "DefaultLocale" })
	public static String getMacAddress(){
		String strMacAddr = null;
		try { 
			//获得IpD地址
			InetAddress ip = getLocalInetAddress();
			byte[] b = NetworkInterface.getByInetAddress(ip).getHardwareAddress(); 
			StringBuffer buffer = new StringBuffer(); 
			for (int i = 0; i < b.length; i++) { 
				if (i != 0) { buffer.append(':'); 
				} 
				String str = Integer.toHexString(b[i] & 0xFF); 
				buffer.append(str.length() == 1 ? 0 + str : str);
			} 
			strMacAddr = buffer.toString().toUpperCase(); 
		} catch (Exception e) {

		}

		return strMacAddr; 
	}

       /**
	 * 根据IP获取本地Mac
	 * @param context
	 * @return
	 */
	public static String getLocalMacAddressFromIp(Context context) {
		String mac_s= "";
		try {
			byte[] mac;
			NetworkInterface ne=NetworkInterface.getByInetAddress(InetAddress.getByName(getLocalIpAddress()));
			mac = ne.getHardwareAddress();
			mac_s = byte2hex(mac);
		} catch (Exception e) {
			e.printStackTrace();
		}

		return mac_s;
	}

	/**
	 * 二进制转十六进制
	 * @param b
	 * @return
	 */
	public static  String byte2hex(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);
			}
		}
		return String.valueOf(hs);
	}

        /**
	 * 根据busybox获取本地Mac
	 * @return
	 */
	public static String getLocalMacAddressFromBusybox(){   
		String result = "";     
		String Mac = "";
		result = callCmd("busybox ifconfig","HWaddr");
		//如果返回的result == null,则说明网络不可取
		if(result==null){
			return "网络异常";
		}
		//对该行数据进行解析
		//例如:eth0      Link encap:Ethernet  HWaddr 00:16:E8:3E:DF:67
		if(result.length()>0 && result.contains("HWaddr")==true){
			Mac = result.substring(result.indexOf("HWaddr")+6, result.length()-1);
			result = Mac;
		}
		return result;
	}   

	private static String callCmd(String cmd,String filter) {   
		String result = "";   
		String line = "";   
		try {
			Process proc = Runtime.getRuntime().exec(cmd);
			InputStreamReader is = new InputStreamReader(proc.getInputStream());   
			BufferedReader br = new BufferedReader (is);   
			
			while ((line = br.readLine ()) != null && line.contains(filter)== false) {   
				result += line;
			}

			result = line;
		}   
		catch(Exception e) {   
			e.printStackTrace();   
		}   
		return result;   
	}


        /**
	 * 根据wifi信息获取本地mac
	 * @param context
	 * @return
	 */
	public static String getLocalMacAddressFromWifiInfo(Context context){
		WifiManager wifi = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);  
		WifiInfo winfo = wifi.getConnectionInfo();  
                String mac =  winfo.getMacAddress();
		return mac;
	}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值