2017-06-17 14 views
0

私は自分のコンピュータに複数のネットワークカードを持っています。 (VMWareのため)C#アクティブなNICのIPv4アドレスを取得

アクティブなカードのIPv4アドレスを見つける方法を教えてください。私が端末にpingを送信し、WireSharkのパケットを傍受すると、「送信元」のアドレスが必要になります。

私はすべてのネットワークインターフェイスをチェックし、GateWayが空かヌルかどうかを調べることを考えましたか?または、ping 127.0.0.1を呼び出して、ping要求のIPソースを取得しますか?しかし、それを実装することはできません。今の

私はStackOverflowの

public static string GetLocalIpAddress() 
     { 
      var host = Dns.GetHostEntry(Dns.GetHostName()); 
      return host.AddressList.First(h => h.AddressFamily == AddressFamily.InterNetwork).ToString(); 
     } 

で見つかった。しかし、それは私のVMWareのカードのIPを取得し、このコードを持っています。しかし、私はそれ以外に ".First()"を使うことはできません。

答えて

1

の物理アドレスにアクセスすることができます

var nics = NetworkInterface.GetAllNetworkInterfaces(); 
foreach (var networkInterface in nics) 
{ 
    if (networkInterface.OperationalStatus == OperationalStatus.Up) 
    { 
     var address = networkInterface.GetPhysicalAddress(); 
    } 
} 

私は本当を得るための効率的な方法をついに発見しましたIP。基本的には、IPv4のすべてのインターフェイスを調べます。これはUPであり、それを決定するものです。デフォルトゲートウェイを使用するインターフェイスだけです。

public static string GetLocalIpAddress() 
     { 
      foreach (var netI in NetworkInterface.GetAllNetworkInterfaces()) 
      { 
       if (netI.NetworkInterfaceType != NetworkInterfaceType.Wireless80211 && 
        (netI.NetworkInterfaceType != NetworkInterfaceType.Ethernet || 
        netI.OperationalStatus != OperationalStatus.Up)) continue; 
       foreach (var uniIpAddrInfo in netI.GetIPProperties().UnicastAddresses.Where(x => netI.GetIPProperties().GatewayAddresses.Count > 0)) 
       { 

        if (uniIpAddrInfo.Address.AddressFamily == AddressFamily.InterNetwork && 
         uniIpAddrInfo.AddressPreferredLifetime != uint.MaxValue) 
         return uniIpAddrInfo.Address.ToString(); 
       } 
      } 
      Logger.Log("You local IPv4 address couldn't be found..."); 
      return null; 
     } 
0

まあ、私の友人は、次の操作を行うことができますアドレス変数を使用すると、現在までのネットワークインタフェース

+0

お返事ありがとうございます。このタイプの実装での問題は、UPであるすべてのinytefaceをあなたに与えることです。そして私の他のカードも上がっています。私は最終的に思い付いた解決策を投稿しました – user3673720

+0

はい、あなたの質問のコードサンプルの最初のものを選択しました。私のソリューションはあなたにすべてのインターフェイスを示し、あなたはそれらのインターフェイスの1つを選択することができました。ところで、あなたはあなたの答えを見つけました。それは重要なことです –

関連する問題