关于gethostbyname的一个疑问
为什么用这个函数得到的  ip有时候不对  比如用 www.sina.com 就不对。。。显示中搜公司还有 用 baidu.com  和www.baidu.com也不一样 后者是北京市 百度蜘蛛  前者是百度公司
(我每次都是 用 ip网站查的,来进行比对)
具体代码如下
#include<netdb.h>
#include<sys/socket.h>
#include<stdio.h>
int main(int argc,char ** argv)
{
    struct hostent * phost;
    char *hostname=argv[1];
    char *h_name;
    char  **aliases;
    char ** ip_addr;
    int iptype;
    char   str[32];  
    int counter=1;
    if((phost=gethostbyname(hostname))==NULL){    //get pointer of host
     printf("no such name \n");
    }
    printf("standard name------>%s\n\n",phost->h_name);//official name
    for(aliases=phost->h_aliases;*aliases!=NULL;aliases++)
    {  
       printf("its aliases name---->%s\n\n",*aliases);  // alaises  
    }     
    if(phost->h_addrtype==AF_INET)   // type of ip
    {  
      printf("IPTYPE------->      IPV4\n\n");
    }
    else if(phost->h_addrtype==AF_INET6)
    {  
        printf("IPTYPE------->      IPV6\n\n");
    }
     printf("the address lenght--->%d\n\n",phost->h_length);  //length of ip     
    ip_addr=phost->h_addr_list;          //ip address
    while( *ip_addr!=NULL)
    {
      printf("the %d th address ----->%s\n\n",counter,inet_ntop(phost->h_addrtype,*ip_addr,str,sizeof(str)));
      counter++;
      ip_addr++;
    }
}  
------解决方案--------------------就是说这些大网站一般都不只一个服务器,也不只一个IP地址
会根据你的位置选择一个离你近,延迟小的服务器
所以得到不一样的IP地址也是正常的
------解决方案--------------------同一Domain可能对应多个IP,逐个解析
------解决方案--------------------
[code=C/C++][/code]
   #define DEF_SERV_NAME "domain"
  #define DEF_SERV_PROTO "udp"
  #define DEF_SERV_PORT 53  
  int main(int argc, char *argv[])
  {
   unsigned char ans[ANS_LEN];
   int len, i;
   ns_msg ns;
   ns_rr rr;
   in_addr in;
   struct servent *se;  
   if (argc < 2)
   {
   printf("%s domain_name\n", argv[0]);
   exit(0);  
   }  
   setservent(0);
   se = getservbyname(DEF_SERV_NAME, DEF_SERV_PROTO);//解析/etc/services
   if (res_init())
   {
   herror("res_init()");
   exit(-1);
   }  
   if (se)
   {
   _res.nsaddr.sin_port = se->s_port ?: htons(DEF_SERV_PORT);
   if (strcasecmp(se->s_proto, DEF_SERV_PROTO))
   {
   _res.options |= RES_USEVC;//使用TCP而非UDP协议
   }
   }  
   if ((len = res_query(argv[1], ns_c_in, ns_t_a, ans, ANS_LEN)) < 0)
   {
   herror("res_query()");
   exit(-1);
   }  
   if (ns_initparse(ans, len, &ns))
   {
   herror("ns_initparse()");
   exit(-1);  
   }
   //同一Domain可能对应多個IP,逐个解析
   for (i = 0; i < ns_msg_count(ns, ns_s_an); i++)
   {
   if (ns_parserr(&ns, ns_s_an, i, &rr))
   {
   herror("ns_parserr()");
   exit(-1);
   }  
   if (ns_rr_type(rr) == ns_t_a)
   {
   printf("name:%s\n", ns_rr_name(rr));
   in.s_addr = htonl(ns_get32(ns_rr_rdata(rr)));
   printf("ip:%s\n", inet_ntoa(in));
   }
   }
   return 0;
  }
------解决方案-----------