tail file do servidor remoto e nslookup no local

1

Eu preciso de um script para resolver hosts.

Por enquanto eu executo este script na máquina local

for i in 'tail -F access.log | awk '{print $8}' | awk '{gsub("http://|/.*","")}2' | awk '{gsub("http://|:.*","")}1' | grep -E -v "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}"'
do 
   nslookup $i [dns-server_ip]; 
done > ips.txt

Mas eu preciso do arquivo tail de alguns hosts remotos e executo o nslookup no meu computador local e não tenho a menor idéia de como fazê-lo.

    
por Alex K. 13.08.2015 / 08:49

1 resposta

2

Use ssh?

A maioria dos comandos pode ser executada remotamente, basta prefixar o comando ssh , portanto, substitua tail -F access.log por ssh REMOTEHOST tail -F access.log == >

ssh myUSER@myREMOTEHOST tail -F access.log |
awk '{print $8}' |
awk '{gsub("http://|/.*","")}2' | awk '{gsub("http://|:.*","")}1' |
grep -E -v "([0-9]{1,3}\.){3})[0-9]{1,3}" | while read i ;
do 
   nslookup $i $dnsServerIP; 
done > ips.txt

Como @kasperd e @archemar também sugeriram, você poderia / deveria limpar esse longo pipeline. Aqui está minha opinião:

ssh myUSER@myREMOTEHOST tail -F access.log |
awk '{$0=$8; gsub("https?://|[/:].*","")} !/([0-9]{1,3}.){1,3}[0-9]{1,3}/' |
while read i ; do
    nslookup $i $dnsServerIP; 
done > ips.txt

Explicação:

  • $0=$8 . Na saída do seu exemplo, a coluna com o URL que você deseja é o número 8. Este comando sobrescreve $0 (a linha inteira) com apenas o elemento $8 , efetivamente jogando fora o resto. Isso substitui '{print $8}'

  • gsub("https?://|[/:].*","")} substitui as duas chamadas do gsub por uma que abrange todas as possibilidades em uma. Em seu código, você também pesquisou "http: //" duas vezes e não encontrou http s .

  • !/([0-9]{1,3}.){1,3}[0-9]{1,3}/' substitui sua chamada grep separada ao usar exatamente a mesma expressão regular. Ele é avaliado como verdadeiro, quando $0 não é um IP numérico, e isso implicitamente {print $0}' . Um pouco mais curto h=$0;gsub(/[0-9.]/,"",h)} h tem o mesmo efeito.

Observação: as porcentagens 2 e 1 atrás do } de suas gsub -calls são avaliadas como true , que por sua vez é expandida implicitamente para true {print $0} . É assim / por que a última regex na minha solução imprime implicitamente a linha não correspondente.

    
por 13.08.2015 / 08:57