Script ou ferramenta para obter o endereço IP de um host remoto

4

Eu quero definir uma variável de ambiente com o endereço IP de um determinado host remoto. Esta é a solução para a qual cheguei:

export IP='curl http://network-tools.com/default.asp?host=www.example.com | 
       grep -oE '<br>[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' | 
       cut -c5-'

Funciona bem, mas tenho algumas perguntas:

  1. Existe uma ferramenta simples para obter o mesmo resultado? Eu preciso disso para trabalhar através de um proxy que limita os nomes de host, é por isso que eu uso a página de ferramentas de rede.
  2. Como posso fazer isso uma função do nome do host? algo como getIP (hostname)
por Esteban Crespi 17.07.2012 / 12:54

2 respostas

5

Tente algo como

export IP='( dig ${HOSTNAME} A +short | tail -n1; \
             dig ${HOSTNAME} AAAA +short | tail -n1 ) \
           | head -n1'

Isso lhe dará:

  • Para um host com pelo menos um endereço IPv4, (um dos) o endereço IPv4
  • Para um host sem endereços IPv4, mas com pelo menos um endereço IPv6, (um deles) o endereço IPv6
  • Para um host sem endereço (IPv4 ou IPv6) no DNS, ou se houver uma falha do resolvedor, um valor vazio

Se você não precisa de recursos IPv4 ou IPv6 (sua pergunta parece indicar que você está mais interessado no endereço IPv4), basta remover o comando dig ( A é IPv4, AAAA é IPv6). Então, se você está interessado apenas em endereços IPv4:

export IP='dig ${HOSTNAME} A +short | tail -n1'

O tail -n1 garante que você obtenha um endereço IP (no caso de CNAME e possivelmente outros tipos de registro, dig exibe o nome canônico referenciado na primeira linha). O head -n1 garante que você obtenha apenas um único endereço retornando apenas a primeira linha da saída restante (desnecessário no caso de apenas uma família de endereços, pois tail retornará apenas um endereço). Como os registros de DNS são normalmente veiculados de maneira round-robin, não há garantia de qual endereço exato será retornado para hosts de vários endereços.

Eu não estou muito familiarizado com a escrita de funções bash, mas deve ser relativamente fácil transformar isso em uma função.

    
por 17.07.2012 / 14:48
2

Tente o seguinte:

  • host www.example.com
  • nslookup www.example.com
  • dig www.example.com

Dependendo da quantidade de informações adicionais que você deseja, escolha o candidato apropriado.

    
por 17.07.2012 / 13:00