2015-06-12 3 views
0

У меня есть двойная стековая машина.Как получить как IPv4, так и IPv6 в двойном стеке

Моя проблема, я получаю только IPv4 с помощью

InetAddress address = InetAddress.getLocalHost(); 

и если я использовать API Network Interface, то я получаю все IP-адреса, в который включает в себя мои addrres MAC, а также в виде IP-адреса. why-do-i-get-multiple-global-ipv6-addresses-listed-in-ifconfig

Теперь я могу получить как IPv4, так и IPv6 на моем компьютере.

ответ

0

В Linux InetAddress.getLocalHost() будет искать имя хоста и затем вернуть первый IP-адрес, присвоенный этому имени хоста DNS. Если у вас есть это имя хоста в файле/etc/hosts, он получит первый IP-адрес в этом файле для этого имени хоста.

Если вы обратите внимание, этот метод возвращает только один адрес InetAddress.

Если вы не назначили имя хоста, скорее всего это будет localhost.localdomain. Вы можете установить имя хоста с командной строки:

hostname [name] 

или установив его в файле/и т.д./sysconfig/сети

Если вы хотите, чтобы получить все IP-адреса, включая IPv6, присвоенные имя хоста вы можете Применение:

InetAddress.getAllByName(InetAddress.getLocalHost().getHostName()); 

Если вы хотите получить весь IP-адрес, включая IPv6, назначенный сетевые интерфейсы хоста-, вы должны использовать класс NetworkInterface.

Здесь я приклеивая некоторый пример кода:

import java.net.InetAddress; 
import java.net.UnknownHostException; 
import java.net.SocketException; 
import java.net.NetworkInterface; 
import java.util.*; 

public class Test 
{ 
    public static void main(String[] args) 
    { 
     try 
     { 
      System.out.println("getLocalHost: " + InetAddress.getLocalHost().toString()); 

      System.out.println("All addresses for local host:"); 
      InetAddress[] addr = InetAddress.getAllByName(InetAddress.getLocalHost().getHostName()); 
      for(InetAddress a : addr) 
      { 
       System.out.println(a.toString()); 
      } 
     } 
     catch(UnknownHostException _e) 
     { 
      _e.printStackTrace(); 
     } 

     try 
     { 
      Enumeration nicEnum = NetworkInterface.getNetworkInterfaces(); 
      while(nicEnum.hasMoreElements()) 
      { 
       NetworkInterface ni=(NetworkInterface) nicEnum.nextElement(); 
       System.out.println("Name: " + ni.getDisplayName()); 
       System.out.println("Name: " + ni.getName()); 
       Enumeration addrEnum = ni.getInetAddresses(); 
       while(addrEnum.hasMoreElements()) 
       { 
        InetAddress ia= (InetAddress) addrEnum.nextElement(); 
        System.out.println(ia.getHostAddress()); 
       } 
      } 
     } 
     catch(SocketException _e) 
     { 
      _e.printStackTrace(); 
     } 
    } 
} 

Для этого примера, я получил код одного из ответов на InetAddress.getLocalHost().getHostAddress() is returning 127.0.1.1

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