【问题标题】:C# How to test if IPAddress is in a subnet?C#如何测试IPAddress是否在子网中?
【发布时间】:2012-01-01 00:42:02
【问题描述】:

好的,这是一个小问题......但仍然很烦人。

在 MSVS 2008 .NET 3.5 I IPAdress.Address 很长,我只是使用

if(subnet == subnetmask.Address & addr.Address) { ... }

然后我刚刚安装了 MSVS 2010,仍在使用 .NET 3.5,但不知何故它告诉我 IPAddress.Address 已过时。

我仍然可以在BitConverter.ToInt64(subnet.GetAddressBytes(), 0) 中包装一个 BitConvertor,但感觉就像我在倒退。是否有更优雅的方法或内置函数来检查子网?

谢谢。

【问题讨论】:

  • 这个问题已经问过几次了,下次请搜索。
  • @leppie:我找不到任何与过时标记和网络掩码/子网计算有关的重复问题。如果你能找到一个,请提出可能的重复。
  • 我搜索但找不到我需要的答案。我只是觉得我们没有设法维护子网掩码技术的精神和聪明,因为它似乎没有在 .NET 中实现。我希望我们不会在 for 循环中比较字节块。
  • @leppie 我已经看到了。我首先通过谷歌找到它,不满意,我来到 SO 并找到指向同一篇文章的帖子。该方法是否是唯一合理可行的方法并不是很明显。

标签: c# ip-address


【解决方案1】:

IPAddress.Address 被标记为过时的原因是:

此属性已被弃用。它取决于地址家庭。 请使用 IPAddress.Equals 方法进行比较。 http://go.microsoft.com/fwlink/?linkid=14202

随着 IPv6 的到来,依赖于 IPv4 的具体特性应该被认为已经过时了。您的解决方法有同样的问题 - 依赖于 IPv4。我认为你有两个选择:

  • 仅保留您的应用程序 IPv4 并取消过时警告。
  • 了解如何使该功能同时在 IPv6 和 IPv4 中工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-18
    • 2015-05-16
    • 2010-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-28
    • 1970-01-01
    相关资源
    最近更新 更多