GetHostByAddress dépréciée mais remplacable ?

cs_mathmax Messages postés 403 Date d'inscription vendredi 28 octobre 2005 Statut Membre Dernière intervention 31 août 2008 - 7 sept. 2006 à 22:42
cs_mathmax Messages postés 403 Date d'inscription vendredi 28 octobre 2005 Statut Membre Dernière intervention 31 août 2008 - 8 sept. 2006 à 16:14
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

MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
8 sept. 2006 à 10:01
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# 
0
cs_mathmax Messages postés 403 Date d'inscription vendredi 28 octobre 2005 Statut Membre Dernière intervention 31 août 2008
8 sept. 2006 à 16:14
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
0