将数据validation添加到IP地址设置,以便在IP地址configuration在同一子网中时提示用户

我应该添加validation到我的软件用户界面( IP子网用户界面 ),允许用户input一对IP地址和子网掩码。 我应该确保两个networking接口没有configuration在同一个子网中。

我的理解是,如果我在IP地址和子网掩码之间执行一个按位与,我将得到一个networkingID,如果N / W ID不相同,是否足以声称两个networking接口不在同一个子网中?

这个问题仅限于IPV4。

您需要使用相同的networking掩码来屏蔽这两个地址,以确定networking是否相同。 您需要使用最短的networking掩码进行比较。 这是你如何确定两个地址是否在同一个networking。

IPv4和IPv6的过程完全相同,地址和掩码大小除外。

例如, 10.0.0.0/2510.0.0.64/26将以最短掩码( 255.255.255.128 )重新运行同一networking,但将返回具有最长掩码( 255.255.255.192 )的不同networking,即使第二个networking是第一个networking的子网,所以第二个networking中的任何地址都落入第一个networking。

用最短的面具:

  10.0.0.0 -> 00001010000000000000000000000000 255.255.255.128 -> 11111111111111111111111110000000 AND -> ================================ 00001010000000000000000000000000 = 10.0.0.0 10.0.0.64 -> 00001010000000000000000001000000 255.255.255.128 -> 11111111111111111111111110000000 AND -> ================================ 00001010000000000000000000000000 = 10.0.0.0 

用最长的面具:

  10.0.0.0 -> 00001010000000000000000000000000 255.255.255.192 -> 11111111111111111111111111000000 AND -> ================================ 00001010000000000000000000000000 = 10.0.0.0 10.0.0.64 -> 00001010000000000000000001000000 255.255.255.192 -> 11111111111111111111111111000000 AND -> ================================ 00001010000000000000000001000000 = 10.0.0.64 

使用指定的掩码:

  10.0.0.0 -> 00001010000000000000000000000000 255.255.255.128 -> 11111111111111111111111110000000 AND -> ================================ 00001010000000000000000000000000 = 10.0.0.0 10.0.0.64 -> 00001010000000000000000001000000 255.255.255.192 -> 11111111111111111111111111000000 AND -> ================================ 00001010000000000000000001000000 = 10.0.0.64 

正如你所看到的,只有使用最短掩码的例子实际上返回了第二个地址在第一个地址的networking中的正确答案。

首先,你真的只需要一个子网掩码条目,因为如果它们有两个不同的掩码,它们不应该放在同一个子网中。 但是,除此之外,是的,你和面具的地址,如果你得到相同的结果,他们在同一个子网。