java.net.Inet6Address
ne l'emporte pas sur getByName()
il renvoie toujours l'IPv4 adresse spécifique, à moins que votre paramètre lui-même est sous la forme d'une IPv6 adresse valide, dans ce cas, cette méthode renvoie un Inet6Address-Object.
Par exemple:
getByName("stackoverflow.com")
-> Inet4Address
getByName("2001:0db8:85a3:08d3:1319:8a2e:0370:7344")
-> Inet6Address
InetAddress.getByName() - Documentation
détermine l'adresse IP d'un hôte, compte tenu de la nom de l'hôte Le nom d'hôte peut être un nom de machine, tel que "java.sun.com", ou une représentation textuelle de son adresse IP. Si une adresse IP littérale est , seule la validité du format d'adresse est vérifiée.
> Pour hôte spécifié dans l'adresse IPv6 littérale, que ce soit sous la forme définie dans RFC 2732 ou le format d'adresse IPv6 littérale défini dans la RFC 2373 est acceptée. <
Donc, si vous voulez obtenir un IPv6 Adresse vous devez définir au sein de votre paramètre ou configurer un DNS-Server pour renvoyer l'IPv6 Adresse au lieu de l'IPv4 adresse.
Une autre façon de récupérer l'adresse IPv6 est d'utiliser InetAddress.getAllByName("www.google.at")
qui renvoie toutes les adresses IP connues de l'hôte.
Par exemple, vous pouvez utiliser cette méthode pour filtrer le tableau retourné, ce qui renvoie le premier IPv6-adresse ou null
si l'hôte ne l'avez pas:
public Inet6Address getIPv6Addresses(InetAddress[] addresses) {
for (InetAddress addr : addresses) {
if (addr instanceof Inet6Address) {
return (Inet6Address) addr;
}
}
return null;
}
MISE À JOUR: Pour plus de fonctions , en particulier ceux affectant les serveurs DNS, je recommande d'utiliser la bibliothèque externe DNSJava, car l'implémentation Java simple du support DNS est mauvaise.
http://www.dnsjava.org/
Code actuel:
public class Ping
{
public void pingHost (String hostName)
{
try
{
InetAddress[] inet = InetAddress.getAllByName(hostName);
String address = this.getIPv4Addresses(inet).getHostAddress();
boolean status = this.getIPv6Addresses(inet).isReachable(5000);
if (status)
{
System.out.println(reverseDns(address) + " Host Reached\t" + this.getIPv6Addresses(inet).getHostAddress());
}
else
{
System.out.println(this.getIPv6Addresses(inet).getCanonicalHostName() + " Host Unreachable");
}
}
catch (UnknownHostException e)
{
System.err.println("Host does not exists");
}
catch (IOException e)
{
System.err.println("Error in reaching the Host");
}
}
public Inet6Address getIPv6Addresses(InetAddress[] addresses)
{
for (InetAddress addr : addresses)
{
if (addr instanceof Inet6Address)
{
return (Inet6Address) addr;
}
}
return null;
}
public Inet4Address getIPv4Addresses(InetAddress[] addresses)
{
for (InetAddress addr : addresses)
{
if (addr instanceof Inet4Address)
{
return (Inet4Address) addr;
}
}
return null;
}
public static String reverseDns(String hostIp) throws IOException
{
Resolver res = new ExtendedResolver();
Name name = ReverseMap.fromAddress(hostIp);
int type = Type.PTR;
int dclass = DClass.IN;
Record rec = Record.newRecord(name, type, dclass);
Message query = Message.newQuery(rec);
Message response = res.send(query);
Record[] answers = response.getSectionArray(Section.ANSWER);
if (answers.length == 0)
return hostIp;
else
return answers[0].rdataToString();
}
}
C'est ce que j'utilise. – Nick
avez-vous ipv6 activé sur votre machine? –
Oui. J'ai écrit ce programme en C# et ça marche bien, je n'arrive pas à le comprendre en java. – Nick