2016-06-22 12 views
-1

C#の最初のローカルイーサネットインターフェイスのIPv4アドレスを取得する信頼できる方法はありますか?C#のイーサネットインターフェイスのローカルIPアドレスを取得

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

これは、イーサネットアダプタに関連付けられたローカルIPアドレスを見つけるだけでなく、(Wiresharkのに使用するためにインストール)Npcapループバックアダプタを見つけます。

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

他の提案:

は同様に、ループバックアドレスと、次のコードを使用して、イーサネットアドレスの違いを見分けるする方法はないように思えますか?

+0

これは、マシンのホスト名のアドレスを取得する方法について説明します。 http://stackoverflow.com/questions/9855230/how-do-i-get-the-network-interface-and-its-right-ipv4-address(「最初の」アダプタよりも重要かもしれません) – ebyrob

+0

それは助けにはならない。両方のアドレス(イーサネットカードアドレスとNpcapループバックアドレス)を与えます。 –

答えて

1

次のコードは、優先インターフェイスからIPv4を取得します。これは仮想マシン内でも機能するはずです。

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

ありがとう - これは完全に機能しますが、理由を説明できますか? –

+0

"ソケットソケット=新しいソケット(AddressFamily.InterNetwork、SocketType.Dgram、0))" あなたのアウトバウンドIPアドレスを含む接続なしのUDP接続を作成します。 それからアウトバウンドIPを取得します。 – DuckSoy

関連する問題