Ir para o conteúdo principal
Background Image
  1. Posts/

Verificar máquinas ligadas com shell script

·3 minutos·
Sidnei Weber
Autor
Sidnei Weber
Devops Engineer

Estava interessado em criar uma forma de scannear a rede para saber quantos micros estavam conectados a ela, saber nome, grupo, MAC ADDRESS.

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</pre>

Fonte: http://www.vivaolinux.com.br/dica/Ipscan-com-shell-script+dialog+nmap

Relacionados

Exemplos de uso do comando ping
·4 minutos
Bloquear resposta ao ping com sysctl
·1 minuto
Instalando servidor DHCP
·2 minutos
Simular tráfego de usuário para um servidor
·2 minutos
Criando arquivo de SWAP no Linux
·1 minuto
Como redimensionar volume EBS no Linux sem downtime
·2 minutos