【发布时间】:2012-08-26 23:39:02
【问题描述】:
我正在尝试在 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
因此,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
有没有人知道一个函数可以在不使用 system() 调用的情况下提取这些信息?我一直在梳理 Beej 的指南,但没有取得多大成功。
【问题讨论】:
-
您可能必须进行适当的 DHCP 广播。实际协议见RFC2131。
标签: c linux dns network-programming