Windows

向 IP 地址設置添加數據驗證,以便在同一子網中配置 IP 地址時提示使用者

  • July 14, 2017

我應該向我的軟體 UI(IP 子網 UI)添加驗證,它允許使用者輸入一對 IP 地址和子網遮罩。我應該確保沒有在同一個子網中配置兩個網路介面。

我的理解是,如果我在 IP 地址和子網遮罩之間執行按位與運算,我將獲得一個網路 ID,如果 N/W ID 不同,是否足以聲稱兩個網路介面不在同一個子網中?

這個問題僅限於 IPV4。

您需要使用相同的網路遮罩屏蔽這兩個地址,以確定網路是否相同。您需要使用最短的網路遮罩進行比較。這是您確定兩個地址是否在同一個網路中的方式。

IPv4 和 IPv6 的過程完全相同,但地址和遮罩大小除外。

例如,10.0.0.0/25and10.0.0.64/26將返回具有最短遮罩 ( 255.255.255.128) 的同一網路,但將返回具有最長遮罩 ( 255.255.255.192) 的不同網路,即使第二個網路是第一個網路的子網,所以第二個網路中的任何地址都屬於第一個網路。

使用最短的遮罩:

      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

如您所見,只有使用最短遮罩的範例實際上返回了第二個地址在第一個地址的網路中的正確答案。

引用自:https://serverfault.com/questions/862249