【发布时间】:2011-12-05 05:54:08
【问题描述】:
我正在尝试使用 getaddrinfo() 解析 URL 的 IP 地址,但它总是返回错误的 IP 地址,我尝试了多个 URL,结果是相同的。任何帮助将不胜感激。
程序返回IP地址:209.85.175.99 insted返回真实IP为74.125.39.147
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
int
main()
{
char *hostname = "www.google.lk";
struct addrinfo hints, *res;
struct in_addr addr;
int err;
memset(&hints, 0, sizeof(hints));
hints.ai_socktype = SOCK_STREAM;
hints.ai_family = AF_INET;
if ((err = getaddrinfo(hostname, NULL, &hints, &res)) != 0) {
printf("error %d\n", err);
return 1;
}
addr.s_addr = ((struct sockaddr_in *)(res->ai_addr))->sin_addr.s_addr;
printf("ip address : %s\n", inet_ntoa(addr));
freeaddrinfo(res);
return 0;
}
【问题讨论】:
-
您是否在使用某种代理?还是您的 etc/hosts 有问题?
-
你确定你弄错了吗? >nslookup www.google.lk 服务器:dir-320 地址:192.168.0.1 非权威答案:名称:www.l.google.com 地址:209.85.148.147 209.85.148.99 209.85.148.103 209.85.148.104 209.85.148.105 20 148.106 别名:www.google.lk www.google.com
-
也许您应该尝试使用比具有多层别名和循环解析的 Google 服务器具有更直接解析的名称。
stackoverflow.com怎么样? (Google 服务器名称的解析甚至取决于您解析它们的位置。) -
感谢您的帮助,我解决了问题,编码没有任何问题,我使用的 URL 是问题,因为七建议 stackoverflow.com 已正确解决。再次感谢。
-
虽然我可能会添加..... getaddrinfo() 返回地址的列表。查看手册页以获取有关如何迭代结果的示例。
标签: c sockets ip ip-address getaddrinfo