Pinga vários IPs, tentando descobrir o hostname e MAC

Publicado por eli marques junior (última atualização em 16/08/2013)

[ Hits: 4.812 ]

Download eping.sh




Pinga vários IPs, tentando descobrir o hostname e MAC.

A saída do script é para ser assim:

10.1.4.28 OK
        CAIXABRANCA
        MAC Address = AC-16-2D-34-9C-BD

10.1.4.29 OK
        CAIXAPRETA  
        MAC Address = AC-16-2D-34-9C-B4

10.41.4.30 DOWN
10.41.4.31 DOWN
10.41.4.32 DOWN


Exemplo:

$ ./eping.sh -p 10.196.1 1 250

  



Esconder código-fonte

#!/bin/bash
#ELI MARQUES JUNIOR
#[email protected]



function pinga_neles(){
    clear
    num=0
    DIR_cria=/tmp/ping-eli/cria
    DIR=/tmp/ping-eli

    if [ -d "$DIR_cria/pingar" ] && [ -d "$DIR_cria/pingando" ];then
        rm $DIR/ARQ-final.txt
        rm $DIR/RELATORIO.txt
       else
        mkdir -p $DIR_cria/pingar
        mkdir -p $DIR_cria/pingando
    fi

    for (( a=$3; a<=$4; a++ )); do
        echo "
             ping -c 2 $2.$a >> /dev/null
             x=\$?
             if [ \$x -eq 0 ]; then
                echo "$2.$a OK" >> $DIR_cria/ARQ$a.txt
                nmblookup -A $2.$a | egrep -i '(mac|<00>)'| grep -vi \<group\> | cut -d' ' -f1,2-4 >> $DIR_cria/ARQ$a.txt
                echo  " " >> $DIR_cria/ARQ$a.txt
               else
                echo $2.$a DOWN >> $DIR_cria/ARQ$a.txt
             fi

        " >> $DIR_cria/pingar/script.$num.sh
        num=`expr $num + 1`
    done

    cd $DIR_cria/pingar/
    count=`ls | wc -l`
    echo Total: $count
    echo -------------------------
    count0=0
    lock=20

    while [ $count0 -lt $count ]; do

        echo "Falta(m): `expr $count - $count0`"
        mv script.$count0.sh ../pingando/
        sh $DIR_cria/pingando/script.$count0.sh &
        count0=`expr $count0 + 1`

        if [ $count0 == $lock ]; then
            echo Lock: $lock
            tempo=\.
            segundos=1
            while (( $segundos <= 5)); do
            echo -en "\rAguarde $tempo `expr 5 - $segundos`"
            sleep 1
            tempo=$tempo\.
            ((segundos++))
                        if (( $segundos > 5 )); then
                             echo -e "\n"
                        fi
                    done
            lock=`expr 20 + $lock`
        fi
    done

    if [ $count0 == $count ]; then
            tempo=\.
            count=1
            while (( $count <= 10)); do
        echo -en "\rAguarde mais `expr 10 - $count` segundos $tempo"
        sleep 1
                tempo=$tempo\.
                ((count++))
            done

        cat $DIR_cria/ARQ*.txt >> $DIR/ARQ-final.txt
        rm $DIR_cria/ARQ*.txt

        clear
        echo "-------------------------------------------------------"
        rm ../pingando/script.*.sh
        grep -A 3 -i OK $DIR/ARQ-final.txt | grep -vi down >> $DIR/RELATORIO.txt
        grep -i down $DIR/ARQ-final.txt | sort -h >> $DIR/RELATORIO.txt
        more $DIR/RELATORIO.txt
    fi

}


if [ -z "$1" ] || [ "$1" != "-p" ] && [[ "$1" != "-"* ]]; then
      echo "      $script -h for help"
fi

while getopts  ":hp:" opts; do
        script=`echo $0 | cut -d/ -f6`

    case $opts in
        h) echo "    $script -p \"rede\" \"inicio\" \"fim\""
               echo "    ex.: $script -p 10.196.3 1 254";;
        p) pinga_neles $1 $2 $3 $4;;
        :) echo "    Option -p requires an argument."
           exit 1;;
        *) echo "    $script -h for help"
           exit 1;;
    esac
done

Scripts recomendados

Convertendo rmvb para avi

GRUB-recovery

Instalar impressora no CUPS a partir de um arquivo PPD

Alterador de sufixo

Envia e-mail notificando configurações de uma máquina


  

Comentários
[1] Comentário enviado por ranzes em 16/08/2013 - 20:10h

Parabéns pelo script.
Mas não seria mais fácil rodar nmap com uma linha de comando com 3 parâmentros ?

[2] Comentário enviado por eli.marques em 19/08/2013 - 10:51h


[1] Comentário enviado por ranzes em 16/08/2013 - 20:10h:

Parabéns pelo script.
Mas não seria mais fácil rodar nmap com uma linha de comando com 3 parâmentros ?


Realmente é muito mais fácil utilizar o nmap, mas eu só fiz o script para estudar mesmo ...Obrigado.


Contribuir com comentário