美文网首页
iOS 判断两个ip地址同一局域网

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

作者: 漂泊的掳人 | 来源:发表于2018-11-16 11:47 被阅读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;

    }

    相关文章

      网友评论

          本文标题:iOS 判断两个ip地址同一局域网

          本文链接:https://www.haomeiwen.com/subject/vnopfqtx.html