【问题标题】:Modifying gethostbyname (res_search) source code - Linux Ubuntu 14.04 LTS修改 gethostbyname (res_search) 源代码 - Linux Ubuntu 14.04 LTS
【发布时间】:2014-08-22 06:47:46
【问题描述】:

我正在尝试为我的项目修改 Linux 中 DNS 查找函数的行为,方法是将其设置为在文件中写入随机字符串作为测试。

Linux 使用一些 DNS 解析器功能,主要是 gethostbyname。展望未来,我发现解析器函数位于 glibc6 库中。于是,我下载了它,编译,生成了libresolv.solibnss_dns.so动态库。然后,我替换了系统上现有的 /usr/lib/x86_64-linux-gnu/

注意:我发现这些库是通过修改 gethostbyname 代码并再次编译来解决查询的。然后,我看到了哪些动态库发生了变化。

通过创建一个直接使用 res_query 的程序(解析器函数)并使用 -lresolv 进行编译,它可以工作(我使用了 ldd 命令它使用我创建的解析器库)。但是,直接从代码中使用 gethostbyname、使用 wget 或浏览网页我无法正确处理。

我做错了什么?

【问题讨论】:

    标签: linux gethostbyname


    【解决方案1】:

    我发现我应该怎么做:

    首先,调用的函数不是gethostbyname。它是 _nss_dns_gethostbyname3_r,在 resolv/nss_dns/dns-host.c 中定义。查看源代码,我意识到这个函数调用了另一个解析 DNS 名称的函数,__libc_res_nsearch,在 resolv/res-query.c 中定义。所以这就是功能!我在那里添加了一些文件写入命令,它就像一个魅力。我使用 gethostbyname 从 C 代码调用它,使用 wget 和 Firefox,一切正常。编译代码时,应将系统的 libresolv.so 替换为新的。

    注意:我的 glibc 版本是 2.19。

    我希望这对某人有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-01
      • 2015-05-31
      相关资源
      最近更新 更多