最近重装了系统（Linux系统）后，发现dubbo在注册中心注册的地址为180.168.41.175，介于之前组内其他人也出现过dubbo所获取的IP为180.168.41.175的问题，于是翻了翻源码，找到了获得IP的出处：InetAddress.getLocalHost()。而Java的这个方法依赖于本地的hostname和hosts文件。而我的系统默认的hosts文件中并不存在hostname所对应的记录，结果InetAddress.getLocalHost()就解析成了180.168.41.175。
我看到QA(http://dubbo.io/faq.html) 中有条和我的情况类似的（第17条，说是Dubbo1.0.7以上版本不会出现这个问题，但是我这里出现了，虽然不是127.0.0.1）。
我有个不成熟的小建议，可否优化一下IP获取的方式，让其更加精准；或则增加一个明显一点的配置说明。毕竟不同的Linux发行版有不同的hosts配置，出现这种问题让新手很是蒙蔽。。
望大神回复。
private static final Logger logger = LoggerFactory.getLogger(NetUtils.class);
    
    private static final int RND_PORT_START = 30000;
    private static final int RND_PORT_RANGE = 10000;
    
    private static final int MIN_PORT = 0;
    private static final int MAX_PORT = 65535;
    private static final Pattern ADDRESS_PATTERN = Pattern.compile("^\\d{1,3}(\\.\\d{1,3}){3}\\:\\d{1,5}$");
    private static final Pattern LOCAL_IP_PATTERN = Pattern.compile("127(\\.\\d{1,3}){3}$");
    private static final Pattern IP_PATTERN = Pattern.compile("\\d{1,3}(\\.\\d{1,3}){3,5}$");
    private static final Map<String, String> hostNameCache = new LRUCache<>(1000);
    private static volatile InetAddress LOCAL_ADDRESS = null;
    public static int getRandomPort() {
        return RND_PORT_START + ThreadLocalRandom.current().nextInt(RND_PORT_RANGE);
    }
    public static int getAvailablePort() {
        try (ServerSocket ss = new ServerSocket()) {
            ss.bind(null);
            return ss.getLocalPort();
        } catch (IOException e) {
            return getRandomPort();
        }
    }
    public static int getAvailablePort(int port) {
        if (port <= 0) {
            return getAvailablePort();