Como extrair o endereço IP do hostname da Amazon?

0

Eu realmente não sei por quê, mas o Amazon Web Services me forneceu alguns nomes de host estranhos para minhas máquinas. Agora eu preciso listar todos eles com faca para usar em um script bash. Eu estou dizendo que os IPs são estranhos porque nenhum lugar você pode resolver o hostname, que é inútil apesar de tudo.

No meu script, gostaria de extrair apenas o IP do nome do host. Por exemplo, extraia 10.114.152.134 do seguinte nome de host:

ip-10-114-152-134.valter.henrique.com

Como posso fazer isso?

    
por Valter Silva 11.05.2013 / 10:17

2 respostas

3

Este snippet certamente pode ser melhorado, mas deve fazer o trabalho:

hostname=ip-10-114-152-134.valter.henrique.com
hostip=$(echo ${hostname%%.*} | sed -e 's/ip-//' -e 's/-/./g')

${hostname%%.*} remove tudo após (e incluindo) o primeiro . ; sed , em seguida, remove o% inicialip- e substitui os traços por pontos.

Você também pode usar apenas um comando sed :

echo ip-10-114-152-134.valter.henrique.com | sed 's/ip-\(.*\)-\(.*\)-\(.*\)-\(.*\)\.valter\.henrique\.com/.../'

O regex nos primeiros colchetes (você precisa escapar destes: \(.*\) ) é atribuído a e assim por diante.

Aqui está a última variante, usando apenas funções bash:

IFSsave="$IFS"; IFS=-                            # save IFS prior modifying it
hostip=""
hostname=ip-10-114-152-134.valter.henrique.com   # initial values
hostname=${hostname#*-}                          # remove the "ip-" part
hostname=${hostname%%.*}                         # remove the ".valter.henrique.com" part
for i in $hostname; do                           # loop over 10-114-152-134, splitted at "-" ($IFS)
   hostip="${hostip}${i}."                       # append number. to $hostip
done
hostip=${hostip%.}                               # remove trailing dot
echo $hostip                                     # print resulting IP
IFS="$IFSsave"                                   # restore IFS
    
por 11.05.2013 / 10:31
3

Isso é menos robusto do que a variação de Bash somente de mpy, pois assume que a parte do endereço IP sempre cai na mesma posição, mas é um pouco mais curta e um pouco mais rápida.

hostname=ip-10-114-152-134.valter.henrique.com
IFSsave=$IFS
IFS=.-
parts=($hostname)
hostip="${parts[*]:1:4}"
IFS=$IFSsave
echo "$hostip"

Usar * como um subscrito de matriz entre aspas faz com que o primeiro caractere de IFS seja inserido entre cada elemento da matriz. Configurar IFS para dois caracteres faz com que a divisão seja feita em qualquer um deles.

Aliás, esse nome de domínio resolve assim para mim:

$ host ip-10-114-152-134.valter.henrique.com
ip-10-114-152-134.valter.henrique.com has address 208.91.197.27

O endereço 10.114.152.134 é um IP privado que não é roteado pela Internet. Provavelmente, só é alcançável na rede da AWS.

    
por 11.05.2013 / 13:23