2011-05-08 86 views
2

这是一个有点奇怪的问题,但我正在寻找一些C#代码,将采取以字符串形式提供一个IP地址,并返回到我这代表了另一串包含初始IP地址的IP地址范围。例如...C# - 新增和IP地址字符串减去创建范围

如果初始字符串为“192.168.1.150”,那么我需要生成具有值“192.168.1.149-192.168.1.151”一个新的字符串。

我知道我可以通过将“。”的起始字符串分开,然后将第4个数字转换为int,然后减去或添加它来实现此目的......但这似乎有点跛脚,而我希望有人可能有一个更优雅的解决方案:)

而且......我想这是支持IPv6地址了。

任何很酷的方法?谢谢。

回答

1

老实说,这听起来像是IPv4的最佳方式。获得第四个Octet(.150),转换为int,减1以获得范围的开始,添加一个获取范围的结束。它并没有比这更简单。至于IPv6,谷歌“在C#中添加十六进制数字”。

+1

虽然我不明白为什么你会想要一个和下一个IP地址 – Jack 2011-05-08 05:16:33

+0

感谢杰克。我正在解决一个需要将地址范围传递给API的错误,但不幸的是,API中的错误不允许该范围仅包含单个IP(即使单个IP只是所需的)。因此,我需要传递包含我实际需要的IP的最小范围。我希望能给出更多的问题背景:) – DaveUK 2011-05-09 05:00:05

0

在我看来,你必须分析地址4个字节类型变量,加上或减去值四分之一的人。但你可以把它放在优雅的课堂上。这将支持您应用中的所有IP地址相关功能。在DDD中,这种模式称为值对象。

+0

您是否有示例代码? – DaveUK 2011-05-09 04:57:51

0

你有没有意识到那是你要求的是不可能刚刚从单一的IP地址呢?你想找到
IP范围取决于几个参数:

  • 网络地址
  • 广播地址
  • 网络掩码

要实际检索网络范围内的IP地址属于,你会需要(如果我没有记错的话)至少有两个。具有网络地址和广播地址,网络范围很明显。具有网络地址和网络掩码,可以进行计算。如果你有IP地址和网络掩码,这也应该是可能的,但在这种情况下,你可能会得到不止一种可能的解决方案(取决于其他网络如何拆分 - 它们必须适合两个的权力,但是......)。

因此,向您提供这样的代码实际上是不可能的。

+0

我不明白为什么这是不可能的,只有一个地址。您所指的场景是根据网络/广播地址等计算完整范围的地址。这不是针对此问题所要求的。问题是简单地寻找包含给定地址的任何范围。在上面的例子中,你会看到范围最终只包含3个地址(* .149 - *。151)。 – DaveUK 2011-05-09 04:57:29

+0

有没有?只需取前三个字母并分别连接“.0.0.0”和“.255.255.255”。太宽泛?那么,你说过了。如果没有我提到的参数,你将不会知道IP所属的IP范围。 – 2011-05-09 09:11:29