Script que identifica na rede a existência de duplicidades de IPs e MACs que utilizam mais de um IP
Publicado por Perfil removido 12/01/2009
[ Hits: 7.755 ]
Este script mantém uma lista com "IP;MAC;data de acesso" dos IPs/MACs de sua rede.
Com base nesta lista ele verifica a existência de casos em que um IP é utilizado por mais de um MAC (IP duplicado) e casos em que um MAC utiliza mais de um IP (MACs espertinhos). PARA O CORRETO FUNCIONAMENTO DO SCRIPT É FUNDAMENTAL QUE LEIA O ARQUIVO LEIA-ME.txt
Obs.: Toda a estrutura do script está em um arquivo ".tar.gz". Para extraí-lo utilize o seguinte comando:
tar -xzf script.rede.tar.gz
Boa sorte!
Magnos
###>>> Arquivo de configuração "sepll.conf" #################### ATENÇÃO !!! ######################## # NÃO APAGUE OU ALTERE O CONTEÚDO CONTIDO ANTES DO '=' # # ##################################################### # ####-- Pastas e Arquivos --#### #- Lista de IPs e MACs duplicados/duplicadores duplicidades=~/DUPLICIDADES.txt # #- Lista das conexões realizadas pelos MACs e IPs associados em cada conexão listaIPmacDATA=~/ip.mac.data.txt # #- Pasta dos arquivos temporários tmp=/tmp/rede.script # ####-----------------------#### # # #- Determina o limite de tempo (em dias) que um IP;MAC permanece na lista de IPs e MACs (listaIPmacDATA) # Ou seja, caso um IP/MAC não se conecte a rede dentro deste limite de tempo, a linha do mesmo é removida. # TEMPO EM DIAS !!! tempo=90 ##$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ ##$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ ###>>> Script mestre "spell.sh" #!/bin/bash ##################-- Arquivo de Configuração --###################### config='spell.conf' # ##################################################################### ######## Obtenção de pastas arquivos e scripts a partir do arquivo de configuração ######### ###- Scripts -### acessos=scripts/list.update/acessos.sh rmold=scripts/list.update/rm.old.sh duplicidade=scripts/duplicidade/duplicidade.sh montalista=scripts/duplicidade/monta.lista.sh ###-----------### ###- Variaveis -### tempo=$(grep -iw ^'tempo' $config | awk -F '=' '{print $2}') ###-------------### ###- Arquivos duplicidades=$(grep -iw ^'duplicidades' $config | awk -F'=' '{print $2}') listaIPmacDATA=$(grep -iw ^'listaIPmacDATA' $config | awk -F'=' '{print $2}') ###- Pastas tmp=$(grep -iw ^'tmp' $config | awk -F'=' '{print $2}') ############################################################################################ test -e $listaIPmacDATA h=$? if [ "$h" = '1' ]; then echo 'a: Lista todos IPs e MACs relacionados, inclusive as datas e horas de acesso.' >$listaIPmacDATA echo 'b: Voce pode fazer uma manutencao aqui, removendo linhas de IP;mac;data quando o mesmo não se conecta a tempo.' >>$listaIPmacDATA echo 'c: Isto ajuda a manter uma lista de duplicidade de IPs atualizada e portanto mais confiavel.' >>$listaIPmacDATA echo 'd: Evitando que duplicidades antigas continuem sendo incluidas na lista de duplicidades.' >> $listaIPmacDATA echo 'e: IP ; MAC ; Data e hora do último acesso.' >> $listaIPmacDATA fi ################## Ações de Pasta ############# rm -rf $tmp #se o diretório já existir ele o apaga, para evitar problemas mkdir -p $tmp ##########---------------------################# ############---- Execução de scripts -----------############ #- Atualiza a listaIPmacDATA sh $acessos $listaIPmacDATA $tmp #- Remove da listaIPmacDATA IPs/MACs que não utilizaram a rede dentro do prazo estimado sh $rmold $tempo $listaIPmacDATA $tmp #- Faz a verificação de duplicidades e MAC espertinhos sh $duplicidade $listaIPmacDATA $tmp #- Monta a lista de duplicidades, listando os IPs duplicados e os MACs espertinhos sh $montalista $duplicidades $tmp ############------------------------------------############ ###-- Deleta pasta de arquivos temporária rm -rf $tmp ##$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ ##$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ ###>>>acessos.sh #!/bin/bash #Arquivos de configuração: #IPs duplicados ################################################################################### ###- Arquivos e Pastas listaIPmacDATA=$1 tmp=$2 ###################### dupIP="$duplicados/ip" dupMAC="$duplicados/mac" arptemp="$tmp/ip.mac.txt" arptmp="$tmp/ip.mac.data.txt" sedtmp="$tmp/sed.tmp" sorttmp="$tmp/sorto.ip.mac.data.txt" ################################################################################### ################################################################################### echo -n 'Procurando IPs e MACs conectados a rede: isto pode demorar um pouco...' arp -a | awk '{print $2,$4}' > $arptemp while read line ; do ip=$(echo $line | egrep -wo "(((([0-9]{1,3})\.){3})[0-9]{1,3})") mac=$(echo $line | egrep -wio "((([0-9a-z]{2}):){5}[0-9a-z]{2})") macExiste=$(echo $mac | awk -F':' '{print $3}') if [ -n "$macExiste" ]; then # define acoes caso o MAC esteja "oculto" echo "$ip;$mac">>$arptmp else echo "$ip;MACoculto">>$arptmp fi done <$arptemp echo 'Concluido!' ################################################################################### #%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% echo -n 'Atualizando lista de acessos (ip.mac.data.txt): ' while read ipMAC ; do ################################################################################### ###- Variaveis ip=$(echo $ipMAC | awk -F';' '{print $1}') mac=$(echo $ipMAC | awk -F';' '{print $2}') acesso=$(date +%d-%m-%Y+%T) ################################################################################### ################################################################################### ### Testa se a linha IP;MAC está na lista d ip;mac a=$(grep -wic "$ip;$mac" "$listaIPmacDATA") #conta o numero de linhas com ip;mac ###---------------------------------------------------- ### Se $a nulo, adiciona linha ip;mac, se não nulo atualiza a data de acesso if [ "$a" -lt '1' ]; then echo "$ip;$mac;$acesso" >>"$listaIPmacDATA" else acessoold=$(grep -iw "$ip;$mac" $listaIPmacDATA | awk -F';' '{print $3}') sed -e "s/$ip;$mac;$acessoold/$ip;$mac;$acesso/g" $listaIPmacDATA >"$sedtmp" && mv -f "$sedtmp" "$listaIPmacDATA" fi ################################################################################### done < "$arptmp" echo "Concluido!" #%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% sort -t . -k1,1n -k2,2n -k3,3n -k4,4n $listaIPmacDATA > $sorttmp && mv -f $sorttmp $listaIPmacDATA ##$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ ##$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ ###>>>rm.old.sh #!/bin/bash ###- Este script remove da lista ip.mac.data.txt linhas (acossiações de IPs e MACs) que não se conectam a rede por um prazo # de tempo estipulado em spell.conf ###- Arquivos tempo=$1 listaIPmacDATA=$2 tmp=$3 listaIPmacDATAtmp="$tmp/rm.old.sh.ip.mac.data.tmp" sedlistatmp="$tmp/sed.ip.mac.data.tmp" ################### ##- Data atual ano=$(date +%Y) mes=$(date +%m) dia=$(date +%d) ##-------------- ###- Passa todas as linha com IPs e MACs para listaIPmacDATAtmp egrep -w "(((([0-9]{1,3})\.){3})[0-9]{1,3})" $listaIPmacDATA >$listaIPmacDATAtmp ###------------------ while read linha ; do acesso=$(echo $linha | awk -F';' '{print $3}') # ultimo acesso do IP/MAC ###- Identifica qual foi a ultima vez que ouve a conexão de ip;mac em listaIPmacDATA acessoano=$(echo $linha | awk -F';' '{print $3}' | awk -F'+' '{print $1}' | awk -F'-' '{print $3}') acessomes=$(echo $linha | awk -F';' '{print $3}' | awk -F'+' '{print $1}' | awk -F'-' '{print $2}') acessodia=$(echo $linha | awk -F';' '{print $3}' | awk -F'+' '{print $1}' | awk -F'-' '{print $1}') ###------------------------- ###- Calcula o numero de dias a partir da ultima conexão diasatual=$((($ano*365)+($mes*30)+$dia)) diasacesso=$((($acessoano*365)+($acessomes*30)+$acessodia)) dias=$(($diasatual-$diasacesso)) ###- Se o numero de dias for superior ao determinado em spell.conf, deleta a linha especifica em listaIPmacDATA if [ "$dias" -ge "$tempo" ]; then ip=$(echo $linha | awk -F';' '{print $1}') mac=$(echo $linha | awk -F';' '{print $2}') sed -e "/$ip;$mac;$acesso/d" $listaIPmacDATA >$sedlistatmp && mv -f $sedlistatmp $listaIPmacDATA fi ###---------------------------- done <$listaIPmacDATAtmp ##$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ ##$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ ###>>>duplicidade.sh #!/bin/bash ################################################################################### ###- Arquivos e Pastas listaIPmacDATA=$1 tmp=$2 ###################### duplicados="$tmp/duplicados" dupIP="$duplicados/ip" dupMAC="$duplicados/mac" listaIP="$tmp/ips.txt" listaMAC="$tmp/macs.txt" ################################################################################### mkdir -p $duplicados mkdir -p $dupIP mkdir -p $dupMAC ################################################################################### ####-- Cria uma lista com todos os IPs contidos em lista.IP.mac.DATA egrep -wo "(((([0-9]{1,3})\.){3})[0-9]{1,3})" $listaIPmacDATA | sort -t . -k1,1n -k2,2n -k3,3n -k4,4n | uniq >$listaIP ################################################################################### ################################################################################### ####-- Cria uma lista com todos os MACs contidos em lista.IP.mac.DATA egrep -wio "((([0-9a-z]{2}):){5}[0-9a-z]{2})" $listaIPmacDATA | sort -t : -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 -k6,6 | uniq >$listaMAC ################################################################################### ################################################################################### ###- Verifica a existência de duplicidades de IPs echo -n "Verificando a existencia de duplicidade de IPs: " while read ip ; do ###- Conta o número de MACs que já utilizaram o IP b=$(grep -wc "$ip" "$listaIPmacDATA") ###---------------------------------------------------- ### Se o número de MACs que já utilizaram o IP é maior que 1, lista os MACs e as datas de acesso if [ "$b" -gt '1' ]; then echo "O IP: $ip já foi utilizado pelos seguintes MACs:">"$dupIP"/"$ip" grep -w $ip $listaIPmacDATA | awk -F';' '{print $2,$3}'>>"$dupIP"/"$ip" fi done <$listaIP echo "Concluido!" ################################################################################### ################################################################################### ###- Verifica e existência de MACs espertinhos echo -n "Verificando a existencia de MACs espertinhos: " while read mac ; do ###- Conta o número de IPs que o MAC já utilizou c=$(grep -wc "$mac" "$listaIPmacDATA") ###--------------------------------------------------- ### Se o número de IPs que o MAC já utilizou é maior que 1, lista os IPs e datas de acesso if [ "$c" -gt "1" ]; then echo "O MAC: $mac já utilizou os seguintes IPs: ">"$dupMAC"/"$mac" grep -wi "$mac" "$listaIPmacDATA" | awk -F';' '{print $1,$3}' >>"$dupMAC"/"$mac" fi done <$listaMAC echo "Concluido!" ################################################################################### ##$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ ##$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ ###>>>monta.lista.sh #!/bin/bash ########################################################################### duplicidades=$1 tmp=$2 ####--- duplicados="$tmp/duplicados" dupIP="$duplicados/ip" dupMAC="$duplicados/mac" ########################################################################### ########################################################################### rm -f $duplicidades ########################################################################### ########################################################################### #- conta o número de arquivos de IPs duplicados nIPs=$(ls -Blt $dupIP | cat -n | awk '{print $1}' | tail -1) #---------------------------------------------- if [ "$nIPs" -gt '1' ]; then # se o diretório não estiver vazio, executa os comandos a=2 echo -n 'Montando lista de IPs duplicados: ' while [ "$a" -le "$nIPs" ]; do ip=$(ls -Bl $dupIP | awk '{print $8}' | head -$a | tail -1) echo ' '>>$duplicidades echo '$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$'>>$duplicidades cat $dupIP/$ip>>$duplicidades a=$(($a+1)) done echo 'Concluído!' fi ########################################################################### ########################################################################### #- conta o número de arquivos de MACs duplicadores nMACs=$(ls -Blt $dupMAC | cat -n | awk '{print $1}' | tail -1) #---------------------------------------------- if [ "$nMACs" -gt '1' ]; then # se o diretório não estiver vazio, executa os comandos a=2 echo -n 'Montando lista de MACs espertinhos: ' while [ "$a" -le "$nMACs" ]; do mac=$(ls -Bl $dupMAC | awk '{print $8}' | head -$a | tail -1) echo ' '>>$duplicidades echo '$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$'>>$duplicidades cat $dupMAC/$mac>>$duplicidades a=$(($a+1)) done echo 'Concluido!' fi ###########################################################################
Administração servidor WEB com Dialog
INSTALA TAR GZ COM MENU GRÁFICO ZENITY
Backup de arquivos do Linux para um servidor FTP
Tornando seu Ubuntu uma distro para testes de intrusão
Converter Arquivo RMVB para AVI
Nenhum comentário foi encontrado.
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Como renomear arquivos de letras maiúsculas para minúsculas
Imprimindo no formato livreto no Linux
Vim - incrementando números em substituição
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
Desempenho abaixo do esperado - travadas e congelamento do sistema ope... (4)
Bash ao invés de Fish no CachyOS (1)
Linux rodando do hd externo ou ssd? (4)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta