Eu tento usar a resolução de nomes e obter o endereço IP de um site. Eu usei o comando nslookup e usei a 6ª linha de sua saída. Porque notei que a saída do nslookup contém o endereço IP (no IPv4) na 6ª linha. Meu comando foi:
website=<somewebsiteURL>
IP=$(nslookup "$website" | head -n 6 | tail -n 1 | cut -d" " -f2)
Também tentei o comando sed para atingir o mesmo objetivo e usei:
website=<somewebsiteURL>
IP=$(nslookup "$website" | sed -n 6p | cut -d" " -f2)
o resultado foi o mesmo, o resultado não é confiável, às vezes funcionou, às vezes não.
Funciona corretamente, mas nem sempre. Às vezes, ele lê a 7ª linha, não a 6ª linha e falha.
Na verdade, resolvi meu problema usando outra abordagem:
website=<somewebsiteURL>
newIP=$(nslookup "$website" | grep "Address: " | head -n 1 | cut -d" " -f2)
que forneceu a linha e o endereço IP corretos todas as vezes (embora possa fornecer mais de um IP> nslookup pode retornar mais de um IP )
Por que os dois primeiros códigos falham?
Você pode dar uma chance de
host
comandar. Como geralmente mais de um IP pode ser associado a um nome de host, você provavelmente ficará satisfeito com o primeiro.Isso parece ser mais confiável
sed 1q
filtra todas as linhas, exceto a 1ª,awk '{ print $NF }'
imprime o último campo que é o IP que você deseja e-4
instrui a usar o endereço ipV4, você provavelmente deseja issoUse
grep
para analisar strings que "se parecem" com endereços IPv4 válidos:Use ferramentas como
dig
. Ele pode produzir diretamente as informações que você deseja sem a necessidade de uma ferramenta de análise externa: