networkaddress.cache.ttl
: DNS Cache 시간. -1
JVM 시작후 영원히networkaddress.cache.negative.ttl
: Lookup 에 실패했을 경우 실패 사항에 대한 Cache 시간.jre/lib/security/java.security
파일을 통해 설정 가능.-Dsun.net.inetaddr.ttl=30
처럼 sun.net.inetaddr.ttl
시스템 프라퍼티로 설정 가능.networkaddress.cache.ttl
이 설정 돼 있는 경우 sun.net.inetaddr.ttl
은 무시된다.java.security.Security.setProperty("networkaddress.cache.ttl" , "30");
Enumeration<NetworkInterface> networkInterfaces = NetworkInterface.getNetworkInterfaces(); List<String> localIps = Lists.newArrayList(); while (networkInterfaces.hasMoreElements()) { NetworkInterface networkInterface = networkInterfaces.nextElement(); Enumeration<InetAddress> inetAddresses = networkInterface.getInetAddresses(); while (inetAddresses.hasMoreElements()) { InetAddress inetAddress = inetAddresses.nextElement(); if (!inetAddress.isLoopbackAddress() && !inetAddress.isLinkLocalAddress() && inetAddress.isSiteLocalAddress()) { localIps.add(inetAddress.getHostAddress()); } } }
/** * check if IP address match pattern * * @param pattern * *.*.*.* , 192.168.1.0-255 , * * @param address * - 192.168.1.1<BR> * address = 10.2.88.12 pattern = *.*.*.* result: true<BR> * address = 10.2.88.12 pattern = * result: true<BR> * address = 10.2.88.12 pattern = 10.2.88.12-13 result: true<BR> * address = 10.2.88.12 pattern = 10.2.88.13-125 result: false<BR> * @return true if address match pattern */ public static boolean checkIPMatching(String pattern, String address) { if (pattern.equals("*.*.*.*") || pattern.equals("*")) return true; String[] mask = pattern.split("\\."); String[] ip_address = address.split("\\."); for (int i = 0; i < mask.length; i++) { if (mask[i].equals("*") || mask[i].equals(ip_address[i])) continue; else if (mask[i].contains("-")) { byte min = Byte.parseByte(mask[i].split("-")[0]); byte max = Byte.parseByte(mask[i].split("-")[1]); byte ip = Byte.parseByte(ip_address[i]); if (ip < min || ip > max) return false; } else return false; } return true; }
invalid IPv6 address
같은 오류가 발생할 수 있는데, 이 경우 System Property로 다음을 지정해야 한다.-Djava.net.preferIPv4Stack=true
위 항목을 Java Code에서 지정하면 작동하지 않고, java
명령행에서 지정해야만 한다.