Procurando por IPs e escrevendo em arquivo no Bash

0

Estou tentando inverter a pesquisa de uma lista de nomes de host para encontrar seus IPs e gravar em um arquivo. Estou me referindo a este tutorial e expandi-lo para trabalhar com uma lista de nomes de host. Eu sou novo no Bash scripting e aqui está o que eu criei que não imprime como desejado,

for name in hostA.com hostB.com hostC.com;
do
    host $name | grep "has address" | sed 's/.*has address //' |
    awk '{print "allow\t\t" $1 ";" }' > ./allowedip.inc
done
    
por Hyperbola 18.10.2018 / 16:35

2 respostas

2

Use dig :

for host in hostA.com hostB.com hostC.com
do
    # get ips to host using dig
    ips=($(dig "$host" a +short | grep '^[.0-9]*$'))
    for ip in "${ips[@]}";
    do
        printf 'allow\t\t%s\n' "$ip"
    done
done > allowedip.inc

Saída:

$ cat allowedip.inc
allow       64.22.213.2
allow       67.225.218.50
allow       66.45.246.141

Faz um loop por meio de um arquivo com um host por linha:

while IFS= read -r host;
do
    # get ips to host using dig
    ips=($(dig "$host" a +short | grep '^[.0-9]*$'))
    for ip in "${ips[@]}";
    do
        printf 'allow\t\t%s\n' "$ip"
    done
done < many_hosts_file > allowedip.inc
    
por 18.10.2018 / 16:55
0

exemplo do grep:

$ host google.com|grep -oP "has address \K.*"                                                  
216.58.214.238
    
por 18.10.2018 / 16:40