【问题标题】:getaddrinfo() function returns the wrong IP addressgetaddrinfo() 函数返回错误的 IP 地址
【发布时间】: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


【解决方案1】:

google.com 可以根据您自己的位置解析到不同的 IP 地址。这是一种负载平衡技巧。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-25
    • 1970-01-01
    • 2010-11-14
    • 2013-11-12
    相关资源
    最近更新 更多