How to perform DNS query on iOS

后端 未结 2 708
暗喜
暗喜 2020-12-01 01:36

i want to perform some DNS queries e.g. to get IP records against a specific domain name, i am looking for a preferred way or some useful snippet for this on iOS 3.2+ SDK. t

相关标签:
2条回答
  • 2020-12-01 02:08

    Figured out a change in this snippet makes it working

    if (result == TRUE) {
            NSMutableArray *tempDNS = [[NSMutableArray alloc] init];
            for(int i = 0; i < CFArrayGetCount(addresses); i++){
                struct sockaddr_in* remoteAddr;
                CFDataRef saData = (CFDataRef)CFArrayGetValueAtIndex(addresses, i);
                remoteAddr = (struct sockaddr_in*)CFDataGetBytePtr(saData);
    
                if(remoteAddr != NULL){
                    // Extract the ip address
                    //const char *strIP41 = inet_ntoa(remoteAddr->sin_addr);
                    NSString *strDNS =[NSString stringWithCString:inet_ntoa(remoteAddr->sin_addr) encoding:NSASCIIStringEncoding];
                    NSLog(@"RESOLVED %d:<%@>", i, strDNS);
                    [tempDNS addObject:strDNS];
                }
            }
    }
    
    0 讨论(0)
  • 2020-12-01 02:26

    Bros there is a lot simpler way! Thanks to iOS being a unix system, you become a god with unlimited power and resource! I present elegance.

    - (NSString*)lookupHostIPAddressForURL:(NSURL*)url
    {
        // Ask the unix subsytem to query the DNS
        struct hostent *remoteHostEnt = gethostbyname([[url host] UTF8String]);
        // Get address info from host entry
        struct in_addr *remoteInAddr = (struct in_addr *) remoteHostEnt->h_addr_list[0];
        // Convert numeric addr to ASCII string
        char *sRemoteInAddr = inet_ntoa(*remoteInAddr);
        // hostIP
        NSString* hostIP = [NSString stringWithUTF8String:sRemoteInAddr];
        return hostIP;
    }
    
    0 讨论(0)
提交回复
热议问题