当前位置: 移动技术网 > 移动技术>移动开发>IOS > iOS判断连接的是内网还是外网

iOS判断连接的是内网还是外网

2018年02月04日  | 移动技术网移动技术  | 我要评论

ios判断自己连接的网络是内网还是外网

//判断连接的服务器相对于本机为内网还是外网
+(int)isInnerIP:(NSString *)hostName
{
    BOOL bValid = false;
    bool _isInnerIp = false;
    //NSString to char*
    const char *webSite = [hostName cStringUsingEncoding:NSASCIIStringEncoding];
    if (webSite == NULL) {
        return -1;
    }
    // Get host entry info for given host
    struct hostent *remoteHostEnt = gethostbyname(webSite);
    if (remoteHostEnt == NULL) {
        return -1;
    }
    // Get address info from host entry
    struct in_addr *remoteInAddr = (struct in_addr *) remoteHostEnt->h_addr_list[0];
    if (remoteInAddr == NULL) {
        return -1;
    }
    // Convert numeric addr to ASCII string
    char *sRemoteInAddr = inet_ntoa(*remoteInAddr);
    if (sRemoteInAddr == NULL) {
        return -1;
    }
    DebugLog(@"sRemoteInAddr:%s", sRemoteInAddr);
    unsigned int ipNum = str2intIP(sRemoteInAddr);

    unsigned int aBegin = str2intIP("10.0.0.0");
    unsigned int aEnd = str2intIP("10.255.255.255");
    unsigned int bBegin = str2intIP("172.16.0.0");
    unsigned int bEnd = str2intIP("172.31.255.255");
    unsigned int cBegin = str2intIP("192.168.0.0");
    unsigned int cEnd = str2intIP("192.168.255.255");
    DebugLog(@"ipNum:%u", ipNum);
    _isInnerIp = IsInner(ipNum, aBegin, aEnd) || IsInner(ipNum, bBegin, bEnd) || IsInner(ipNum, cBegin, cEnd);
    if(_isInnerIp)  //( (a_ip>>24 == 0xa) || (a_ip>>16 == 0xc0a8) || (a_ip>>22 == 0x2b0) )
    {
        bValid = 0;//内网
    }else{
        bValid = 1;//外网
    }
    return bValid;
}
unsigned int str2intIP(char* strip) //return int ip
{
    unsigned int intIP;
    if(!(intIP = inet_addr(strip)))
    {
        perror("inet_addr failed./n");
        return -1;
    }
    return ntohl(intIP);
}

bool IsInner(unsigned int userIp, unsigned int begin, unsigned int end)
{
    return (userIp >= begin) && (userIp <= end);
}

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网