[C#] Obtenir des adresses IPv4 à partir de Dns.GetHostEntry ()


Answers

Pour trouver toutes les adresses IPv4 locales:

IPAddress[] ipv4Addresses = Array.FindAll(
    Dns.GetHostEntry(string.Empty).AddressList,
    a => a.AddressFamily == AddressFamily.InterNetwork);

ou utilisez Array.Find ou Array.FindLast si vous en voulez un.

Question

J'ai du code ici qui fonctionne très bien sur les machines IPv4, mais sur notre serveur de construction (un IPv6) il échoue. En un mot:

IPHostEntry ipHostEntry = Dns.GetHostEntry(string.Empty);

La documentation pour GetHostEntry dit que passer dans string.Empty vous obtiendra l'adresse IPv4 de l'hôte local. C'est ce que je veux. Le problème est qu'il retourne la chaîne ":: 1:" sur notre machine IPv6, qui je crois est l'adresse IPv6.

Ping la machine de n'importe quelle autre machine IPv4 donne une bonne adresse IPv4 ... et faire un "ping -4 machinename" de lui-même donne l'adresse IPv4 correcte .... mais cingler régulièrement d'elle-même donne ":: 1:".

Comment puis-je obtenir l'IPv4 pour cette machine, à partir de lui-même?




IPHostEntry ipHostInfo = Dns.GetHostEntry(serverName);
IPAddress ipAddress = ipHostInfo.AddressList
    .FirstOrDefault(a => a.AddressFamily == AddressFamily.InterNetwork);



Pour trouver toutes les adresses valides, voici le code que j'ai utilisé

public static IEnumerable<string> GetAddresses()
{
      var host = Dns.GetHostEntry(Dns.GetHostName());
      return (from ip in host.AddressList where ip.AddressFamily == AddressFamily.lo select ip.ToString()).ToList();
}