作者 主題: 請教一個gethostbyname的用法  (閱讀 4407 次)

0 會員 與 1 訪客 正在閱讀本文。

unetin

  • 懷疑的國中生
  • **
  • 文章數: 72
    • 檢視個人資料
請教一個gethostbyname的用法
« 於: 2011-04-19 20:29 »
下面那段code是iptables處理FQDN的部份...
利用gethostbyname()取得IP...但我發現他無法得到所有www.facebook.com 的IP:

C:\Documents and Settings\>nslookup www.facebook.com
Server:  dns.hinet.net
Address:  168.95.1.1

Non-authoritative answer:
Name:    www.facebook.com
Address:  69.171.224.14

C:\Documents and Settings\>nslookup www.facebook.com
Server:  dns.hinet.net
Address:  168.95.1.1

Non-authoritative answer:
Name:    www.facebook.com
Address:  66.220.149.11

C:\Documents and Settings\>nslookup www.facebook.com
Server:  dns.hinet.net
Address:  168.95.1.1

Non-authoritative answer:
Name:    www.facebook.com
Address:  66.220.158.11


static struct in_addr *
host_to_addr(const char *name, unsigned int *naddr)
{
      struct hostent *host;
      struct in_addr *addr;
      unsigned int i;

      *naddr = 0;
      if ((host = gethostbyname(name)) != NULL) {
            if (host->h_addrtype != AF_INET ||
                host->h_length != sizeof(struct in_addr))
                  return (struct in_addr *) NULL;

            while (host->h_addr_list[*naddr] != (char *) NULL)
                  (*naddr)++;
            addr = fw_calloc(*naddr, sizeof(struct in_addr) * *naddr);
            for (i = 0; i < *naddr; i++)
                  inaddrcpy(&(addr),
                          (struct in_addr *) host->h_addr_list);
            return addr;
      }

      return (struct in_addr *) NULL;
}

請教如何用gethostbyname得到所有的解析IP? 或是有其他方法 ?