0

とりわけシステム情報を収集するプログラムを作成しています。ただし、サブネット マスクの取得に問題があります。私はプログラミングに慣れていないので、これはおそらく私のスキル不足に関連しています。私のコードは次のようになります。

public string Subnet()
{
     string Maske = "";
     foreach (NetworkInterface f in NetworkInterface.GetAllNetworkInterfaces())
     if (f.OperationalStatus == OperationalStatus.Up)
     {
         IPInterfaceProperties ipInterface = f.GetIPProperties();
         foreach (UnicastIPAddressInformation unicastAddress in ipInterface.UnicastAddresses)
         {
             Maske = unicastAddress.IPv4Mask.ToString();
         }
     }
     return Maske;
}

結果として 255.0.0.0 しか得られません。他のネットワーク カードを無効にするかアンインストールしましたが、それでもこの結果が得られます。

4

1 に答える 1

1

ipInterface.UnicastAddresses または NetworkInterface.GetAllNetworkInterfaces() に複数のエントリがある可能性があることを認識していますか? あなたのメソッドは、最後に見つかったものだけを取ります。あなたの方法を自分の PC でテストしたところ、リストには 255.255.255.0、0.0.0.0、255.0.0.0 の 3 つのエントリが含まれていました。

編集:いくつかの仮想ソフトウェアインターフェイスがインストールされている場合があるため、NetworkInterfaceTypeループバックでネットワークインターフェイスを無視する必要がある場合があります...

if (f.OperationalStatus == OperationalStatus.Up && f.NetworkInterfaceType != NetworkInterfaceType.Loopback)
于 2014-07-11T06:36:58.230 に答える