Além dos truques do LD_PRELOAD. Uma alternativa simples, se você não estiver usando nscd , é copiar libnss_files.so para algum local como:
mkdir -p -- ~/lib &&
cp /lib/x86_64-linux-gnu/libnss_files.so.2 ~/lib
Edite binária a cópia para substituir /etc/hosts para algo do mesmo tamanho, como /tmp/hosts .
perl -pi -e 's:/etc/hosts:/tmp/hosts:g' ~/lib/libnss_files.so.2
Edite /tmp/hosts para adicionar a entrada desejada. E use
export LD_LIBRARY_PATH=~/lib
para nss_files procurar em /tmp/hosts em vez de /etc/hosts .
Em vez de /tmp/hosts , você também pode usar /dev/fd//3 e fazer
exec 3< ~/hosts
Por exemplo, o que permitiria que comandos diferentes usassem arquivos hosts diferentes.
$ cat hosts
1.2.3.4 asdasd
$ LD_LIBRARY_PATH=~/lib getent hosts asdasd 3< ~/hosts
1.2.3.4 asdasd
Se nscd estiver instalado e em execução, você pode ignorá-lo fazendo o mesmo truque, mas desta vez para libc.so.6 e substituir o caminho para o soquete nscd (algo como /var/run/nscd/socket ) com algum caminho inexistente. / p>