2016-12-01 2 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 

(IPv6-адрес отредактированный)

Есть ли способ, что я мог бы только получить значение IPv4 и не оба?

ответ

6

Вы можете проверить тип объекта addr, чтобы узнать, есть ли он 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); 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^