gpt4 book ai didi

c - 在 Linux C 中检索 DHCP 分配的域后缀

转载 作者:IT王子 更新时间:2023-10-29 00:34:01 28 4
gpt4 key购买 nike

我正在尝试在 ANSI C (Linux) 中以编程方式检索主机的本地域后缀。例如:我的机器是 ironside.0ffnet.net,我想检索“0ffnet.net”。

我已经看到许多帖子通过使用 getnameinfo() 和 getaddrinfo() 来解决这个问题,但是这些函数似乎从/etc/hosts 文件中提取机器本地接口(interface)地址的信息。

如果我的机器通过 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域

真正了解 DHCP 客户端从 DHCP 服务器接收到什么的唯一方法是读取客户端留在 /var/lib/dh​​cp 中的文件。如果其他东西控制了 resolv.conf,则 DHCP 建议的搜索域可能根本不会被使用。

“我的主机的本地域名后缀”

主机可能属于多个域,也可能不属于任何域,这使得这是一个很难定义的概念。 resolv.conf 指定将搜索您正在解析的主机名的域;当应用于您的自己的主机名时,并不能从根本上保证搜索会成功。

随便!解析器搜索列表是我真正想要的。我如何获得它?

调用 res_init 然后查看 _res.dnsrch 和/或 _res.defdname。或者自己解析resolv.conf;这是一种非常简单和稳定的格式。

那么 getdomainname() 是做什么用的呢?

它适用于 NIS(YP),您可能不想要它。

关于c - 在 Linux C 中检索 DHCP 分配的域后缀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12227438/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com