2011-04-14 77 views
1

在我國衆多的環境中的服務器都有自己的環回線/etc/hosts配置,像這樣:屏蔽主機名在Linux /猛砸/ Perl的IP地址查找

127.0.0.1  mydevserver.testdomain.com mydevserver localhost.localdomain localhost 

通常情況下,這不是一個問題。但是,我們現在正在處理來自調用gethostbyaddr的供應商的一些外部軟件,如果hostname --ip-address的結果爲127.0.0.1,則其安裝程序將設計爲失敗。這當然會導致它在我們的系統上失敗,因爲服務器主機名在環回行/etc/hosts

我的問題是,如果我包安裝在bash或perl腳本,是有辦法「屏蔽」或臨時改變的hostname --ip-address結果不改變/ etc/hosts文件?

(澄清:他們呼籲從他們所編譯的二進制安裝程序中的gethostbyaddr()函數來命令行得到了類似的結果的方式是hostname --ip-address

+0

這樣的事情就是爲什麼使用127.0.1.1這樣的其他'127。*。*。*'地址並不少見的原因爲服務器的FQDN。我知道這不是你問的,所以我只是把它作爲評論加入,而不是回答。 – clacke 2013-11-25 10:16:24

回答

4

一種方式是寫自己的gethostbyaddr()功能,它編譯成一個庫(比如,libmyfunc.so),然後preload it in a wrapper script所以供應商的安裝程序使用它,而不是系統gethostbyaddr()

#!/bin/bash  
export LD_PRELOAD=libmyfunc.so 
export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH 

/path/to/crappy_vendor_binary [email protected] 
+0

這是一種醜陋的做法,但由於供應商軟件的醜陋,它可能是必需品。 – Eli 2011-04-23 19:02:29

1

寫自己實現hostname,做意料之中的事情,把它放在某個地方,在$PATH之前不改變那個目錄。

+0

謝謝,但他們從編譯後的二進制安裝程序中調用gethostbyaddr()函數。從命令行獲得類似結果的方式是**'hostname --ip-address' **。 – Eli 2011-04-14 00:31:28

1

如果真的調用了hostname命令,那麼沒有比這更容易的了:只需將它替換爲您自己的版本即可。

+0

謝謝,但他們從編譯後的二進制安裝程序中調用了gethostbyaddr()函數。從命令行獲得類似結果的方式是**'hostname --ip-address' **。 – Eli 2011-04-14 00:33:41

+0

@Eli,那麼你最好更新你的/ etc/hosts。我很確定你的練習沒有合理的理由,是嗎?由於這是一個安裝程序,臨時清理/ etc/hosts會執行。 – Ingo 2011-04-14 08:54:29

0

好,如果它是一個普通的BASH腳本,在「主機名」調用之前加上這個:
function hostname(){ echo -n; }