Маскировка имени хоста для поиска IP-адреса в Linux / Bash / Perl - PullRequest
1 голос
/ 14 апреля 2011

Многие серверы в нашей среде имеют свою линию обратной связи в /etc/hosts, настроенную так:

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)

Ответы [ 4 ]

4 голосов
/ 14 апреля 2011

Один из способов - написать собственную функцию gethostbyaddr(), скомпилировать ее в библиотеку (скажем, libmyfunc.so), а затем предварительно загрузить ее в сценарий оболочки , чтобы установщик поставщика использовал ее вместосистема gethostbyaddr():

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

/path/to/crappy_vendor_binary $@
1 голос
/ 14 апреля 2011

Если действительно вызвать команду hostname, то нет ничего проще: просто замените ее своей версией.

1 голос
/ 14 апреля 2011

Напишите свою собственную реализацию hostname, которая делает ожидаемое, поместите ее куда-нибудь, отмените этот каталог до $PATH.

0 голосов
/ 14 апреля 2011

хорошо, если это простой BASH-скрипт, добавьте его перед вызовом «hostname»:
function hostname(){ echo -n; }

...