[英]Compare two ip subnet
如何確定兩個IP是否在同一子網中? 唯一的輸入是IP地址和子網掩碼! 使用C / C ++來計算兩個IP是否具有相同子網的最佳方法是什么?
bool checkForSubnetEquality(in_addr_t ipA, in_addr_t ipB, uint32_t subnetMask) {
return (ipA & subnetMask) == (ipB & subnetMask);
}
typedef unsigned char BYTE;
Bool CheckForSubnetParity(
BYTE[] _In_ iPAddress1,
BYTE[] _In_ iPAddress2,
BYTE[] _In_ subNetMask
) {
BYTE[] NetworkPrefix1 = new BYTE[4];
BYTE[] NetWorkPrefix2 = new BYTE[4];
Bool Result = true;
for ( int x = 0; x < 4; x++)
{
NetworkPrefix1[x] = iPAddress1[x] && subNetMask[x];
NetworkPrefix2[x] = iPAddress2[x] && subNetMask[x];
if ( NetworkPrefix1[x] != NetworkPrefix2[x] )
{
Result = false;
}
}
return Result;
}
您可以使用兩個IP的掩碼對兩個IP進行“異或”運算,然后對其進行比較。 如果它們相同,則兩個IP地址都在同一子網中。
讓我們看一下172.16.2.4/255.255.0.0和172.16.1.69/255.255.0.0在“ xor”之后,兩個地址都將得到“ 172.16.0.0”,因此它們位於同一子網中。
問候。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.