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

在Linux C中检索DHCP分配的域后缀,第1张

概述我试图在ANSI C( Linux)中以编程方式检索我的主机的本地域后缀.例如:我的机器是ironside.0ffnet.net,我想检索“0ffnet.net”. 我已经看过很多帖子通过使用getnameinfo()和getaddrinfo()来解决这个问题,但是看起来这些函数从/ etc / hosts文件中提取了它们对于机器本地的任何接口地址的信息. 如果我的机器通过DHCP分配了一个地址( 我试图在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.netsearch 0ffnet.netnameserver 139.130.4.4

因此,getnameinfo()和getaddrinfo()只需使用/ etc / hosts信息返回机器的主机名,不带后缀,如下所示:

dfex@ironsIDe:~/hush$cat /etc/hosts::1             ironsIDe localhost6.localdomain6 localhost6127.0.1.1       ironsIDe127.0.0.1       localhost::1             localhost ip6-localhost ip6-loopback

有没有人知道一个函数会在不诉诸system()调用的情况下提取这些信息?我一直在梳理Beej的指南而没有太大的成功.

解决方法 我将不得不分开这个问题并单独回答这些部分.首先是标题问题.

DHCP域

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

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

主机可能属于多个域,或者没有,这使得这个定义难以理解. resolv.conf指定将搜索您要解析的主机名的域;应用于您自己的主机名时,没有基本保证搜索成功.

随你!解析器搜索列表是我真正想要的.我怎么得到它?

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

那么getdomainname()是什么?

这是NIS(YP),你可能不想要.

总结

以上是内存溢出为你收集整理的在Linux C中检索DHCP分配的域后缀全部内容,希望文章能够帮你解决在Linux C中检索DHCP分配的域后缀所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1047625.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存