2014-07-01 81 views
2

我想修改我的項目在Linux中的DNS查找功能的行爲,通過設置它作爲測試在文件中寫入隨機字符串。修改gethostbyname(res_search)源代碼 - Linux的Ubuntu的14.04 LTS

Linux使用一些DNS解析器功能,主要是gethostbyname。展望未來,我發現解析器功能在庫中。於是,我下載了它,編譯生成了libresolv.so,libnss_dns.so動態庫。然後,我替換了我的系統上的現有的,位於/usr/lib/x86_64-linux-gnu/

注意:我發現這些庫是通過修改gethostbyname代碼並再次編譯來解決查詢的庫。然後,我看到了哪些動態庫改變了。

通過建立直接使用res_query的程序(解析器功能),並與-lresolv編譯,它的工作原理(我用LDD命令,它使用我創建的解析器庫)。但是,直接從代碼中使用gethostbyname,使用wget或瀏覽網頁我無法正確理解。

我在做什麼錯?

回答

2

我發現我應該怎麼辦:

首先調用的函數是不是的gethostbyname。它是_nss_dns_gethostbyname3_r,定義於resolv/nss_dns/dns-host.c。看看源代碼,我意識到這個函數調用另一個解析DNS名稱的方法,__libc_res_nsearch,在中定義resolv/res-query.c。所以這是功能!我在那裏添加了一些文件寫入命令,它像一個魅力一樣工作。我從C代碼調用它,使用gethostbyname,使用wget和Firefox,所有的工作。編譯代碼時,應該用新代碼替換系統的libresolv.so。

注:我的glibc版本是2.19。

我希望這可以幫助別人。

相關問題