GetHostByAddress dépréciée mais remplacable ?

Signaler
Messages postés
403
Date d'inscription
vendredi 28 octobre 2005
Statut
Membre
Dernière intervention
31 août 2008
-
Messages postés
403
Date d'inscription
vendredi 28 octobre 2005
Statut
Membre
Dernière intervention
31 août 2008
-
Bonjour,







Je cherche à afficher tous les noms d'hôtes local c.a.d correspondant à l'adresse IP 127.0.0.1.




Dans mon fichier hosts (C:\WINDOWS\system32\drivers\etc\hosts), j'ai les noms d'hôtes suivant :





127.0.0.1      www.alias1.com
127.0.0.1      www.alias2.com
127.0.0.1      www.alias2.com




Pour celà j'ai écris le bout de code suivant :

using System;s

using System.Net;

public
class
adresses
{

   public
static
void
Main()
   {

      string localHost =
Dns.GetHostName();

      IPHostEntry
adresseMachine;
      adresseMachine =
Dns.GetHostByAddress(
"127.0.0.1");

      Console.Out.WriteLine(
"Machine :
" +
adresseMachine.HostName);

      Console.Out.WriteLine(
"Adresses IP : " + adresseMachine.AddressList[0]);

      if
(adresseMachine.Aliases.Length != 0)
      {

         Console.Out.Write(
"Alias : " +
adresseMachine.Aliases[0]);

         for (
int i = 1; i <
adresseMachine.Aliases.Length; i++)

            Console.Out.Write(
", " +
adresseMachine.Aliases[i]);

         Console.Out.WriteLine();
      }
   }
}

J'obtiens :

Machine : www.alias1.com
Adresses IP : 127.0.0.1
Alias : www.alias2.com, www.alias3.com

Tous ceci est parfait sauf que Visual Studio, m'informe que la méthode GetHostByAddress
est obsolète et me conseille de la remplacer par la méthode GetHostEntry. Le problème est que quand j'utilise GetHostEntry dans le programme précédent j'obtiens juste :

Machine : www.alias1.com

Adresses IP : 127.0.0.1

et pas les noms d'hôtes www.alias2.com etwww.alias3.com

Savez-vous pourquoi ? Peut-on alors vraiment se passer de GetHostByAddress
dans ce cas ?

Mathmax

Mathmax

2 réponses

Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
54
Salut,

Ce post explique pourquoi cela agit comme ca, cependant c'est vrai que c'est dommage qu'on ne puisse pas reproduire le comportement exact de GetHostByAddress.
Le fait que cette méthode soit dépréciée ne t'oblige pas a ne plus l'utiliser, et je pense que dans ton cas si tu as absolument besoin de ces Alias, continue a t'en servir tant qu'il n'y a pas de solution alternative

Mx
MVP C# 
Messages postés
403
Date d'inscription
vendredi 28 octobre 2005
Statut
Membre
Dernière intervention
31 août 2008

En fait dans ton post, ils parlent de la méthode GetHostByName(). Si j'ai bien compris (je ne suis pas très fort en anglais...), la propriété Aliases de l'instance de IPHostEntry retourné par GetHostByName(nomHote) ne retourne une valeur que si nomHote est un alias. J'ai pu le vérifier comme ceci :

J'ai d'abord placé dans mon fichier hosts les lignes suivantes :

127.0.0.1           Hote  AliasDeHote Alias2DeHote Alias3DeHote
127.0.0.1             AliasDeHote   aliasDeAliasDeHote

Puis j'ai écris ce programme :

using System;
using System.Net;
public class adresses
{
    public static void Main()
    {
        string[] names = { "Hote", "AliasDeHote", "aliasDeAliasDeHote" };
        foreach (string name in names)
        {
            IPHostEntry adresseMachine = Dns.GetHostByName(name);
            Console.Out.WriteLine("Machine : " + adresseMachine.HostName);
            Console.Out.WriteLine("Adresses IP : " + adresseMachine.AddressList[0]);
            if (adresseMachine.Aliases.Length != 0)
            {
                Console.Out.Write("Alias : " + adresseMachine.Aliases[0]);
                for (int i = 1; i < adresseMachine.Aliases.Length; i++)
                    Console.Out.Write(", " + adresseMachine.Aliases[i]);
                Console.Out.WriteLine();
            }
            Console.Out.WriteLine("***********************************************");
            Console.Out.WriteLine();
        }
    }
}

J'obtiens alors :

Machine : Hote
Adresses IP : 127.0.0.1
*********************************************

Machine : Hote
Adresses IP : 127.0.0.1
Alias : AliasDeHote
*********************************************

Machine : AliasDeHote
Adresses IP : 127.0.0.1
Alias : aliasDeAliasDeHote
*********************************************

Ce qui m'étonne est que les noms Alias2DeHote et Alias3DeHote n'aparaissent jamais dans la propriété aliases. Comme ci cette propriété ne pouvait reçevoir qu'un seul alias...pourtant c'est un tableau ! Je ne comprends pas alors trop l'utilité de la propriété aliases dans ce cas...
Si je remplace dans le programme précedent GetHostByName() par GetHostEntry() alors la propriété aliases ne retourne rien.

Dans le cas de GetHostByAddress(), la propriété de aliases retourne tous les alias de l'adresse donnée en paramètre, mais pas les sous-alias. Si là encore on remplace cette méthode par
GetHostEntry() alors la propriété aliases ne retourne toujours rien.

Décidement je ne comprends pas pourquoi la propriété aliases n'est
jamais remplie quand on obtient une instance de IPHostEntry avec
GetHostEntry() ?? Quel en est l'intérêt ?
Mathmax