2016-06-22 22 views
-1

Gibt es eine zuverlässige Möglichkeit, die IPv4-Adresse der ersten lokalen Ethernet-Schnittstelle in C# zu erhalten?Lokale IP-Adresse der Ethernet-Schnittstelle in C# abrufen

foreach (NetworkInterface nic in NetworkInterface.GetAllNetworkInterfaces()) 
{ 
    if (nic.NetworkInterfaceType == NetworkInterfaceType.Ethernet) 
    {... 

Dies findet die lokale IP-Adresse mit dem Ethernet-Adapter verbunden ist, sondern auch den Npcap Loopback-Adapter (installiert für die Verwendung mit Wireshark) finden.

Ähnlich scheint es keinen Weg, um den Unterschied zwischen der Loopback-Adresse und die Ethernet-Adresse zu sagen, mit dem folgenden Code: Alle anderen Vorschläge

var host = Dns.GetHostEntry(Dns.GetHostName()); 
foreach (var ip in host.AddressList) 
{.... 

?

+0

Dies erklärt, wie die Adresse des Host-Namen für die Maschine zu bekommen. http://stackoverflow.com/questions/9855230/how-do-i-get-the-network-interface-and-its-right-ipv4-address (was wichtiger sein könnte als der "erste" Adapter) – ebyrob

+0

Das hilft nicht. Er gibt beide Adressen an (die Ethernet-Kartenadresse und die Npcap-Loopback-Adresse). –

Antwort

1

Der folgende Code ruft das IPv4 von der bevorzugten Schnittstelle ab. Dies sollte auch in virtuellen Maschinen funktionieren.

using System.Net; 
using System.Net.Sockets; 

public static void getIPv4() 
    { 
     try 
     { 
      using (Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, 0)) 
      { 
       socket.Connect("10.0.1.20", 1337); // doesnt matter what it connects to 
       IPEndPoint endPoint = socket.LocalEndPoint as IPEndPoint; 
       Console.WriteLine(endPoint.Address.ToString()); //ipv4 
      } 
     } 
     catch (Exception) 
     { 
      Console.WriteLine("Failed"); // If no connection is found 
     } 
    } 
+0

Danke - das funktioniert perfekt, aber könnten Sie erklären warum? –

+0

"Socket-Socket = neuer Socket (AddressFamily.InterNetwork, SocketType.Dgram, 0))" Es stellt eine verbindungslose UDP-Verbindung her, die Ihre ausgehende IP-Adresse enthält. dann würden Sie die ausgehende IP von ihm erhalten. – DuckSoy