1

以下は、ローカル システムから IP アドレスとそのサブネット マスクのリストを作成するコードのセクションですが、警告機能が定期的にトリガーされるように見えますが、これは理論的には不可能なはずです。IPv4 アドレスを持つことはできないためです。関連するサブネット マスクなし[?]。

    static NetworkUtil()
    {
        foreach (NetworkInterface ni in NetworkInterface.GetAllNetworkInterfaces())
        {
            foreach (UnicastIPAddressInformation address in ni.GetIPProperties().UnicastAddresses)
            {
                if (address.Address.AddressFamily == AddressFamily.InterNetwork)
                {
                    if (address.IPv4Mask != null)
                    {
                        m_subnets.Add(address.Address, address.IPv4Mask);
                    }
                    else
                    {
                        m_log.Warn("[NetworkUtil] Found IPv4 Address without Subnet Mask!?");
                    }
                }
            }
        }
    }
4

4 に答える 4

1

これは、ループバックアダプタに遭遇したためです。つまり、127.0.0.1これらのIPv4Maskはnullに設定されています。私が正しいかどうかを確認するには、ni.Nameを参照してください。

ループバックアダプタを確認するには...

if(ni.NetworkInterfaceType!= NetworkInterfaceType.Loopback)..。

于 2010-10-05T13:29:52.293 に答える
0

それはかなり奇妙です。明らかに、これのセマンティクスは、合理的に期待できるものではありません。

問題のインターフェイスのサブネットマスクがクラスフルであるかどうかを確認できますか?つまり、nullのインターフェイスアドレスの場合IPv4Mask、ネットワークマスクがそれぞれ/ 8、/ 16、/ 24のクラスA、B、Cのアドレスですか?

おそらく、この関数は実際にはCIDRの世界のメンバーではなく、実際には「サブネット」マスクのみを実行します。アドレスがないアドレスは、クラスフルネットワークマスクを使用すると見なされます。

于 2009-05-23T09:14:59.947 に答える
0

私が出会った理由の1つは次のとおりです。

私は .NET Framework 4 Client プロファイルを使用しています。IPv4Mask は問題なく動作しました。.NET Framework 2 または 3.5 に切り替えると、NULL が返されました。問題を何度も再現しました。

于 2016-07-26T15:24:25.567 に答える