"Ipscan" com shell script+dialog+nmap

Publicado por Erlan Fernando Salvador em 23/08/2011

[ Hits: 8.277 ]

 


"Ipscan" com shell script+dialog+nmap



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 ##
Linux: 'Ipscan' com shell script+dialog+nmap


Outras dicas deste autor
Nenhuma dica encontrada.
Leitura recomendada

Fechando programas que não estão respondendo no modo gráfico

Migrando a base OpenLDAP de BDB para HDB

Como mudar o /home para uma nova partição

Instalando o OpenSuSE a partir do Windows

IPPL - IP Protocols Logger

  

Comentários

Nenhum comentário foi encontrado.



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts