如何解析互联网地址?

How to resolve an internet address?

我有一个问题:如何将 IP 地址(如 www.google.com)转换(解析)为 IP 地址(字节数组)?我尝试了不同的代码,但每次如果地址不存在,代码就会崩溃。还有办法检查这个吗?

+ (void) resolveIPAddress: (NSString*) dnsAddress {
    struct hostent hostentry;
    const char str = [ dnsAddress UTF8String ];
    hostentry = gethostbyname(str);
    char ipbuf[4];
    char *ipbuf_ptr = &ipbuf[0];
    ipbuf_ptr = inet_ntoa(*((struct in_addr *)hostentry->h_addr_list[0]));
    printf("%s",ipbuf_ptr);
}

问题是您的方法尝试使用 gethostbyname 的结果而不检查 h_errno。当 h_errno 非零时, hostentry 中的结果无效。在 inet_ntoa 中取消引用它们会导致崩溃。

+ (void) resolveIPAddress: (NSString*) dnsAddress {
    struct hostent hostentry;
    const char str = [ dnsAddress UTF8String ];
    hostentry = gethostbyname(str);
    if (h_errno) {
        NSLog(@"Error resolving host: %d", h_errno);
        return;
    }
    char ipbuf[4];
    char *ipbuf_ptr = &ipbuf[0];
    ipbuf_ptr = inet_ntoa(*((struct in_addr *)hostentry->h_addr_list[0]));
    printf("%s",ipbuf_ptr);
}