LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 2614|回复: 9

如何在程序中获取本机的DNS和IP?

[复制链接]
发表于 2005-10-1 18:21:46 | 显示全部楼层 |阅读模式
如题。好像不能用ioctl
发表于 2005-10-1 18:33:51 | 显示全部楼层
ifconfig
回复 支持 反对

使用道具 举报

发表于 2005-10-1 18:40:27 | 显示全部楼层
刚才我看错了,我刚从网上看了一点,在http://www.chinaunix.net/jh/23/161236.html
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-10-1 19:17:48 | 显示全部楼层
Post by wrzwin
刚才我看错了,我刚从网上看了一点,在http://www.chinaunix.net/jh/23/161236.html

谢谢,但我要的不是这个,本机的IP,MAC,MASK我都可以得到,但是DNS和GATE都不行。
这两个在ifconfig中也没有
回复 支持 反对

使用道具 举报

发表于 2005-10-1 22:24:37 | 显示全部楼层
楼主所指的DNS是什么?如果要用gethostbyname和gethostbyaddr解析本机的域名,则需要DNS服务的支持。不管这个服务是由本机还是由其它主机提供,如果DNS数据库中没有本机的域名的数据,就无法得到结果。
如果只是想要本机的域名,可以直接看配置文件/etc/hosts。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-10-1 23:09:22 | 显示全部楼层
Post by kj501
楼主所指的DNS是什么?如果要用gethostbyname和gethostbyaddr解析本机的域名,则需要DNS服务的支持。不管这个服务是由本机还是由其它主机提供,如果DNS数据库中没有本机的域名的数据,就无法得到结果。
如果只是想要本机的域名,可以直接看配置文件/etc/hosts。

本机的DNS。一定要读配置文件吗?难道没有函数可以实现?
回复 支持 反对

使用道具 举报

发表于 2005-10-2 11:28:27 | 显示全部楼层
sorry,我前面没有说清楚。
gethostbyname也可以使用/etc/hosts来作为域名解析的数据库。只要本机的域名在/etc/hosts中有,就可以用gethostbyname解析出来。
我贴一段代码,你可以试试:

  1. #include<netinet/in.h>
  2. #include<arpa/inet.h>
  3. #include<unistd.h>
  4. #include<netdb.h>
  5. #include<stdio.h>

  6. int main(int argc, char *argv[])
  7. {
  8.     char *host, **names, **addrs;
  9.     struct hostent *hostinfo;

  10.     if(argc == 1) {
  11.         char myname[256];
  12.         gethostname(myname, 255);
  13.         host = myname;
  14.     }
  15.     else
  16.         host = argv[1];

  17.     hostinfo = gethostbyname(host);
  18.     if(!hostinfo) {
  19.         fprintf(stderr, "cannot get info for host: %s\n", host);
  20.         exit(1);
  21.     }

  22.     printf("results for host %s\n", host);
  23.     printf("Name: %s\n", hostinfo->h_name);
  24.     printf("Aliases: ");
  25.     names = hostinfo->h_aliases;
  26.     while(*names) {
  27.         printf(" %s", *names);
  28.         names++;
  29.     }
  30.     printf("\n");

  31.     if(hostinfo->h_addrtype != AF_INET) {
  32.         fprintf(stderr, "not an ip host!");
  33.         exit(1);
  34.     }

  35.     addrs = hostinfo->h_addr_list;
  36.     while(*addrs) {
  37.         printf(" %s", inet_ntoa(*(struct in_addr *)*addrs));
  38.         addrs++;
  39.     }
  40.     printf("\n");
  41.     exit(0);
  42. }
复制代码

至于其它可以读取本机域名数据的函数,你可以man gethostent
回复 支持 反对

使用道具 举报

发表于 2005-10-2 13:00:44 | 显示全部楼层
他是要读取本机的dns设置和gw设置吧
gw在路由表里
dns嘛。。。我还不知
回复 支持 反对

使用道具 举报

发表于 2005-10-4 15:35:44 | 显示全部楼层
Post by bigben
本机的DNS。一定要读配置文件吗?难道没有函数可以实现?

好象没有,不过也不是很麻烦阿
回复 支持 反对

使用道具 举报

发表于 2005-10-4 20:16:08 | 显示全部楼层
Post by bigben
本机的DNS。一定要读配置文件吗?难道没有函数可以实现?

就是库函数也是读上文件吧
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表