我试图通过将其设置为在文件中编写随机字符串作为测试来修改Linux中的DNS查找功能的行为。
Linux使用一些DNS解析器功能,主要是 gethostbyname 。展望未来,我发现解析器功能在 glibc6 库中。所以,我下载它,编译,生成 libresolv.so , libnss_dns.so 动态库。然后,我在我的系统上替换了现有的 / usr / lib / x86_64-linux-gnu / 。
注意:我发现这些库是通过修改 gethostbyname 代码并再次编译来解析查询的库。然后,我看到了哪些动态库发生了变化。
通过创建直接使用 res_query (解析器函数)并使用 -lresolv 进行编译的程序,它可以正常工作(我使用 ldd 命令它使用我创建的解析器库)。但是,直接在代码中使用 gethostbyname ,使用 wget 或浏览网页我无法做到正确。
我做错了什么?
答案 0 :(得分:2)
我发现我该怎么做:
首先,名为isn' t gethostbyname 的函数。它是 _nss_dns_gethostbyname3_r ,在 resolv / nss_dns / dns-host.c 中定义。查看源代码,我意识到此函数调用另一个函数来解析 resolv / res-query.c 中定义的DNS名称 __ libc_res_nsearch 。所以这就是功能!我在那里添加了一些文件写入命令,它就像一个魅力。我使用 gethostbyname 从C代码调用它,使用 wget 和Firefox,都可以使用。编译代码时,应该用新的代替系统的libresolv.so。
注意:我的glibc版本是2.19。
我希望这有助于某人。