Bash: pesquisa reversa de DNS de endereços IP ativos

9

Eu tenho um comando de uma linha que lista os 10 principais endereços IP mais ativos de um log de acesso ao servidor web:

cat access.log | awk '{print $1}' | sort | uniq -c | sort -n | tail -n10

Um conjunto de resultados de amostra (com apenas 3 entradas para simplicidade) seria:

20 12.34.56.7
22 3.67.89.201
29 9.0.203.255

Como você pode ver, a contagem precede o endereço IP, com os dois separados por um espaço em branco. Na verdade, há espaços em branco antes da contagem, mas não consigo mostrá-los aqui.

Eu gosto de fazer uma pesquisa inversa de DNS dos endereços IP para que fique assim:

20 12.34.56.7 (d12-34-56-7.abhsia.telus.net)
22 3.67.89.201 (customer.vpls.net)
29 9.0.203.255 (9-0-203-255.hlrn.qwest.net)

Como posso fazer isso sem recorrer a um script (ou seja, aderir a um comando de uma linha)? Qualquer conselho é muito apreciado.

    
por GooDoo 24.09.2013 / 10:20

1 resposta

15

Você pode usar dig +noall +answer -x <IP> para procurar um endereço IP.

Para fazer um loop em um arquivo que contém uma lista de endereços IP:

while read ip; do dig +noall +answer -x $ip; done < ips.txt

Ou canalize a saída do seu comando de contagem. Desta vez, obtemos a contagem e os endereços IP separadamente e depois os imprimimos em uma linha:

cat access.log | awk '{print $1}' | sort | 
uniq -c | sort -n | tail -n10 |
while read count ip; do printf "%d " $count; printf "%s " $ip; dig +noall +answer -x $ip; done

Exemplo (desculpe pelo UUOC):

cat test | while read count ip; do printf "%d " $count; printf "%s " $ip; dig +noall +answer -x $ip; done
20 8.8.8.8 8.8.8.8.in-addr.arpa.    52767   IN  PTR google-public-dns-a.google.com.
22 8.8.4.4 4.4.8.8.in-addr.arpa.    61369   IN  PTR google-public-dns-b.google.com.

Você pode canalizar ainda mais a saída de dig no awk para obter apenas o nome do host:

cat test | while read count ip; do printf "%d " $count; printf "%s " $ip; echo $(dig +noall +answer -x $ip | awk '{ print $(NF) }'); done
20 8.8.8.8 google-public-dns-a.google.com.
22 8.8.4.4 google-public-dns-b.google.com.
    
por 24.09.2013 / 10:36