Verificar máquinas ligadas com shell script

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:

1
apt-get install dialog

nmap:

1
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):

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
#!/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

0%