2012-05-08 25 views
0

複数のIPアドレスがPCに割り当てられている場合、つまりPCがマルチホームの場合、127.0.0.1ループバックアドレスを除いてどのようにデフォルトIPアドレスを取得できますか?PCに複数のIPアドレスが割り当てられている場合のデフォルトIPアドレスの取得方法

次のコードは、1つのPCで正しいデフォルトIPアドレスを返しますが、別のPCで不正なIPアドレスを返すため、他の解決策が必要です。

private string[] GetDefaultIPWithSubnet() 
    { 
     ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration"); 
     ManagementObjectCollection moc = mc.GetInstances(); 
     string[] ipSubnet = new string[2]; 
     foreach (ManagementObject mo in moc) 
     { 
      if ((bool)mo["IPEnabled"]) 
      { 
       try 
       { 
        string[] ips = (string[])mo["IPAddress"]; 
        string[] subnets = (string[])mo["IPSubnet"]; 
        ipSubnet[0] = ips[0].ToString(); 
        ipSubnet[1] = subnets[0].ToString(); 
        break; 
       } 
       catch (Exception ex) 
       { 
        return null; 
       } 
      } 
     } 
     return ipSubnet; 
    } 
+1

マシンのデフォルトIPアドレスの定義とは何ですか?私は127.0.0.1と言いますが、あなたは何か他のものが必要かもしれません... PS:これを見てみるといいかもしれません:http://msdn.microsoft.com/en-us/library/system.net.networkinformation.networkinterface .aspx –

+0

ここでは、127.0.0.1のループバックアドレスを除いてLAN /インターネットで使用しているものを示しました。 – Coder

+1

また、2つのネットワークインターフェイスがある場合は、サーバーマシンでは非常に一般的です。どちらがデフォルトのものですか?私は方向性であなたを指し示そうとしているので、そのようなことは理解できません。あなたはすべてのIPアドレスを取得し、あなたが興味を持っているものを見つけなければなりません。 –

答えて

0

私はあなたがTCP/IPがインターフェイス上で有効になっている場合は、パラメータがTRUEであることをIPEnabled、as far as I knowの意味を誤解だと思います。だから私はこれがあなたが探しているものだとは思わない。

2

私はあなたがデフォルトのルートとのインターフェイスを意味すると思います。 GetIpForwardTable機能を使ってIPv4ルートテーブルを取得することができます(クイックグーグルはp/invokeを通じて呼び出し可能であることを明らかにします)。0.0.0.0の宛先ルートを探します(コマンドラインでroute printを実行してルートテーブルの外観を確認します)。

4
public static void GetDefaultIp() 
{ 
    NetworkInterface[] adapters = NetworkInterface.GetAllNetworkInterfaces(); 
    foreach (NetworkInterface adapter in adapters) 
    { 
     if (adapter.OperationalStatus == OperationalStatus.Up && adapter.NetworkInterfaceType == NetworkInterfaceType.Ethernet) 
     { 
      IPInterfaceProperties properties = adapter.GetIPProperties(); 
      foreach (var x in properties.UnicastAddresses) 
      { 
       if (x.Address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork) 
        Console.WriteLine(" IPAddress ........ : {0:x}", x.Address.ToString()); 
      } 
     } 
    } 
} 
+0

これは、1つのIPアドレスが割り当てられた1つのネットワークカードを持っていると仮定した場合の良い例です。見た目もきれい。私はそれをアップヴォートする;) –

関連する問題