Ben*_*ale 7 c linux dns network-programming
我试图在ANSI C(Linux)中以编程方式检索我的主机的本地域后缀.例如:我的机器是ironside.0ffnet.net,我想检索"0ffnet.net".
我已经看过许多帖子通过使用getnameinfo()和getaddrinfo()来解决这个问题,但是看起来这些函数从/ etc/hosts文件中提取了它们对于机器本地的任何接口地址的信息.
如果我的机器通过DHCP分配了一个地址(和相应的域后缀),则/ etc/hosts文件不会更新,而是将此信息存储在/etc/resolv.conf中,例如:
dfex@ironside:~/hush$cat /etc/resolv.conf
domain 0ffnet.net
search 0ffnet.net
nameserver 139.130.4.4
Run Code Online (Sandbox Code Playgroud)
因此,getnameinfo()和getaddrinfo()只需使用/ etc/hosts信息返回机器的主机名,不带后缀,如下所示:
dfex@ironside:~/hush$ cat /etc/hosts
::1 ironside localhost6.localdomain6 localhost6
127.0.1.1 ironside
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
Run Code Online (Sandbox Code Playgroud)
有没有人知道一个函数会在不诉诸system()调用的情况下获取这些信息?我一直在梳理Beej的指南而没有太大的成功.
我将不得不分解这个问题并分别回答各个部分。首先是标题问题。
真正了解 DHCP 客户端从 DHCP 服务器接收到的内容的唯一方法是读取客户端留下的文件/var/lib/dhcp
。如果其他东西已控制 .DHCP 建议的搜索域,则可能根本不会使用resolv.conf
。
主机可能属于多个域,也可能不属于任何一个域,这使得这个概念很难定义。resolv.conf
指定将搜索您正在解析的主机名的域;当应用于您自己的主机名时,并不能从根本上保证搜索会成功。
打电话res_init
,然后查看_res.dnsrch
和/或_res.defdname
。或者解析resolv.conf
你自己;这是一种非常简单且稳定的格式。
这是用于 NIS(YP) 的,您可能不想要它。