Soru IPv4 adreslerini Dns.GetHostEntry () adresinden alın.


Burada IPv4 makinelerinde harika çalışan bir kodum var, ancak bizim inşa sunucumuzda (bir IPv6) başarısız oluyor. Kısaca:

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

GetHostEntry için belgeleme dizenin içinden geçtiğini söylüyor.Empty size localhost'un IPv4 adresini alacaktır. İstediğim bu. Sorun, IPv6 adresindeki IPv6 makinemizin ":: 1:" dizesini döndürmesidir.

Makineyi başka bir IPv4 makinesinden pinglemek iyi bir IPv4 adresi verir ... "ping -4 machinename" kendi başına doğru IPv4 adresini verir .... ama düzenli olarak kendi başına ping "" 1: "verir.

Bu makine için IPv4'ü kendinden nasıl alabilirim?


44
2018-06-29 17:38


Menşei




Cevaplar:


Baktınız mı tüm adresler dönüşte olanlar aile InterNetworkV6 ve sadece IPv4'leri koruyor mu?


61
2018-06-29 17:50



Ahhhh ... tabi ki. Bir ampul anı. Teşekkürler! - zombat
+1: Teşekkürler - Ben de aynı soruyu sormak üzereydim :) - Jon Cage
Aramam sadece ipv6, ipv4 girişi yok. Eğer yaparsam Resolve-DnsName -Type A PowerShell'de IPv4'ü geri aldım (bu durumda döndürdüğü varsayılan tür AAAA'dır). - kamranicus
@subkamran bunu bir soru olarak değil, ayrı bir soru olarak sorun. - Remus Rusanu
Kurumsal PC'mdeki Doğrudan Erişim nedeniyle. İptal. - kamranicus


Tüm yerel IPv4 adreslerini bulmak için:

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

veya kullan Array.Find veya Array.FindLast eğer sadece birini istiyorsan.


40
2018-04-15 17:19



@NahumLitvin Ama bu linq değil mi? - Lukazoid
@lukazoid ita değil. Lambda ifadesini kastetmiş olabilirim - Nahum


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

MyIP ve myHost öğelerini public Variable olarak bildirme ve formun herhangi bir işlevinde kullanın.


6
2017-10-15 08:43





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

5
2018-03-21 21:04





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

2
2018-02-05 21:33





Tüm geçerli adres listesini bulmak için kullandığım kod budur

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

0
2018-03-14 06:48





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


-2
2018-02-19 21:12



System.Net.Dns.GetHostName bir yöntem değil, bir özelliktir. - RenniePet