"Ipscan" com shell script+dialog+nmap

Publicado por Erlan Fernando Salvador em 23/08/2011

[ Hits: 8.283 ]

 


"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

Trabalhando com arquivos em Perl (parte 2)

Como restaurar o Ubuntu (removendo suas variações) 11.10 Oneiric

Localizando IP de seu servidor Linux (inclusive IP dinâmico)

Clonando máquinas na rede pelo UDP Cast (sem Live CD do mesmo)

Internet aliada ao conhecimento = crescimento

  

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