Pequeno gerador de relatório da rede (CSV)

Publicado por Dix (última atualização em 28/11/2016)

[ Hits: 9.005 ]

Download Relatorio_Rede.sh

Download 1477147864.Relatorio_Rede.sh (versão 2)




Estava precisando de um script para gerar uma tabela de IPs e MAC de todos os dispositivos da minha rede para aplicar no DHCP e na tabela ARP estática do firewall, mas não tive a paciência (saco) de verificar um a um, então, criei esse script, liguei tudo na rede e executei ele... PRONTO!

Aí, acrescentei o scan de portas (SYN) do Nmap também, apenas para verificar quais portas estavam abertas...

Tabela criada!!! (IP;MAC;FABRICANTE;HOSTNAME;PORTAS)

Dá para adaptar de acordo com o scan que deseja fazer. Ou retirar o scan e deixar apenas a descoberta de hosts ativos.

Montei muito rápido e ficou meio bagunçado, mas funciona...
Depois vou organizar melhor!

  



Versões atualizadas deste script

Versão 2 - Enviado por Dix em 22/10/2016

Changelog: Funções atualizadas e organizadas.
Linhas desnecessárias eliminadas.
Função para encontrar uma saída para a rede mundial com arping inserida.

Download 1477147864.Relatorio_Rede.sh


Esconder código-fonte

#!/bin/bash
#
# Pequeno Gerador de Relatório da Rede (CSV)
#
# by huddioli
# 2014-08-03
#
# testado com nmap 6.46 (Linux Debian 7)
#
# Estava precisando de um script para gerar uma tabela de IPs e MAC de todos os dispositivos da minha rede para aplicar no DHCP e na tabela ARP estática do Firewall
# Não tive a paciencia(saco) de verificar um a um, entao, criei esse Script, liguei tudo na rede e executei o script... PRONTO!
# Aí, acrescentei o Scan de portas(SYN) do Nmap também apenas para verificar quais portas estavam abertas...
#
# Tabela Criada!!! (IP;MAC;FABRICANTE;HOSTNAME;PORTAS)
#
# Da para adaptar de acordo com o Scan que deseja fazer
# Ou retirar o scan e deixar apenas a descoberta de Hosts ativos
#
# Montei muito rápido e ficou meio baguncado, mas funciona...
# Depois vou organizar melhor!
#
#

REDE="11.0.0.0/21"
NOME_BASE="rede_AP"
IFACES="$NOME_BASE""_Interfaces_ativas.txt"
MEUS_IPS="$NOME_BASE""_Meus_IPs.txt"

function EncontrarPlacas(){

    ifconfig | grep eth | cut -d" " -f1 > $IFACES
    ifconfig | grep wlan | cut -d" " -f1 >> $IFACES

}

function EncontrarIPs(){

    if [ -e $MEUS_IPS  ];
                then
                        rm $MEUS_IPS
                fi

    cat $IFACES | while read PLACA;
    do
        ifconfig $PLACA | grep "inet addr" | cut -c 21- | cut -d" " -f1 >> $MEUS_IPS
    done

}

function ScanearRede(){

    echo "Scaneando os Hosts ativos da rede "$REDE
    echo "Identificando Hosts ativos na Rede..."
    nmap -sP "$REDE" > "$NOME_BASE"_PING.txt
}

