Erhalten Sie IPv4-Adressen aus Dns.GetHostEntry ()
Frage
Ich habe einige Code hier bekam, die auf IPv4-Maschinen funktioniert gut, aber auf unserem Build-Server (ein IPv6) es funktioniert nicht. Auf den Punkt gebracht:
IPHostEntry ipHostEntry = Dns.GetHostEntry(string.Empty);
Die Dokumentation für GetHostEntry sagt, dass in string.Empty vorbei finden Sie die IPv4-Adresse des lokalen Host erhalten. Das ist was ich will. Das Problem ist, dass es die Zeichenfolge ist Rückkehr „:: 1:“. Auf unserer IPv6-Maschine, die ich glaube, ist die IPv6-Adresse
Pinging die Maschine von einer anderen IPv4-Maschine gibt eine gute IPv4-Adresse ... und tut „ping -4 Computername“ von selbst gibt die richtige IPv4-Adresse .... aber es regelmäßig Pingen von sich gibt ":: 1:".
Wie kann ich die IPv4 für diese Maschine zu bekommen, von sich selbst?
Lösung
Haben Sie unter alle die Adressen in der Rückkehr, verwerfen die, die von Familie InterNetworkV6 und behalten nur die IPv4 welche?
Andere Tipps
alle lokalen IPv4-Adressen zu finden:
IPAddress[] ipv4Addresses = Array.FindAll(
Dns.GetHostEntry(string.Empty).AddressList,
a => a.AddressFamily == AddressFamily.InterNetwork);
oder verwenden Array.Find
oder Array.FindLast
, wenn Sie nur wollen, ein.
IPHostEntry ipHostInfo = Dns.GetHostEntry(serverName);
IPAddress ipAddress = ipHostInfo.AddressList
.FirstOrDefault(a => a.AddressFamily == AddressFamily.InterNetwork);
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();
}
}
}
Deklarieren MyIP und MYHOST in öffentlichen Variable und in jeder Funktion der Form verwendet werden.
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;
}
Um alle gültigen Adressliste finden Dies ist der Code habe ich verwendet
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();
}
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 ()