如何解析互联网地址?
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);
}
我有一个问题:如何将 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);
}