사용자 도구

사이트 도구


java:network

Java Network

Java Network Property

DNS Cache

  • networkaddress.cache.ttl : DNS Cache 시간. -1 JVM 시작후 영원히
  • networkaddress.cache.negative.ttl : Lookup 에 실패했을 경우 실패 사항에 대한 Cache 시간.
  • jre/lib/security/java.security 파일을 통해 설정 가능.
  • Oracle/Open JDK의 경우 -Dsun.net.inetaddr.ttl=30 처럼 sun.net.inetaddr.ttl 시스템 프라퍼티로 설정 가능.
    • 단, networkaddress.cache.ttl이 설정 돼 있는 경우 sun.net.inetaddr.ttl은 무시된다.
  • Java 6/7/8 의 경우 기본값 30초로 돼 있음. OpenJdk 8 InetAddressCachePolicy
  • static context 에서 코드로 지정해줄 수도 있다.
    java.security.Security.setProperty("networkaddress.cache.ttl" , "30");

Localhost의 IP 주소 목록 뽑기

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());
        }
    }
}

IP Address match

  • Check if IP address match pattern : IP Address « Network Protocol « Java
      /**
       * 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;
      }
  • Apache Commons net SubnetUtils를 사용할 수도 있다.

java.net.URL

IPv4 강제하기

  • 환경에 따라 IPv6를 우선으로 하면서 invalid IPv6 address 같은 오류가 발생할 수 있는데, 이 경우 System Property로 다음을 지정해야 한다.
-Djava.net.preferIPv4Stack=true

위 항목을 Java Code에서 지정하면 작동하지 않고, java 명령행에서 지정해야만 한다.

java/network.txt · 마지막으로 수정됨: 2019/03/21 16:08 저자 kwon37xi