在Linux中,哪个程序负责DNS查找?

时间:2013-05-27 18:33:36

标签: networking dns protocols

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

我可以轻松地在C中为这个服务器编写一个客户端,它可能会将主机名作为参数并打印出一个IP(或类似的东西)

我真正的问题是在Linux场景中,哪一段代码最终负责查找。该程序如何运作?使用自定义“玩具”客户端(当然是在虚拟机中)覆盖此程序是否微不足道?

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

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

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

1 个答案:

答案 0 :(得分:2)

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

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

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