本帖最后由 VisualEleven 于 2012-08-13 22:10:58 编辑

解决方案 »

  1.   

    那你得自己建立一个域名库了把你认为正确的域名放到这个容器(Vector之类的)中去。然后在gethostbyname之前把输入参数和容器中的内容做对比
      

  2.   

    ++
    这样了好了,不然你怎么知道到底DNS返回的是不是你想要的域名对应的IP呢?
      

  3.   

    还有其他的方法吗,因为建立我们也不知道别人会输入什么样的域名,如果用gethostbyaddr在得到主机名,然后再与输入的比较,这种方法可以吗
      

  4.   

    当然你也可以使用获得到的IP再去解析域名,看域名是否合适
    getnameinfo
    The getnameinfo function provides name resolution from an address to the host name. int getnameinfo(
      const struct sockaddr FAR *sa,
      socklen_t salen,
      char FAR *host,
      DWORD hostlen,
      char FAR *serv,
      DWORD servlen,
      int flags
    );
      

  5.   

    当然你也可以使用获得到的IP再去解析域名,看域名是否合适
    getnameinfo
    The getnameinfo function provides name resolution from an address to the host name. int getnameinfo(
      const struct sockaddr FAR *sa,
      socklen_t salen,
      char FAR *host,
      DWORD hostlen,
      char FAR *serv,
      DWORD servlen,
      int flags
    );
      

  6.   

    用getnameinfo函数总是返回失败,错误代码 11004,m_phostent = gethostbyname(szHostName);
    if(m_phostent == NULL)
    {
    return FALSE;
    }

    ///连接
    struct in_addr ip_addr;
    memcpy(&ip_addr,m_phostent->h_addr_list[0],4);///h_addr_list[0]里4个字节,每个字节8位

    struct sockaddr_in destaddr;
    memset((void *)&destaddr,0,sizeof(destaddr)); 
    destaddr.sin_family = AF_INET;
    destaddr.sin_port = htons(80);
    destaddr.sin_addr = ip_addr; ///保存主机的IP地址
    m_ipaddr[0] = (BYTE)destaddr.sin_addr.S_un.S_un_b.s_b1;
    m_ipaddr[1] = (BYTE)destaddr.sin_addr.S_un.S_un_b.s_b2;
    m_ipaddr[2] = (BYTE)destaddr.sin_addr.S_un.S_un_b.s_b3;
    m_ipaddr[3] = (BYTE)destaddr.sin_addr.S_un.S_un_b.s_b4; sockaddr_in saddr = destaddr; char host_name[NI_MAXHOST];
    if(getnameinfo((sockaddr *)&saddr,sizeof(sockaddr_in),host_name,NI_MAXHOST,NULL,0,NI_NAMEREQD) != 0)
    {
    CString csTemp;
    csTemp.Format(_T("%d"),WSAGetLastError());
    AfxMessageBox(csTemp);
    return FALSE;
    }
    hostent *hptr = gethostbyaddr(m_phostent->h_addr_list[0],4,AF_INET);
    if(hptr == NULL);
    {
    return FALSE;
    }
      

  7.   

    gethostbyname 有可能出现解析域名不成功,返回NULL,不建议用这个API