Wie erhalte ich die Local Network IP-Adresse eines Computers programmatisch?
-
02-07-2019 - |
Frage
Ich brauche die tatsächliche lokale Netzwerk-IP-Adresse des Computers (z 192.168.0.220) von meinem Programm mit C # und .NET 3.5 zu erhalten. Ich kann einfach nicht 127.0.0.1 in diesem Fall verwendet werden.
Was ist der beste Weg, dies zu tun?
Lösung
Link- Dort heißt es, fügen Sie System.net, und mit dem folgenden
//To get the local IP address
string sHostName = Dns.GetHostName ();
IPHostEntry ipE = Dns.GetHostByName (sHostName);
IPAddress [] IpA = ipE.AddressList;
for (int i = 0; i < IpA.Length; i++)
{
Console.WriteLine ("IP Address {0}: {1} ", i, IpA[i].ToString ());
}
Andere Tipps
Wenn Sie sich für die Art von Informationen, dass der Kommandozeilen-Utility, ipconfig, zur Verfügung stellen kann, sollten Sie den System.Net.NetworkInformation Namespace werden.
In diesem Codebeispiel werden alle Netzwerkschnittstellen aufzählen und die Adressen für jeden Adapter bekannt Dump.
using System;
using System.Net;
using System.Net.NetworkInformation;
class Program
{
static void Main(string[] args)
{
foreach ( NetworkInterface netif in NetworkInterface.GetAllNetworkInterfaces() )
{
Console.WriteLine("Network Interface: {0}", netif.Name);
IPInterfaceProperties properties = netif.GetIPProperties();
foreach ( IPAddress dns in properties.DnsAddresses )
Console.WriteLine("\tDNS: {0}", dns);
foreach ( IPAddressInformation anycast in properties.AnycastAddresses )
Console.WriteLine("\tAnyCast: {0}", anycast.Address);
foreach ( IPAddressInformation multicast in properties.MulticastAddresses )
Console.WriteLine("\tMultiCast: {0}", multicast.Address);
foreach ( IPAddressInformation unicast in properties.UnicastAddresses )
Console.WriteLine("\tUniCast: {0}", unicast.Address);
}
}
}
Sie sind wahrscheinlich am meisten interessiert den UnicastAddresses.
Dns Verwendung erfordert, dass der Computer mit dem lokalen DNS-Server registriert werden, was nicht unbedingt der Fall ist, wenn Sie auf einem Intranet sind, und noch weniger wahrscheinlich, wenn Sie zu Hause mit einem ISP sind. Es erfordert auch ein Netzwerk gehören: -. Alle Informationen über Ihren eigenen Computer, um herauszufinden,
Der richtige Weg:
NetworkInterface[] nics = NetworkInterface.GetAllNetworkInterfaces();
foreach(NetworkInterface adapter in nics)
{
foreach(var x in adapter.GetIPProperties().UnicastAddresses)
{
if (x.Address.AddressFamily == AddressFamily.InterNetwork && x.IsDnsEligible)
{
Console.WriteLine(" IPAddress ........ : {0:x}", x.Address.ToString());
}
}
}
(UPDATE 31-Jul-2015: Fest einige Probleme mit dem Code)
oder für diejenigen, die nur eine Linie von Linq mögen:
NetworkInterface.GetAllNetworkInterfaces()
.SelectMany(adapter=> adapter.GetIPProperties().UnicastAddresses)
.Where(adr=>adr.Address.AddressFamily == AddressFamily.InterNetwork && adr.IsDnsEligible)
.Select (adr => adr.Address.ToString());
Als eine Maschine mehr IP-Adressen hat, der richtige Weg, Ihre IP-Adresse, um herauszufinden, dass Sie gehen auf dem Weg zum allgemeinen Internet zu verwenden ist im Internet eine Steckdose an einen Host zu öffnen, überprüfen Sie dann die Socket-Verbindung, um zu sehen, was die lokale Adresse, die in diesem Zusammenhang verwendet wird, ist.
die Socket-Verbindung von genauer ansehen, werden Sie in der Lage zu berücksichtigen seltsame Routing-Tabellen zu nehmen, mehr IP-Adressen und Hostnamen whacky. Der Trick mit dem Hostnamen oben arbeiten kann, aber ich würde es ganz zuverlässig nicht in Betracht ziehen.
Wenn Sie wissen, dass es eine oder mehrere IPv4-Adressen für den Computer, das einen von ihnen bieten wird:
Dns.GetHostAddresses(Dns.GetHostName())
.First(a => a.AddressFamily == AddressFamily.InterNetwork).ToString()
GetHostAddresses
normalerweise blockiert den aufrufenden Thread, während es den DNS-Server abfragt, und wirft einen SocketException
, wenn die Abfrage fehlschlägt. Ich weiß nicht, ob es den Netzanruf überspringt, wenn Sie Ihren eigenen Hostnamen nachschlagen.