【问题标题】:c# finding all private IP addresses between 172.16 and 172.31c# 查找 172.16 和 172.31 之间的所有私有 IP 地址
【发布时间】:2015-01-05 15:41:58
【问题描述】:

我正在尝试查找 IP 地址是否在 172.16.0.0 和 172.31.255.255(B 类)IP 内。如果是,则认为这是一个私人地址,因此对其进行处理。但我不能确定我所做的是否正确。我为实现这一目标所做的代码:

 // The requested IP
 System.Net.IPAddress IP = System.Net.Dns.GetHostAddresses(uri)[0];

 // Get the long values of the two IPs in question
 long startIP = System.Net.IPAddress.Parse("172.16").Address;
 long EndIP = System.Net.IPAddress.Parse("172.31").Address;

 if (IP.Address >= startIP && IP.Address <= EndIP)
 {
    // OK the requested domain is an internal one so lets return this..
    return true
 }

由于我没有 172. 域,因此我无法真正对此进行测试。所以我希望你能理解我为什么问这个问题。

谢谢

【问题讨论】:

  • 为什么需要一个 172 的“域”来测试这个?
  • 编写单元测试...问题解决了。
  • 为了使其可测试,将startIPEndIP 值传递到方法中/否则可配置。在您拥有的 IP 范围内对其进行测试,然后在完成测试后将其设置为“生产”值。
  • 如果您只需要知道是否正常工作,您可以使用您机器中实际拥有的范围临时更改 IP 范围...
  • 问:EndIP 不应该是System.Net.IPAddress.Parse("172.32") 并使用&lt; EndIP 进行测试吗?

标签: c# ip-address


【解决方案1】:

我认为检查单个字节会更容易:

    System.Net.IPAddress ipAddress = System.Net.Dns.GetHostAddresses("www.google.be")[0];
    byte[] addressBytes = ipAddress.GetAddressBytes();
    if (addressBytes[0] == 127
        && addressBytes[1] >= 16
        && addressBytes[1] <= 31)
    {
      // found
    }

【讨论】:

  • 是的,这更优雅,看起来更可靠。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-06
  • 2017-06-14
  • 2019-07-13
  • 2012-11-28
  • 2010-09-10
相关资源
最近更新 更多