package com.hdl.sdk.common.utils; import android.content.Context; import android.net.wifi.WifiInfo; import android.net.wifi.WifiManager; import android.text.TextUtils; import android.util.Log; import com.hdl.sdk.connect.config.HDLLinkConfig; import java.net.InetAddress; import java.net.InterfaceAddress; import java.net.NetworkInterface; import java.net.SocketException; import java.util.Enumeration; /** * Created by Tong on 2021/9/27. */ public class IpUtils { // /** // * @return 广播地址 // */ /*public static String getBroadcastAddress() { // try { // for (Enumeration niEnum = NetworkInterface.getNetworkInterfaces(); // niEnum.hasMoreElements(); ) { // NetworkInterface ni = niEnum.nextElement(); // if (!ni.isLoopback()) { // for (InterfaceAddress interfaceAddress : ni.getInterfaceAddresses()) { // if (interfaceAddress.getBroadcast() != null) { // return interfaceAddress.getBroadcast().toString().substring(1); // } // } // } // } // } catch (SocketException e) { // e.printStackTrace(); // } return "255.255.255.255"; }*/ /** * @return 广播地址 */ public static synchronized String getBroadcastAddress() { try { if (!TextUtils.isEmpty(HDLLinkConfig.getInstance().getNetworkName())) { for (Enumeration niEnum = NetworkInterface.getNetworkInterfaces(); niEnum.hasMoreElements(); ) { NetworkInterface ni = niEnum.nextElement(); if (!ni.isLoopback() && ni.getName().equalsIgnoreCase(HDLLinkConfig.getInstance().getNetworkName())) { for (InterfaceAddress interfaceAddress : ni.getInterfaceAddresses()) { if (interfaceAddress.getBroadcast() != null) { Log.d("TAG", "----->ni.getName()= " + ni.getName() + " ip= " + interfaceAddress.getBroadcast().toString().substring(1)); return interfaceAddress.getBroadcast().toString().substring(1); } } } } for (Enumeration niEnum = NetworkInterface.getNetworkInterfaces(); niEnum.hasMoreElements(); ) { NetworkInterface ni = niEnum.nextElement(); if (!ni.isLoopback()) { for (InterfaceAddress interfaceAddress : ni.getInterfaceAddresses()) { if (interfaceAddress.getBroadcast() != null) { Log.d("TAG", "----->ip= " + interfaceAddress.getBroadcast().toString().substring(1)); return interfaceAddress.getBroadcast().toString().substring(1); } } } } } } catch (SocketException e) { e.printStackTrace(); } return "255.255.255.255"; } public static boolean isLocalIpAddress(String ipAddress) { try { for (Enumeration niEnum = NetworkInterface.getNetworkInterfaces(); niEnum.hasMoreElements(); ) { NetworkInterface ni = niEnum.nextElement(); for (InterfaceAddress interfaceAddress : ni.getInterfaceAddresses()) { if (ipAddress.equals(interfaceAddress.getAddress().getHostAddress())) { return true; } } } } catch (SocketException e) { e.printStackTrace(); } return false; } public static String getIP(Context application) { WifiManager wifiManager = (WifiManager) application.getApplicationContext().getSystemService(Context.WIFI_SERVICE); if (!wifiManager.isWifiEnabled()) { try { for (Enumeration en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements(); ) { NetworkInterface intf = en.nextElement(); for (Enumeration enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements(); ) { InetAddress inetAddress = enumIpAddr.nextElement(); if (!inetAddress.isLoopbackAddress()) { return inetAddress.getHostAddress(); } } } } catch (SocketException e) { e.printStackTrace(); } } else { WifiInfo wifiInfo = wifiManager.getConnectionInfo(); int ipAddress = wifiInfo.getIpAddress(); return intToIp(ipAddress); } return null; } private static String intToIp(int i) { return (i & 0xFF) + "." + ((i >> 8) & 0xFF) + "." + ((i >> 16) & 0xFF) + "." + (i >> 24 & 0xFF); } private static String getWifiManagerAddress(Context context) { try { if (context != null) { WifiManager wifiManager = (WifiManager) context.getApplicationContext().getSystemService(Context.WIFI_SERVICE); if (wifiManager != null && wifiManager.isWifiEnabled()) { WifiInfo wifiInfo = wifiManager.getConnectionInfo(); int ipAddress = wifiInfo.getIpAddress(); return intToIp(ipAddress); } } } catch (Exception ignored) { } return null; } public static String getWifiIpV4Address(Context context) { try { //直接从wifiManager获取 String managerAddress = getWifiManagerAddress(context); if (!TextUtils.isEmpty(managerAddress)) { return managerAddress; } Enumeration enumeration = NetworkInterface.getNetworkInterfaces(); while (enumeration.hasMoreElements()) { NetworkInterface network = enumeration.nextElement(); if (network == null || network.isVirtual() || !network.isUp() || network.isLoopback() || !network.getName().equalsIgnoreCase("eth0")) { continue; } else { Enumeration addresses = network.getInetAddresses(); while (addresses.hasMoreElements()) { InetAddress address = addresses.nextElement(); if (!address.isLoopbackAddress() && !address.isAnyLocalAddress() && !address.isLinkLocalAddress()) { String hostAddress = address.getHostAddress(); if (hostAddress != null) { boolean isIPv4 = hostAddress.indexOf(':') < 0; if (isIPv4) return hostAddress; } } } } } } catch (Exception e) { e.printStackTrace(); } return null; } public static String getEth0IpV4Address() { try { Enumeration enumeration = NetworkInterface.getNetworkInterfaces(); while (enumeration.hasMoreElements()) { NetworkInterface network = enumeration.nextElement(); if (network == null || network.isVirtual() || !network.isUp() || network.isLoopback() || !network.getName().equalsIgnoreCase("eth0")) { continue; } else { Enumeration addresses = network.getInetAddresses(); while (addresses.hasMoreElements()) { InetAddress address = addresses.nextElement(); if (!address.isLoopbackAddress() && !address.isAnyLocalAddress() && !address.isLinkLocalAddress()) { String hostAddress = address.getHostAddress(); if (hostAddress != null) { boolean isIPv4 = hostAddress.indexOf(':') < 0; if (isIPv4) return hostAddress; } } } } } } catch (Exception e) { e.printStackTrace(); } return null; } /** * @return 获取全部有效ip地址, 优先返回有线ip */ public static String getIpV4Address(Context context) { try { String eth0IpV4Address = getEth0IpV4Address(); if (!TextUtils.isEmpty(eth0IpV4Address)) { return eth0IpV4Address; } String wifiIpV4Address = getWifiIpV4Address(context); if (!TextUtils.isEmpty(wifiIpV4Address)) { return wifiIpV4Address; } } catch (Exception e) { e.printStackTrace(); } return null; } }