如何正確獲取本地IP?(收藏)
1
2
InetAddress.getLocalHost().getHostAddress();public static String getLocalAddress() {try {// 獲取所在機(jī)器上的所有網(wǎng)卡Enumeration<NetworkInterface> enumeration = NetworkInterface.getNetworkInterfaces();ArrayList<String> ipv4Result = new ArrayList<String>();ArrayList<String> ipv6Result = new ArrayList<String>();// 遍歷獲取所有網(wǎng)卡綁定的全部IP地址,并按照IPV4和IPV6分開存放while (enumeration.hasMoreElements()) {final NetworkInterface networkInterface = enumeration.nextElement();final Enumeration<InetAddress> en = networkInterface.getInetAddresses();while (en.hasMoreElements()) {final InetAddress address = en.nextElement();if (!address.isLoopbackAddress()) {if (address instanceof Inet6Address) {ipv6Result.add(normalizeHostAddress(address));} else {ipv4Result.add(normalizeHostAddress(address));}}}}// 優(yōu)先返回IPV4的非回路和非私有地址if (!ipv4Result.isEmpty()) {for (String ip : ipv4Result) {if (ip.startsWith("127.0") || ip.startsWith("192.168")) {continue;}return ip;}return ipv4Result.get(ipv4Result.size() - 1);} else if (!ipv6Result.isEmpty()) {return ipv6Result.get(0);}// 如果獲取失敗,降級到根據(jù)localhost獲取地址final InetAddress localHost = InetAddress.getLocalHost();return normalizeHostAddress(localHost);} catch (Exception e) {log.error("Failed to obtain local address", e);}return null;}// 工具方法,規(guī)范IP地址格式private static String normalizeHostAddress(final InetAddress localHost) {if (localHost instanceof Inet6Address) {return "[" + localHost.getHostAddress() + "]";} else {return localHost.getHostAddress();}}
聊技術(shù),不止于技術(shù)。
評論
圖片
表情
