2016-12-01 1 views
3

여기에 관해서는 link에 제공된 코드를 사용하여 IP 주소를 생성합니다.Java IPv4 주소 얻기

String ip; 
    try { 
     Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces(); 
     while (interfaces.hasMoreElements()) { 
      NetworkInterface iface = interfaces.nextElement(); 
      // filters out 127.0.0.1 and inactive interfaces 
      if (iface.isLoopback() || !iface.isUp()) 
       continue; 

      Enumeration<InetAddress> addresses = iface.getInetAddresses(); 
      while(addresses.hasMoreElements()) { 
       InetAddress addr = addresses.nextElement(); 
       ip = addr.getHostAddress(); 
       System.out.println(iface.getDisplayName() + " " + ip); 
      } 
     } 
    } catch (SocketException e) { 
     throw new RuntimeException(e); 
    } 

나는 IP 주소를 얻기 위해 정확한 코드를 구현해야하지만, 모두 IPv4 및 IPv6 주소를 제공합니다. 아래는 생산 된 가치입니다.

Qualcomm Atheros AR5BWB222 Wireless Network Adapter 192.168.1.5 
Qualcomm Atheros AR5BWB222 Wireless Network Adapter fe80:0:0:0:a874:xxxx:xxxx:9150%wlan0 

난 단지 IPv4의 값과 둘을 얻을 수있는 방법이 있나요 (IPv6 주소는 편집 됨)?

답변

6

개체의 유형을 확인하여 Inet4Address 또는 Inet6Address 인스턴스인지 확인할 수 있습니다. 예를 들어

:

String ip; 
try { 
    Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces(); 
    while (interfaces.hasMoreElements()) { 
     NetworkInterface iface = interfaces.nextElement(); 
     // filters out 127.0.0.1 and inactive interfaces 
     if (iface.isLoopback() || !iface.isUp()) 
      continue; 

     Enumeration<InetAddress> addresses = iface.getInetAddresses(); 
     while(addresses.hasMoreElements()) { 
      InetAddress addr = addresses.nextElement(); 

      // *EDIT* 
      if (addr instanceof Inet6Address) continue; 

      ip = addr.getHostAddress(); 
      System.out.println(iface.getDisplayName() + " " + ip); 
     } 
    } 
} catch (SocketException e) { 
    throw new RuntimeException(e); 
}