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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top