O primeiro passo seria tentar usar o Nmap da maneira que foi projetado. Como o Nmap realiza a descoberta do host ("ping sweep") antes de cada varredura de porta, você pode executar as duas etapas de uma só vez com este comando simples:
nmap -p 80,443,8080 [TARGETS]
Se você realmente precisa realizar a descoberta do host separadamente da varredura de porta, use as robustas opções de saída legíveis por máquina do Nmap, como XML ou Saída do Grepable. Para versões mais antigas do Nmap, a maneira mais fácil seria fazer a descoberta do host e salvar a saída do Grepable da seguinte forma:
nmap -sn [TARGETS] -oG ping-sweep.gnmap
Então você pode extrair os endereços IP facilmente com o awk:
awk '/Status: Up/{print $2}' ping-sweep.gnmap > targets.txt
e importe-os diretamente para o Nmap:
nmap -p 80,443,8080 -iL targets.txt
Como alternativa, com o Nmap 7.00 ou mais recente, você pode usar o formato de saída XML salvo com -oX ping-sweep.xml
e os alvos -xml Script NSE:
nmap -p 80,443,8080 --script targets-xml --script-args newtargets,iX=ping-sweep.xml
Com qualquer uma dessas opções, se a varredura de descoberta do host for recente o suficiente, você poderá adicionar a opção -Pn
para pular a fase de descoberta do host da varredura de porta. Isso economiza um pouquinho de velocidade de verificação, já que você deve poder contar com os mesmos hosts que ainda estão ativos.
O que você realmente não deveria fazer é qualquer solução que envolva loops ou xargs
, pois eles acabarão lançando uma instância separada do Nmap para cada destino. Isso é um desperdício e é desnecessário, pois cada instância terá que duplicar o trabalho de carregar arquivos de dados e enviar probes de tempo para monitorar a capacidade da rede, e as instâncias separadas estarão competindo entre si pelos recursos de rede em vez de cooperar. Além disso, você terá que recombinar suas saídas separadas no final.