/* * Copyright 2015 Netflix, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.netflix.discovery.util; import java.net.InetAddress; import java.net.NetworkInterface; import java.net.SocketException; import java.util.Enumeration; /** * @author Tomasz Bak */ public final class SystemUtil { private SystemUtil() { } /** * Returns server IP address (v4 or v6) bound to local NIC. If multiple NICs are present, choose 'eth0' or 'en0' or * any one with name ending with 0. If non found, take first on the list that is not localhost. If no NIC * present (relevant only for desktop deployments), return loopback address. */ public static String getServerIPv4() { String candidateAddress = null; try { Enumeration<NetworkInterface> nics = NetworkInterface.getNetworkInterfaces(); while (nics.hasMoreElements()) { NetworkInterface nic = nics.nextElement(); Enumeration<InetAddress> inetAddresses = nic.getInetAddresses(); while (inetAddresses.hasMoreElements()) { String address = inetAddresses.nextElement().getHostAddress(); String nicName = nic.getName(); if (nicName.startsWith("eth0") || nicName.startsWith("en0")) { return address; } if (nicName.endsWith("0") || candidateAddress == null) { candidateAddress = address; } } } } catch (SocketException e) { throw new RuntimeException("Cannot resolve local network address", e); } return candidateAddress == null ? "127.0.0.1" : candidateAddress; } public static void main(String[] args) { System.out.println("Found IP=" + getServerIPv4()); } }