0

作为测试我对 DNS 的一些想法的一种方式,我编写了一个非常简单的服务器,它基本上通过响应键值对来模拟类似 DNS 的行为。

我可以很容易地用 C 语言编写一个客户端到这个服务器,它可能会接受一个主机名作为参数并打印出一个 IP(或类似的东西)

我真正的问题是在 linux 场景中,哪段代码最终负责查找。这个程序是如何运作的?用自定义的“玩具”客户端(当然是在虚拟机中)覆盖这个程序会很简单吗?

当然,这都是理论上的,我没有在虚拟机之外使用它的计划,更重要的是,我不想实现默认的 DNS 协议(所以只需将 DNS 服务器设置设置为 localhost 或 127.0.0.1对我没用)

关于我想实现的行为类型的一些示例代码(伪)

int main(int argc, char** argv){
    if(strcmp(argv[0], "localhost") == 0){
           printf("127.0.0.1");
    }
    return 0;
}
4

1 回答 1

2

负责执行名称查找的东西不是这样的程序,而是一个库:名称服务开关,它是 libc 的一个组件。

名称服务交换机支持可插拔的后端模块,因此如果您不想使用 DNS,可以编写自己的名称服务交换机 (NSS) 后端。在 Linux 和 glibc 下,NSS 后端模块的名称类似于/lib/nss_<name>.so.2. 您配置 NSS 以通过编辑告诉它您要使用的后端/etc/nsswitch.conf。通常有两个后端用于主机:(files在 中查找名称/etc/hosts)和dns(在 DNS 中查找名称)。

在glibc 的手册中有一些关于如何编写 NSS 模块的非常少的文档,但可能会找到更好的教程。

于 2013-05-28T00:51:16.940 回答