c# Obtenir des adresses IPv4 à partir de Dns.GetHostEntry ()





3 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.

c# .net dns ipv6 ipv4

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();
}





Related