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

来源:互联网 发布:福建三千万美元知乎 编辑:程序博客网 时间:2024/04/27 12:17
部分来自网络:        /** * 获取移动设备本地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;elseip = 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:67if(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