Получите IPv4-адреса от Dns.GetHostEntry ()

У меня есть некоторый код, который отлично работает на машинах IPv4, но на нашем сервере сборки (IPv6) он не работает. В двух словах

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

В документации по GetHostEntry говорится, что при передаче в string.Empty вы получите IPv4-адрес локального хоста. Это то, что я хочу. Проблема в том, что он возвращает строку «:: 1:» на нашей машине IPv6, которая, как я считаю, является адресом IPv6.

Проверка связи с любой другой машиной IPv4 дает хороший адрес IPv4 ... и выполнение "ping -4 machinename" от себя дает правильный адрес IPv4 .... но регулярный пинг от себя дает ":: 1:".

Как я могу получить IPv4 для этой машины от себя?

Ответы на вопрос(7)

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

или использоватьArray.Find илиArray.FindLast если хочешь.

 Lukazoid01 мар. 2016 г., 16:42
@ NahumLitvin Но это не linq?
 Nahum02 мар. 2016 г., 06:16
@ lukazoid это не так. Я мог иметь в виду лямбда-выражение
    public Form1()
    {
        InitializeComponent();

        string myHost = System.Net.Dns.GetHostName();
        string myIP = null;

        for (int i = 0; i <= System.Net.Dns.GetHostEntry(myHost).AddressList.Length - 1; i++)
        {
            if (System.Net.Dns.GetHostEntry(myHost).AddressList[i].IsIPv6LinkLocal == false)
            {
                myIP = System.Net.Dns.GetHostEntry(myHost).AddressList[i].ToString();
            }
        }
    }

нкции формы.

Решение Вопроса

все адреса в ответ отбросьте те изfamily InterNetworkV6 и сохранить только IPv4?

 kamranicus02 окт. 2015 г., 00:46
Это связано с прямым доступом на моем корпоративном ПК. Игнорирование.
 zombat29 июн. 2009 г., 19:59
Аааа ... конечно. Момент лампочки. Благодарность
 Remus Rusanu04 сент. 2015 г., 10:09
@ subkamran, пожалуйста, задавайте это как отдельный вопрос, а не как комментарий
 kamranicus03 сент. 2015 г., 22:54
Мой звонок только возвращает ipv6, никаких записей ipv4. Если я сделаюResolve-DnsName -Type A в PowerShell я получаю обратно IPv4 (тип по умолчанию, который он возвращает в этом случае, AAAA).
 Jon Cage13 авг. 2009 г., 16:02
+ 1: Спасибо - я собирался задать этот же вопрос

это код, который я использовал

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();
}
    public static string GetIPAddress(string hostname)
    {
        IPHostEntry host;
        host = Dns.GetHostEntry(hostname);

        foreach (IPAddress ip in host.AddressList)
        {
            if (ip.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
            {
                //System.Diagnostics.Debug.WriteLine("LocalIPadress: " + ip);
                return ip.ToString();
            }
        }
        return string.Empty;
    }
IPHostEntry ipHostInfo = Dns.GetHostEntry(serverName);
IPAddress ipAddress = ipHostInfo.AddressList
    .FirstOrDefault(a => a.AddressFamily == AddressFamily.InterNetwork);
 Georg21 нояб. 2018 г., 09:02
К сожалению, это виртуальный адрес перед IP-адресом компьютера на моей машине. Я не могу выбрать реальный IP-адрес, потому что оба имеют флаг "InterNetwork".

IPv6

lblIP.Text = System.Net.Dns.GetHostEntry (System.Net.Dns.GetHostName) .AddressList (0) .ToString ()


IPv4

lblIP.Text = System.Net.Dns.GetHostEntry (System.Net.Dns.GetHostName) .AddressList (1) .ToString ()

 RenniePet12 июл. 2015 г., 14:15
System.Net.Dns.GetHostName - это метод, а не свойство.

Ваш ответ на вопрос