function FiltrarDados(){

    #Monta o cabeçalho do Relatorio CSV
    echo "IP;MAC;FABRICANTE;HOSTNAME;PORTAS" > "$NOME_BASE"_COMPILADO.csv
    echo "Coletando e filtrando informações dos Hosts..."
    #Elimina os IP das placas de rede do Computador do Scan para economizar tempo devido às regras do firewall
    cat $MEUS_IPS | while read linha
    do
        cat "$NOME_BASE"_PING.txt | grep report | cut -d" " -f5 | grep -v $linha >> "$NOME_BASE"_IP2.txt
    done
    #Ordena em ordem numérica crescente e elimina as entradas duplicadas
    sort -n "$NOME_BASE"_IP2.txt | uniq > "$NOME_BASE"_IP.txt
    #Cria a base de MACs e de FABRICANTES
    cat "$NOME_BASE"_PING.txt | grep MAC | cut -d" " -f3 > "$NOME_BASE"_MAC.txt
    cat "$NOME_BASE"_PING.txt | grep MAC | tr ")" "(" | cut -d"(" -f2 > "$NOME_BASE"_FABRICANTE.txt
    #Gera o contador para servir de referencia para juntar as informações que estão divididas nos arquivos
    NUM=`wc -l "$NOME_BASE"_IP.txt | cut -d" " -f1`
    #Inicia o Loop para Realizar os Scans e montar o Relatorio
    for (( x=1; x<=$NUM; x++ ))
    do
        if [ -e "$NOME_BASE"_PORT.txt  ];
           then
            rm "$NOME_BASE"_PORT.txt
        fi
        if [ -e "$NOME_BASE"_PORTS.txt  ];
                   then
                        rm "$NOME_BASE"_PORTS.txt
                fi
        #Montando as Variaveis do Relatorio CSV
        IP=`cat "$NOME_BASE"_IP.txt | sed -n "$x p"`
        MAC=`cat "$NOME_BASE"_MAC.txt | sed -n "$x p"`
        FABRICANTE=`cat  "$NOME_BASE"_FABRICANTE.txt | sed -n "$x p"`
        NOMEDOHOST=`nmblookup -A $IP | grep 00 | sed -n "1p" | sed "{ s/\t//g; s/\ //g  }" | cut -d"<" -f1` > "$NOME_BASE"_HOSTNAME.txt
        #Scan de portas de cada IP
        echo "Scan de portas no IP: "$IP
        nmap -sS $IP | grep open | cut -d" " -f1 > "$NOME_BASE"_PORTS.txt
        #Separa as portas do resultado do Scan e os coloca na mesma linha separadas por vírgula
        cat "$NOME_BASE"_PORTS.txt | while read LINHA;
            do
                PORTA=`echo $LINHA | grep tcp | cut -d"/" -f1`
                echo -n "$PORTA""," >> "$NOME_BASE"_PORT.txt
            done
        #O Sed elimina a última vírgula da string de portas gerada e o restante da string tratada é redirecionada para a variável PORTAS
        PORTAS=`cat "$NOME_BASE"_PORT.txt 2> /dev/null | sed "{ s/,*$//  }"`
        echo "$IP"";""$MAC"";""$FABRICANTE"";""$NOMEDOHOST"";""$PORTAS" >> "$NOME_BASE"_COMPILADO.csv
        echo "Relatorio sobre Host "$IP" adicionado a base de dados!"
    done
    mv "$NOME_BASE"_COMPILADO.csv Relatorio_"$NOME_BASE".csv
}

function LimparCache(){
    # Essa linha evita que a funcao de erro sem comando nenhum
    echo "" /dev/null
    # Caso queira apagar os arquivos temporario descomente a proxima linha e a linha "#LimparCache" da function Main()
    #rm "$NOME_BASE"*
}

function Main(){
        echo "String base:" $NOME_BASE
            EncontrarPlacas
            EncontrarIPs
            ScanearRede
            FiltrarDados
            #LimparCache

}

Main

Scripts recomendados

Grave arquivos em pendrive sem sistema de arquivos

Personalizando o seu shell com bashrc_dahora

import-theme

InitX

Systemctl-config - parada ou reativação de um serviço do systemD


  

Comentários
[1] Comentário enviado por SSF1234 em 29/09/2016 - 20:20h

Cara você poderia me ajudar eu utilizo o ubuntu, e quando utilizo seu script ele apresenta mensagem de erro na linha 76, porem não estou conseguindo corrigir esse erro.
Creio que seja alguma incompatibilidade com o sistema na forma de declarar o loop n ubuntu, pois tive que alterar nas linhas de function.
Mensagem de Erro:
Relatorio_Rede.sh: 76: Relatorio_Rede.sh: Syntax error: Bad for loop variable
Erro nessa linha:
for (( x=1; x<=$NUM; x++ ))

[2] Comentário enviado por dix em 03/10/2016 - 11:23h

Meu camarada, vou dar uma olhada hoje pra você... se não me engano, eu atualizei esse script, essa versão é bem antiga. De qualquer forma eu te retorno. Precisa de alguma funcionalidade específica?

[3] Comentário enviado por Renato Lincoln em 18/02/2018 - 12:41h

Estou tentando rodar esse script pelo crontab, mas não estou conseguindo. Manualmente, pelo terminal com o root funciona, mas não no crontab. Vc tem alguma sugestão?

[4] Comentário enviado por dix em 19/02/2018 - 20:32h


[3] Comentário enviado por Renato Lincoln em 18/02/2018 - 12:41h

Estou tentando rodar esse script pelo crontab, mas não estou conseguindo. Manualmente, pelo terminal com o root funciona, mas não no crontab. Vc tem alguma sugestão?


Boa noite, Renato... cara... confesso que esse codigo esta desatualizado, mas se ele funciona como root, tenta colocar no escopo do codigo a constante PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:'
Poe antes do REDE="10.5.1.0/24"
Ou a sua variavel PATH do sistema personalizado (no terminal como root execute: echo $PATH)...
Testa ai e me diz se funcionou!!! rsrs


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts