iOS 判断两个ip地址同一局域网

2018-11-16  本文已影响16人  漂泊的掳人

要判断两个IP地址是不是在同一个网段,就将它们的IP地址分别与子网掩码做与运算,得到的结果一网络号,如果网络号相同,就在同一子网,否则,不在同一子网。

例:假定选择了子网掩码255.255.254.0,现在分别将上述两个IP地址分别与掩码做与运算,如下图所示:

211.95.165.24 11010011 01011111 10100101 00011000

255.255.254.0 11111111 11111111 111111110 00000000

与的结果是: 11010011 01011111 10100100 00000000

211.95.164.78 11010011 01011111 10100100 01001110

255.255.254.0 11111111 11111111 111111110 00000000

与的结果是: 11010011 01011111 10100100 00000000

可以看出,得到的结果(这个结果就是网络地址)都是一样的,因此可以判断这两个IP地址在同一个子网。

参考:子网掩码之如何判断两个IP地址是否在同一网段

代码来实现其实就简单多了,不废话上代码:

//subnetMask可以是这两个ip其中一个的子网掩码

+(BOOL)isSameLANCompareTheIP:(NSString*)ip otherIP:(NSString*)otherIp withSubnetMask:(NSString*)subnetMask{

    NSArray  *ips = [ip componentsSeparatedByString:@"."];

    NSArray *otherIps = [otherIp componentsSeparatedByString:@"."];

    NSArray *subnetMasks = [subnetMask componentsSeparatedByString:@"."];

    BOOL isSame =YES;

    for(inti =0; i<4; i++) {

        int ippart = [ips[i] intValue];

        int otherIppart = [otherIps[i] intValue];

        int subnetMaskpart = [subnetMasks[i] intValue];

        int resultip = ippart&subnetMaskpart;

        int resultOtherIp = otherIppart&subnetMaskpart;

        if(resultip!=resultOtherIp) {

            isSame =NO;

            return isSame;

        }

    }

    return isSame;

}

上一篇下一篇

猜你喜欢

热点阅读