маскировка имени хоста для поиска IP-адреса в Linux / Bash / Perl

#linux #perl #bash #rhel5

#linux #perl #bash #rhel5

Вопрос:

Многие серверы в нашей среде имеют свою линию обратной связи в /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 )

Комментарии:

1. Подобные вещи являются причиной того, что нередко вместо полного доменного имени сервера используется какой-либо другой 127.*.*.* адрес, подобный 127.0.1.1 . Я знаю, что это не то, что вы спрашивали, поэтому я просто добавляю это как комментарий, а не ответ.

Ответ №1:

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

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

/path/to/crappy_vendor_binary $@
  

Комментарии:

1. Уродливый способ сделать это, но это может быть необходимостью из-за уродства программного обеспечения поставщика.

Ответ №2:

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

Комментарии:

1. Спасибо, но они вызывают функцию gethostbyaddr() из своего скомпилированного двоичного установщика. Способ получить аналогичный результат из командной строки hostname --ip-address .

Ответ №3:

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

Комментарии:

1. Спасибо, но они вызывают функцию gethostbyaddr() из своего скомпилированного двоичного установщика. Способ получить аналогичный результат из командной строки hostname --ip-address .

2. @Eli, тогда тебе лучше обновить свой /etc/ hosts. Я почти уверен, что для вашей практики нет рациональной причины, не так ли? Поскольку это установщик, подойдет временная очистка /etc/ hosts.

Ответ №4:

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