gpt4 book ai didi

c++ - 以编程方式获取环回接口(interface)/C++

转载 作者:行者123 更新时间:2023-11-28 06:40:41 25 4
gpt4 key购买 nike

我需要能够从我的程序中获取环回接口(interface)。我正在写一个 dns 解析器,但我不能直接接触 etc/hosts。例如,如果有人向我发送“localhost”,我需要解析为“127.0.0.1”或“::1”。如果我还可以检测到人们自己设置的自定义环回接口(interface),那将是一个奖励,尽管这不是强制性的。有什么方法可以查看环回地址是“127.0.0.1”还是“::1”。

非常具体的问题。提前致谢。

最佳答案

这里有两个不同的问题。

1) “localhost”这个名字没有什么特别之处。 “localhost”起作用的原因是因为大多数正确配置的 DNS 区域都包含一个“localhost”的显式条目。如果查找了不合格的主机名,DNS 解析器会自动尝试附加在/etc/resolv.conf 的“搜索”目录中给出的域。典型主机的/etc/resolv.conf 文件将包含

search example.com
nameserver 192.168.0.1
nameserver 192.168.1.1

因此,对“localhost”的 DNS 查找将使本地解析器尝试解析“localhost.example.com”,并且 example.com 的区域文件将具有显式条目

$ORIGIN example.com
@ IN SOA ns1.example.com. ((the rest of the SOA record

...

localhost A 127.0.0.1

2) 现在,关于本地网络接口(interface),它取决于您未指定的平台。它在 BSD 和 Linux 上以不同的方式完成,我希望在 MS-Windows 上以完全不同的方式完成。

假设您指的是 Linux,getifaddrs(3) 返回本地网络接口(interface)列表 - http://manpages.courier-mta.org/htmlman3/getifaddrs.3.html

它的 flags 结构成员,如文档所示包含来自 SIOCGIFFLAGS ioctl 的标志,如 netdevice(7) - http://manpages.courier-mta.org/htmlman7/netdevice.7.html 中所述

如文档所述,IFF_LOOPBACK 标志标记环回接口(interface),您可以从相同的结构中获取它们的 IP 地址。

但是,正如我所指出的,如果您所做的只是编写一个解析器,那么弄清楚环回接口(interface)就完全超出了您的范围。站点管理员在区域文件中指定了环回接口(interface)的IP地址,您不必担心。

关于c++ - 以编程方式获取环回接口(interface)/C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26028898/

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