Primeiramente, gosto de verificar as páginas do manual do linux para perguntas como esta. Também digno de nota, é que este script usa a criação de canais: link
Por exemplo, abrindo o terminal e digitando man nmap
, podemos ver o que o nmap
faz e o que cada argumento significa
Da página man de nmap
Nmap (“Network Mapper”) is an open source tool for network exploration
and security auditing.
-n/-R: Never do DNS resolution/Always resolve [default: sometimes]
-p <port ranges>: Only scan specified ports
-sS/sT/sA/sW/sM: TCP SYN/Connect()/ACK/Window/Maimon scans
-Pn (No ping) . This option skips the Nmap discovery stage altogether.
--open (Show only open (or possibly open) ports) .
Então, a partir disso, parece que estamos fazendo algum tipo de varredura sem resolução de DNS, apenas na porta 80, com um pacote SYN e ignorando o estágio de descoberta. Além disso, parece que estamos interessados apenas em portas abertas, e estamos fazendo isso para tudo o que parece corresponder a 192.168.1. *.
Isso ocorre porque o endereço é 192.168.1.0/24, onde 24 corresponde ao número de bits no IP (Outra lição!). 192.168.1.1/16 significaria qualquer coisa em 192.168. . , 192.168.1.1/8 significaria qualquer coisa em 192. . . *, E assim por diante.
O Grep escaneia a entrada e imprime as linhas que correspondem à sua consulta. Neste caso, ele irá passar por tudo o que o Nmap lhe disser e imprimir apenas as linhas que contenham "relatório de varredura do Nmap".
Quando eu corro:
sudo nmap -n -p80 -sS -PN --open 192.168.1.1 | \
grep "Nmap scan report"
o resultado é: "Relatório de varredura do Nmap para 192.168.1.1"
A partir daí, a linha "relatório de varredura do Nmap para 192.168.1.1" é inserida na entrada awk
. A partir da página do manual: "mawk - leitura de padrões e linguagem de processamento de texto"
Nesse contexto, awk
está pegando o "relatório de varredura do Nmap para 192.168.1.1" que mencionei e isolando apenas o endereço IP. De fato, podemos trapacear um pouco testando isso no terminal:
echo Nmap scan report for 192.168.1.1 | awk '{print $5}'
vai cuspir: 192.168.1.1
Agora, há o loop while acontecendo:
while read IP; do ping -c 1 $IP && echo "I can ping $IP" ; done
O loop while
diz que, embora exista um IP a ser lido, ping
it -c
times (neste caso, um) e (& &) imprimem na janela de comando (echo) " Eu posso ping <IP>
", antes que a iteração do loop chegue ao fim. O que o ping faz?
Vamos verificar a página do manual: "ping, ping6 - enviar ICMP ECHO_REQUEST para hosts da rede"
Portanto, para todos os endereços IP que o nmap determinou possuíam portas abertas 80, o computador deveria pingar (enviar um ICMP ECHO_REQUEST) uma vez e imprimir que foi feito.
Agora, a porta 80 é usada para tráfego HTTP, em outras palavras, tipo de servidor web. Como o nmap foi avisado para ver a porta aberta 80, um host (computador habilitado para internet) com uma porta fechada 80 será ignorado. Por essa razão, eu diria que sua melhor aposta é provável "Ela verá se o ICMP ECHO REPLY é retornado de todos os hosts executando servidores da web no intervalo 192.168.1.1-255."