Para um administrador de uma rede, saber quais e quantos computadores estão na rede é um ponto importante para um bom controle, para isso estava pesquisando um "ipscan" para
Linux e resolvi ir em busca disso.
Estava interessado em criar uma forma de scannear a rede para saber quantos micros estavam conectados a ela, saber nome, grupo, MAC ADDRESS.
Sei que existem algumas soluções desse tipo na internet (ipscan), principalmente para Windows. Mas estava disposto a criar um para Linux (não que não exista, mas queria criar um de minha autoria e em shell script). Foi então que lendo o manual do nmap verifiquei que existia uma opção que me voltava somente os hosts ligados.
Bom chega de blablabla.
Obs.: Somente testei em Ubuntu 10.04 LTS.
Para que o script funcione será preciso instalar alguns softwares:
dialog:
# apt-get install dialog
nmap:
# apt-get install nmap
Copie o código e cole em um arquivo texto e salve com um nome de sua preferência, de permissão para executar (chmod +x nome_do_arquivo.sh) e em seguida execute-o (./nome_do_arquivo.sh):
#!/bin/bash
Principal ( ) { ## Inicio Primeiro Bloco
clear
# Loop que mostra o menu principal
while : ; do # Mostra o menu na tela, com as ações disponíveis
opcao=$(
dialog --stdout \
--title 'Menu principal' \
--menu 'Escolha as opções:' \
0 0 0 \
1 'Scannear IPs da Rede' \
0 'Sair')
[ $? -ne 0 ] && Sair # Se apertado CANCELAR ou ESC, então vamos Sair...
case $opcao in ## ## Inicio case
1)ipscan ;;
0)Sair ;;
esac ## Fim da verificação
done
}
## FIM MENU PRINCIPAL
## ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ##
ipscan ( ) {
clear
inicio=$(dialog --stdout --title 'Firerock ipscan' --inputbox 'Inicio (Ex.192.168.0.1)' 0 0 )
[ $? -ne 0 ] && Principal # Se apertado CANCELAR ou ESC, então vamos Sair...
final=$(dialog --stdout --title 'Firerock ipscan' --inputbox 'Final (Ex.192.168.0.254)' 0 0 )
[ $? -ne 0 ] && ipscan # Se apertado CANCELAR ou ESC, então vamos Sair...
#faixa_rede=`echo "$inicio" | cut -d '.' -f 1-3`
inicio_host=`echo "$inicio" | cut -d '.' -f 4`
final_host=`echo "$final" | cut -d '.' -f 4`
inicio_host=$(expr $inicio_host - 1)
hosts_verificados=$(expr $final_host - $inicio_host)
dialog --yesno 'O processo pode levar alguns minutos! Deseja Continuar?' 6 45
if [ $? = 0 ]; then
continua
else
clear
ipscan
fi
}
continua ( ) {
echo " "
echo "STATUS ENDEREÇO IPv4 MAC ADDRESS NOME GRUPO " > /tmp/hosts.txt
echo "------------------------------------------------------------------------------------------" >> /tmp/hosts.txt
ips_on=$(nmap -sP "$inicio-$final_host" | awk '/^Host/ {print $2}')
online="0"
offline="0"
for ip in $ips_on; do
$(nmblookup -A $ip > /tmp/nm_hosts.txt) ## Saída do comando é # entre clientes Windows e Unix (Linux)
mac_address_win2003=$(cat /tmp/nm_hosts.txt | awk 'NR==9 {print $4}')
mac_address_xp=$(cat /tmp/nm_hosts.txt | awk 'NR==7 {print $4}')
nm_pc=$(cat /tmp/nm_hosts.txt | awk 'NR==2 {print $1}')
nm_grupo=$(cat /tmp/nm_hosts.txt | awk 'NR==3 {print $1}')
mac_address_unix=$(cat /tmp/nm_hosts.txt | awk 'NR==10 {print $4}') ##inicio de verificação p/ ver se é cliente Unix
if [ "$mac_address_unix" == "00-00-00-00-00-00" ]; then ## Se $mac_address_unix for igual a 00-00-00-00-00-00 é um cliente unix
#mac_address=$(cat /tmp/nm_hosts.txt | awk 'NR==10 {print $4}')
nm_pc=$(cat /tmp/nm_hosts.txt | awk 'NR==2 {print $1}')
nm_grupo=$(cat /tmp/nm_hosts.txt | awk 'NR==6 {print $1}')
echo "On $ip $mac_address_unix $nm_pc $nm_grupo" >> /tmp/hosts.txt
online=$(expr $online + 1)
else
if [ "$mac_address_xp" == "" ]; then
echo "On $ip $mac_address_win2003 $nm_pc $nm_grupo" >> /tmp/hosts.txt
online=$(expr $online + 1)
else
if [ ! $nm_pc == 'No' ]; then
echo "On $ip $mac_address_xp $nm_pc $nm_grupo" >> /tmp/hosts.txt
online=$(expr $online + 1)
else
mac_address=
nm_pc=
nm_grupo=
echo "On $ip $mac_address $nm_pc $nm_grupo" >> /tmp/hosts.txt
online=$(expr $online + 1)
fi
fi
fi
done
offline=$(expr $hosts_verificados - $online)
echo "------------------------------------------------------------------------------------------" >> /tmp/hosts.txt
echo " " >> /tmp/hosts.txt
echo "Informações:" >> /tmp/hosts.txt
echo "Faixa de IPs verificados:" >> /tmp/hosts.txt
echo "Inicio: $inicio" >> /tmp/hosts.txt
echo "Final : $final" >> /tmp/hosts.txt
echo " " >> /tmp/hosts.txt
echo "Hosts Verificado: $hosts_verificados" >> /tmp/hosts.txt
echo "Hosts Online: $online" >> /tmp/hosts.txt
echo "Hosts Offline: $offline" >> /tmp/hosts.txt
echo " " >> /tmp/hosts.txt
echo "OBS:" >> /tmp/hosts.txt
echo "Endereços com status On que não possuem (ou é invalido) MAC ADDRESS, NOME, GRUPO ou qualquer um, geralmente são clientes UNIX." >> /tmp/hosts.txt
echo "Exemplos:" >> /tmp/hosts.txt
echo "On 192.168.0.1 " >> /tmp/hosts.txt
echo "On 192.168.0.254 00-00-00-00-00-00 Meupc MEUGRUPO" >> /tmp/hosts.txt
dialog \
--title 'Lista de Hosts Online' \
--textbox /tmp/hosts.txt \
0 0
ipscan
}
## ------------------------------------------------------------------------------------------------------------------------------------------------------
Sair ( ) {
clear
exit
}
Principal
## FIM ##
Nenhum comentário foi encontrado.