在linux中获取域名(C编程)

时间:2009-11-02 21:52:12

标签: c linux

除了getdomainname()之外,还有什么方法可以在Linux上获取域名而无需在/ etc中打开和解析文件?

感谢代码。

由于

3 个答案:

答案 0 :(得分:2)

尝试以下方法:

#include <string.h>
#include <netdb.h>
#include <unistd.h>
#include <stdio.h>

int main(int argc, char* argv[])
{
  char hn[254];
  char *dn;
  struct hostent *hp;

  gethostname(hn, 254);
  hp = gethostbyname(hn);
  dn = strchr(hp->h_name, '.');
  if ( dn != NULL ) {
    printf("%s\n", ++dn);
  }
  else {
    printf("No domain name available through gethostbyname().\n");
  }

  return 0;
}

似乎getdomainname()只会告诉你一个NIS或YP域名,你可能不会设置它。另一方面,使用gethostbyname()查询完整主机名,检查各种不同的源(包括DNS和/ etc / hosts)以确定您的规范主机名。

答案 1 :(得分:0)

为了将来参考,Linux和其他一些系统有一个getdomainname() function可以做你想要的,尽管这是not part of the POSIX standard

答案 2 :(得分:0)

#include <stdio.h>
#include <netdb.h>
#include <sys/socket.h>
#include <arpa/inet.h>
int main(int argc, char *argv[])
{
    int i;
    struct hostent *he;
    struct in_addr **addr_list;
    if (argc != 2) {
        fprintf(stderr,"usage: ghbn hostname\n");
        return 1;
    }
    if ((he = gethostbyname(argv[1])) == NULL) {
        herror("gethostbyname");
        return 2;
    }
    printf("domain name is: %s\n", he->h_name);
    printf("    IP addresses: ");
    addr_list = (struct in_addr **)he->h_addr_list;
    for(i = 0; addr_list[i] != NULL; i++) {
        printf("%s ", inet_ntoa(*addr_list[i]));
    }
    printf("\n");
    return 0;
}

run command:

gcc -o test test.c
./test www.google.com

Output:
domain name is: google.com
IP addresses: 172.217.163.110